通过 dbus 从终端注销的通用方法

use*_*408 6 linux d-bus systemd session

我是新来的dbus,并且看到了根据桌面环境从终端注销的不同方式。但我很好奇有没有办法使用dbus消息从任何桌面环境中注销?

在 GNOME 上:

dbus-send --session --type=method_call --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.Logout uint32:1
Run Code Online (Sandbox Code Playgroud)

在 KDE 上:

dbus-send --print-reply --dest=org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.logout int32:0 int32:0 int32:0
Run Code Online (Sandbox Code Playgroud)

是否有任何命令适用于每个桌面环境(例如使用 system dbus)?

don*_*sti 7

systemd设置时,您应该能够通过接口强制终止会话:logind dbus

dbus-send --system --print-reply --dest=org.freedesktop.login1 \
/org/freedesktop/login1 'org.freedesktop.login1.Manager.TerminateSession' \
string:c2
Run Code Online (Sandbox Code Playgroud)

c2会话 ID 字符串在哪里;获取您可以运行的会话 ID

登录
    SESSION       UID  USER           SEAT            
        c1        120  gdm            seat0           
        c2       1000  don            seat0           

2 sessions listed
Run Code Online (Sandbox Code Playgroud)

或者,如果您更喜欢通过dbus界面进行操作:

dbus-send --system --print-reply --dest=org.freedesktop.login1 \
/org/freedesktop/login1 'org.freedesktop.login1.Manager.ListSessions'
Run Code Online (Sandbox Code Playgroud)

返回类似的东西

   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"
      }
   ]
Run Code Online (Sandbox Code Playgroud)