別のセッションでスクリーンセーバーが有効になっていることを確認する方法

別のセッションでスクリーンセーバーが有効になっていることを確認する方法

次の方法で、ユーザーのスクリーンセーバーが有効になっていることを確認できます。

gnome-screensaver-command -q

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

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

なぜこれが起こるのですか?他のユーザー(ルートなど)のユーザー画面の状態を確認するには?

答え1

少し遅れていることは分かりますが、今は他の人が答えを読むことができます。

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

まず、ユーザーのuidを知る必要があります。私もDISPLAYユーザーのものをエクスポートしました。コマンドを使用して値を取得できます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

関連情報