別のセッションでスクリーンセーバーがアクティブかどうかを確認する方法

別のセッションでスクリーンセーバーがアクティブかどうかを確認する方法

ユーザーのスクリーンセーバーがアクティブかどうかは、次の方法で検出できます。

gnome-screensaver-command -q

ユーザーが非アクティブなときにアクションを実行するデーモンを作成しようとしていますが、このコマンドはユーザーのセッション内から実行されていない場合は常に false を返します。たとえば、次のバリアントはすべて、スクリーンセーバーがアクティブな場合でも非アクティブであると報告します。

sudo gnome-screensaver-command -q
sudo -u myuser gnome-screensaver-command -q

これはなぜでしょうか。また、root などの別のユーザーからユーザーの画面のステータスを確認するにはどうすればよいでしょうか。

答え1

少し遅いとは思いますが、他の人も今なら答えを読めるかもしれません。

問題は dbus にあります。 を実行する前に適切な変数をエクスポートする必要がありますgnome-screensaver-command

まず、ユーザーのuidを知る必要があります。DISPLAYユーザーのuidもエクスポートしました。その値は次のコマンドで取得できます。w

sudo -u myuser DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$UID_OF_MYUSER/bus DISPLAY=:0 gnome-screensaver-command --query

これはDebian 9で動作し、gnome-screensaver-command 3.6.1

関連情報