回答:
少し注意が必要ですが、可能です。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');
}
}
それを行う必要があります。
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
同じ外部スクリプトを共有するために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