如何调用监控屏幕锁定/解锁时间的“dbus”代码?

如何调用监控屏幕锁定/解锁时间的“dbus”代码?

我有一个代码片段来自(unix.stackexchange.com - 在屏幕锁定/解锁时运行脚本) 我计划修改它,因为 PulseAudio 的“未记录的功能”会在屏幕锁定时将声音从电视切换到笔记本电脑。

代码非常简单:

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
)

我不能说我真正理解程序/子程序自上而下的流程或循环,但这里的某个人评论说它有效,我相信他的判断。

问题是我的脚本的命名约定是什么?将脚本放在哪个行业标准目录?我如何调用它?即启动应用程序、rc.local、cron @reboot 等。调用后,我相信它会运行到下次重启。

即使它只在每个星期三的洗衣晚上使用,它也会永远运行,因此理想情况下它不应该占用太多的 CPU 周期。

答案1

剧本

正如评论中提到的那样,发布了一个略微改进的版本这里(在@Serg 和@muru 的帮助下):

dbus-monitor --session "type='signal',interface='com.ubuntu.Upstart0_6'" | \
(
  while read X; do
    if [[ "$X" =~ desktop-lock ]]; then
      SCREEN_LOCKED;
    elif [[ "$X" =~ desktop-unlock ]]; then
      SCREEN_UNLOCKED;
    fi
  done
)

存放在哪儿?

你可以将它存储在你的$HOME目录中的任何你喜欢的地方,如果它只供你的用户使用,或者在/usr/本地/bin如果您希望其他用户也可以使用它。

什么时候跑?

dbus-monitor 在本地运行。因此,我只需将脚本添加到启动应用程序:Dash > 启动应用程序 > 添加。添加运行脚本的命令,最好使其可执行,然后只需添加命令:

/path/to/script

有可能,由于脚本涉及 GUI,因此您需要等到 UI 完全加载。在这种情况下,请使用:

/bin/bash -c "sleep 10 && /path/to/script"

笔记

脚本所做的只是等待状态改变,监听系统上进程之间的通信。它不会添加任何会给您的系统带来明显的负担。

答案2

这对我在 Ubuntu 18.04 和 Unity 上有用

#!/bin/bash
dbus-monitor --session "type='signal',interface='com.canonical.Unity.Session'" | \
(
    # optional: prevent consecutive unlocks/locks
  locked=0
  while true; do
    read X
        echo "$X"
        if echo "$X" | grep "member=Locked" &> /dev/null; then
      if [ $locked -eq 0 ]; then
        echo "Screen locked"
        locked=1
      fi
    elif echo "$X" | grep "member=Unlocked" &> /dev/null; then
      if [ $locked -eq 1 ]; then
        echo "Screen unlocked"
        locked=0
      fi
    fi
  done
)

当使用 Gnome 时,第二行应该替换为

dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" | \

并将grep后面引号之间的内容分别替换为“boolean true”和“boolean false”。

将此脚本添加到启动应用程序中,它将在您第一次登录时开始工作。

相关内容