如何在 ubuntu 17.10 中在屏幕锁定/解锁时运行脚本

edd*_*tro 5 gnome scripts lock-screen screensaver

我的问题与这个问题相同,但我无法在 ubuntu 17.10 中使用它:

如何在屏幕锁定/解锁时运行命令或脚本?

我想运行一个脚本,在屏幕锁定时更改我的键盘 RGB 配置。脚本运行完美。问题是获取锁定/解锁的事件。我已尝试使用 dbus-monitor ,如该问题所述和此处所述:

https://people.gnome.org/~mccann/gnome-screensaver/docs/gnome-screensaver.html

所以运行这个脚本:

#!/bin/bash

dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" | \
( while true
    do read X
    if echo $X | grep "boolean true" &> /dev/null; then
        echo "locking at $(date)" >> $HOME/time_xprofile
    elif echo $X | grep "boolean false" &> /dev/null; then
        echo "unlocking at $(date)" >> $HOME/time_xprofile
    fi
    done )
Run Code Online (Sandbox Code Playgroud)

但它只能工作......几次(!)......我无法理解会发生什么。

我在 X-server 上使用 ubuntu 17.10 和 ubuntu 的 gnome(没有 Wayland),并尝试过 vanilla gnome 并遇到同样的问题。

我也试过:

dbus-monitor > out.log
Run Code Online (Sandbox Code Playgroud)

要查看锁定/解锁时出现的所有痕迹,但没有出现该信号......只有......好吧......很少......

我不知道该怎么做,任何建议都会有所帮助。

Mat*_*hew 9

假设您正在使用 Gnome,那么现在我认为最好听一下LockedHint屏幕保护程序消息而不是屏幕保护程序消息。这样您就不会受到屏幕保护程序实现的束缚。

这是一个简单的脚本来执行此操作:

gdbus monitor -y -d org.freedesktop.login1 | grep LockedHint
Run Code Online (Sandbox Code Playgroud)

给出这个:

/org/freedesktop/login1/session/_32: org.freedesktop.DBus.Properties.PropertiesChanged ('org.freedesktop.login1.Session', {'LockedHint': <true>}, @as [])
/org/freedesktop/login1/session/_32: org.freedesktop.DBus.Properties.PropertiesChanged ('org.freedesktop.login1.Session', {'LockedHint': <false>}, @as [])
Run Code Online (Sandbox Code Playgroud)