每次解锁屏幕时,如何让 Ubuntu 自动运行程序?

Cor*_*ote 5 linux shell-script ubuntu

我有一个脚本,我想在每次屏幕解锁时自动调用。Ubuntu 是否为希望这样做的用户提供一些支持?

Sat*_*hat 8

这是可能的,虽然有点棘手。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";
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然当我检查使用dbus-monitor并继续锁定/解锁屏幕时,发出的信号是

path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=ActiveChanged
boolean true
Run Code Online (Sandbox Code Playgroud)

当屏幕被锁定时

path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=ActiveChanged
boolean false
Run Code Online (Sandbox Code Playgroud)

解锁时。

所以改变上面的脚本,

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');
    } 
}
Run Code Online (Sandbox Code Playgroud)

应该这样做。