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

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

如果 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

相关内容