透過 dbus 從終端註銷的通用方法

透過 dbus 從終端註銷的通用方法

我是新手dbus,並且根據桌面環境看到了從終端註銷的不同方法。但我很好奇是否有任何方法可以使用訊息從任何桌面環境中註銷dbus

在 GNOME 上:

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

在 KDE 上:

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

是否有任何指令適用於每個桌面環境(例如使用 system dbus)?

答案1

systemd設定中,您應該能夠透過強制終止會話logind dbus介面:

busctl call org.freedesktop.login1 /org/freedesktop/login1 \
org.freedesktop.login1.Manager TerminateSession s \
$(loginctl show-user $UID --property=Sessions --value)

請注意,這是在v.busctl中引入的- 或者,在您可以運行的所有設定上:systemd221

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

會話ID在哪裡c2,您可以透過以下方式獲取

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

它會傳回類似這樣的內容:

   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"
      }
   ]

相關內容