화면이 잠금 해제될 때마다 자동으로 호출되기를 원하는 스크립트가 있습니다. Ubuntu는 이를 원하는 사용자를 위해 일부 지원을 제공합니까?
답변1
조금 까다롭기는 하지만 가능합니다.GnomeScreensaver 문서상태:
화면 보호기가 활성화되거나 비활성화될 때 작업을 수행하는 방법이 있습니까? 아니면 세션이 유휴 상태가 되면?
한 가지 방법은 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
Bash 쉘 스크립트를 기반으로 Michael은 다음과 같이 썼습니다.
#!/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