如何在恢复后和解锁屏幕后运行脚本

Modified on: Thu, 14 Jun 2018 08:14:23 +0800

在Ubuntu 12.04 LTS中,我希望在从暂停状态恢复后以及解锁桌面后运行脚本。这些需要以我的用户身份运行,并且可以访问我的$DISPLAY

特别是,我想

  • 重新启动nm-applet以解决bug 985028
  • 使用notify-send
  • 显示自定义通知
  • 当我得到这些工作时可能还有其他的东西

当我恢复时,运行/etc/pm/sleep.d/中的脚本,但它们以root身份运行,不知道我的屏幕和用户名。如果我在这些脚本中硬编码我的用户名和export默认DISPLAY :0,它可能会有效,但这感觉就像一个非常难看的黑客。

~/.config/autostart/xyz.desktop中的脚本在登录后运行,但仅在恢复后解锁屏幕后才会运行。

恢复后解锁屏幕后有没有办法运行脚本?

作者:Zanna,mivk

最佳答案

一个解决方案是在登录桌面时运行并捕获dbus消息的脚本。从暂停恢复后,屏幕被锁定,输入密码后,dbus上有一个解锁事件。

(感谢Kim SJ让我走上正轨。我没有ScreenSaver信号,但找到了另一个可以使用的界面。)

~/.config/autostart/中,我有一个启动bash脚本的.desktop文件:

$ cat ~/.config/autostart/mymonitor.desktop
[Desktop Entry]
Categories=System;Monitor;
Comment=Monitor dbus for unlock signals
Exec=/usr/local/bin/unlock_monitor
Name=unlock_monitor
Type=Application

unlock_monitor监视器脚本从com.canonical.Unity.Session读取dbus消息,并对Unlocked信号执行操作:

#!/bin/bash

dbus-monitor --session "type=signal,interface=com.canonical.Unity.Session" --profile \
| while read dbusmsg; do
    if [[ "$dbusmsg" =~ Unlocked$ || "$dbusmsg" =~ NameAcquired$ ]] ; then
        sleep 5
        notify-send "$(basename $0)" "Unlocked or freshly logged in..."
        # ...
    fi
done

登录时,没有“未锁定”信号,但dbus-monitor启动时会出现“NameAcquired”信号。

作者:,mivk

相关问答

添加新评论