Maneira universal de sair do terminal via dbus

4

Sou novo em dbus e vi diferentes formas de efetuar logout do terminal, dependendo do env da área de trabalho. Mas estou curioso para saber se há alguma maneira de sair de qualquer ambiente de trabalho usando dbus messages?

No GNOME:

dbus-send --session --type=method_call --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.Logout uint32:1

No KDE:

dbus-send --print-reply --dest=org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.logout int32:0 int32:0 int32:0

Existe algum comando que funcione em cada ambiente de trabalho (como usar o sistema dbus )?

    
por user173408 24.06.2016 / 20:10

1 resposta

5

Em systemd setups, você deve ser capaz de encerrar uma sessão através de logind . dbus interface:

dbus-send --system --print-reply --dest=org.freedesktop.login1 \
/org/freedesktop/login1 'org.freedesktop.login1.Manager.TerminateSession' \
string:c2

em que c2 é a sequência de ID da sessão; para obter o ID da sessão que você pode executar

loginctl
    SESSION       UID  USER           SEAT            
        c1        120  gdm            seat0           
        c2       1000  don            seat0           

2 sessions listed

ou, se preferir, também via dbus interface:

dbus-send --system --print-reply --dest=org.freedesktop.login1 \
/org/freedesktop/login1 'org.freedesktop.login1.Manager.ListSessions'

que retorna algo como

   array [
      struct {
         string "c1"
         uint32 120
         string "gdm"
         string "seat0"
         object path "/org/freedesktop/login1/session/c1"
      }
      struct {
         string "c2"
         uint32 1000
         string "don"
         string "seat0"
         object path "/org/freedesktop/login1/session/c2"
      }
   ]
    
por 25.06.2016 / 14:01