
ユーザーのスクリーンセーバーがアクティブかどうかは、次の方法で検出できます。
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