如何讓 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

Michael 在 bash shell 腳本的基礎上寫道:

#!/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

相關內容