画面がロック解除されるたびにUbuntuにプログラムを自動的に実行させるにはどうすればよいですか?


5

画面がロック解除されるたびに自動的に起動したいスクリプトがあります。Ubuntuはこれをしたいユーザーに何らかのサポートを提供しますか?


私は何も知りません。お気に入りのスクリーンセーバーアプリケーションをハッキング/パッチする必要があると思います。
ゾレダチェ

回答:


8

少し注意が必要ですが、可能です。GnomeScreensaverドキュメントの状態:

スクリーンセーバーがアクティブまたは非アクティブになったときにアクションを実行する方法はありますか?または、セッションがアイドル状態になると?

1つの方法は、gnome-screensaverからのD-Bus信号を監視することです。次に、Perl言語を使用して、セッションがアイドル状態になったとき、またはアイドル状態でなくなったときにアクションを実行する方法の例を示します。

my $cmd = "dbus-monitor --session \"type='signal',interface='org.gnome.ScreenSaver',member='SessionIdleChanged'\"";

open (IN, "$cmd |");

while (<IN>) {
    if (m/^\s+boolean true/) {
        print "*** Session is idle ***\n";
    } elsif (m/^\s+boolean false/) {
        print "*** Session is no longer idle ***\n";
    }
}

私が使用dbus-monitorして調べて画面のロック/ロック解除に進んだとき、放出された信号は

path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=ActiveChanged
boolean true

画面がロックされたとき

path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=ActiveChanged
boolean false

ロック解除されたとき。

上記のスクリプトを変更して、

my $cmd = "dbus-monitor --session \"type='signal',interface='org.gnome.ScreenSaver',member='ActiveChanged'\"";

open (IN, "$cmd |");

while (<IN>) {
    if (m/^\s+boolean false/) {
        exec('/path/to/your/script');
    } 
}

それを行う必要があります。


4

Michaelはbashシェルスクリプトに基づいて次のように書きました。

#!/usr/bin/env bash
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver',member='ActiveChanged'" | while read line ; do 
    if [ x"$(echo "$line" | grep 'boolean true')" != x ] ; then 
        # runs once when screensaver comes on...
    fi
    if [ x"$(echo "$line" | grep 'boolean false')" != x ] ; then 
        # runs once when screensaver goes off...
    fi
done

3

同じ外部スクリプトを共有するためにbashでそれを行う:

#!/usr/bin/env bash
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver',member='ActiveChanged'" | while read line ; do 
        if [ x"$(echo "$line" | grep 'boolean false')" != x ] ; then 
               # do whatever you want here
        fi
done
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.