화면이 잠금 해제될 때마다 Ubuntu가 자동으로 프로그램을 실행하도록 하려면 어떻게 해야 합니까?

화면이 잠금 해제될 때마다 Ubuntu가 자동으로 프로그램을 실행하도록 하려면 어떻게 해야 합니까?

화면이 잠금 해제될 때마다 자동으로 호출되기를 원하는 스크립트가 있습니다. 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

관련 정보