web-dev-qa-db-ja.com

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

すべてのデスクトップ環境で機能するコマンド(システムdbusの使用など)はありますか?

5
user173408

systemdセットアップでは、 loginddbusインターフェイスを介してセッションを強制的に終了できるはずです:

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

どこ c2はセッションID文字列です。実行できるセッションIDを取得するには

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

2 sessions listed

または、dbusインターフェイスを介して実行する場合:

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