|
5 | 5 | package main |
6 | 6 |
|
7 | 7 | import ( |
8 | | - "errors" |
9 | 8 | "fmt" |
10 | 9 | "os" |
11 | 10 | "strings" |
| 11 | + "sync" |
12 | 12 |
|
13 | 13 | "github.com/godbus/dbus/v5" |
14 | | - "github.com/linuxdeepin/dde-api/session" |
15 | 14 | "github.com/linuxdeepin/dde-daemon/calltrace" |
16 | 15 | "github.com/linuxdeepin/dde-daemon/loader" |
| 16 | + dbusmgr "github.com/linuxdeepin/go-dbus-factory/system/org.freedesktop.dbus" |
17 | 17 | "github.com/linuxdeepin/go-gir/glib-2.0" |
18 | 18 | "github.com/linuxdeepin/go-lib/dbusutil" |
19 | 19 | "github.com/linuxdeepin/go-lib/gsettings" |
@@ -252,14 +252,44 @@ func (s *SessionDaemon) getAllDefaultDisabledModules() []string { |
252 | 252 |
|
253 | 253 | func (s *SessionDaemon) execDefaultAction() { |
254 | 254 | var err error |
255 | | - if hasDDECookie { |
256 | | - // start part1 |
257 | | - err = loader.EnableModules(s.part1EnabledModules, s.part1DisabledModules, 0) |
258 | | - session.Register() |
259 | | - |
260 | | - } else { |
261 | | - err = loader.EnableModules(s.getAllDefaultEnabledModules(), |
262 | | - s.getAllDefaultDisabledModules(), getEnableFlag(s.flags)) |
| 255 | + err = loader.EnableModules(s.part1EnabledModules, s.part1DisabledModules, 0) |
| 256 | + if err != nil { |
| 257 | + logger.Warning("Failed to enable part1 modules:", err) |
| 258 | + os.Exit(3) |
| 259 | + } |
| 260 | + var once sync.Once |
| 261 | + |
| 262 | + sessionBus, _ := dbus.SessionBus() |
| 263 | + dbusDaemon := dbusmgr.NewDBus(sessionBus) |
| 264 | + sessionSigLoop := dbusutil.NewSignalLoop(sessionBus, 10) |
| 265 | + sessionSigLoop.Start() |
| 266 | + dbusDaemon.InitSignalExt(sessionSigLoop, true) |
| 267 | + var handler dbusutil.SignalHandlerId |
| 268 | + handler, err = dbusDaemon.ConnectNameOwnerChanged(func(name, oldOwner, newOwner string) { |
| 269 | + if name == "org.deepin.dde.SessionManager1" { |
| 270 | + if len(newOwner) != 0 { |
| 271 | + logger.Info("org.deepin.dde.SessionManager1 is starting") |
| 272 | + once.Do(func() { |
| 273 | + s.StartPart2() |
| 274 | + dbusDaemon.RemoveHandler(handler) |
| 275 | + }) |
| 276 | + } |
| 277 | + } |
| 278 | + }) |
| 279 | + if err != nil { |
| 280 | + logger.Warning(err) |
| 281 | + } |
| 282 | + |
| 283 | + ok, err := dbusDaemon.NameHasOwner(0, "org.deepin.dde.SessionManager1") |
| 284 | + if err != nil { |
| 285 | + logger.Warning("Failed to check org.deepin.dde.SessionManager1 owner:", err) |
| 286 | + os.Exit(3) |
| 287 | + } |
| 288 | + if ok { |
| 289 | + once.Do(func() { |
| 290 | + s.StartPart2() |
| 291 | + dbusDaemon.RemoveHandler(handler) |
| 292 | + }) |
263 | 293 | } |
264 | 294 |
|
265 | 295 | if err != nil { |
@@ -306,9 +336,6 @@ func (s *SessionDaemon) CallTrace(times, seconds uint32) *dbus.Error { |
306 | 336 | } |
307 | 337 |
|
308 | 338 | func (s *SessionDaemon) StartPart2() *dbus.Error { |
309 | | - if !hasDDECookie { |
310 | | - return dbusutil.ToError(errors.New("env DDE_SESSION_PROCESS_COOKIE_ID is empty")) |
311 | | - } |
312 | 339 | // start part2 |
313 | 340 | err := loader.EnableModules(s.part2EnabledModules, s.part2DisabledModules, 0) |
314 | 341 | return dbusutil.ToError(err) |
|
0 commit comments