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

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

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

答え1

少し難しいですが、可能です。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');
    } 
}

それをすべきです。

答え2

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

関連情報