如果 Gnome 会话被锁定和解锁,我想运行一个脚本。
有没有办法可以在桌面锁定或解锁时拦截此行为并执行某些操作?
答案1
当发生某些事情时,Gnome-screensaver 会在 dbus 上发出一些信号。
这里文档(带有一些示例)。
您可以编写一个运行的脚本:
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'"
dbus-monitor
这可以满足您随时打印一行有关屏幕被锁定/解锁的需要。
这里有一个 bash 命令来执行您需要的操作:
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" |
while read x; do
case "$x" in
*"boolean true"*) echo SCREEN_LOCKED;;
*"boolean false"*) echo SCREEN_UNLOCKED;;
esac
done
只需将echo SCREEN_LOCKED
和替换echo SCREEN_UNLOCKED
为您需要的即可。
答案2
LockedHint
现在我认为听屏幕保护消息比听屏幕保护消息更好。这样您就不会受到屏幕保护程序实现的束缚。
这是一个简单的脚本来执行此操作:
gdbus monitor -y -d org.freedesktop.login1 | grep LockedHint
给出这个:
/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 [])
答案3
在 ubuntu 14.04 中,用于屏幕锁定解锁的 DBus 事件已更改,用于绑定屏幕锁定和解锁事件的新脚本如下所示
dbus-monitor --session "type='signal',interface='com.ubuntu.Upstart0_6'" | \
(
while true; do
read X
if echo $X | grep "desktop-lock" &> /dev/null; then
SCREEN_LOCKED;
elif echo $X | grep "desktop-unlock" &> /dev/null; then
SCREEN_UNLOCKED;
fi
done
)
答案4
如果您使用 Kubuntu 或使用 KDE / Plasma 作为桌面环境,则必须侦听 Interface org.freedesktop.ScreenSaver
,因此侦听该事件的脚本如下所示:
dbus-monitor --session "type='signal',interface='org.freedesktop.ScreenSaver'" |
while read x; do
case "$x" in
*"boolean true"*) echo SCREEN_LOCKED;;
*"boolean false"*) echo SCREEN_UNLOCKED;;
esac
done