C'est possible, bien qu'un peu délicat. La documentation de GnomeScreensaver indique :
Existe-t-il un moyen d'effectuer des actions lorsque l'économiseur d'écran s'active ou se désactive ? Ou lorsque la session devient inactive ?
Une façon consiste à surveiller les signaux D-Bus de gnome-screensaver. Voici un exemple de la façon d'effectuer des actions lorsque la session devient inactive ou n'est plus inactive en utilisant le langage 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";
}
}
Bien que lorsque j'ai examiné en utilisant dbus-monitor
et a procédé au verrouillage/déverrouillage de l'écran le signal émis était
path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=ActiveChanged
boolean true
lorsque l'écran était verrouillé et
path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=ActiveChanged
boolean false
Une fois déverrouillé.
Donc, en modifiant le script ci-dessus,
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');
}
}
devrait le faire.
S'appuyant sur le script shell bash, Michael a écrit :
#!/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
Le faire en bash pour partager le même script externe :
#!/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