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

Win*_*nix 5 scripts lock-screen dbus 16.04

我有一个来自(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
)
Run Code Online (Sandbox Code Playgroud)

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

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

即使它只在每周三洗衣之夜使用,它也将永远运行,因此理想情况下它不应该占用太多 CPU 周期。

Jac*_*ijm 3

剧本

正如评论中提到的,这里发布了一个稍微改进的版本(在@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
)
Run Code Online (Sandbox Code Playgroud)

存放在哪里?

如果它仅供您的用户使用,您可以将其存储在$HOME目录中的任何位置;如果您希望它可供其他用户使用,则可以将其存储在/usr/local/bin中。

什么时候跑?

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

/path/to/script
Run Code Online (Sandbox Code Playgroud)

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

/bin/bash -c "sleep 10 && /path/to/script"
Run Code Online (Sandbox Code Playgroud)

笔记

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