miv*_*ivk 14 unlock suspend lock-screen autostart 12.04
在 Ubuntu 12.04 LTS 中,我想在从挂起状态恢复和解锁桌面后运行脚本。这些需要以我的用户身份运行,并且可以访问我的$DISPLAY.
特别是,我想
nm-applet以解决错误 985028notify-send当我恢复时,脚本/etc/pm/sleep.d/运行,但它们以 root 身份运行,不知道我的屏幕和用户名。如果我在这些脚本中硬编码我的用户名和export默认值DISPLAY :0,它可能会起作用,但这感觉就像一个非常丑陋的黑客。
脚本在~/.config/autostart/xyz.desktop登录后运行,但在恢复后仅解锁屏幕后它们不会运行。
有没有办法在恢复后解锁屏幕后运行脚本?
小智 9
看起来您无论如何都必须在上一个答案中对用户名进行硬编码,所以如果有人正在寻找快速修复,这里是 /etc/pm/sleep.d 中的一个简单脚本:
#!/bin/bash
case "$1" in
hibernate|suspend)
sudo -u USERNAME env DISPLAY=:0 zenity --info --text "do stuff on suspend"
;;
thaw|resume)
sudo -u USERNAME env DISPLAY=:0 zenity --info --text "do stuff on resume"
;;
esac
Run Code Online (Sandbox Code Playgroud)
小智 6
Unix & Linux 站点上的这个问题记录了使用 dbus 消息的替代方法:
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" | \
( while true; do
read X;
if echo $X | grep "boolean true" &> /dev/null; then
SCREEN_LOCKED;
elif echo $X | grep "boolean false" &> /dev/null; then
SCREEN_UNLOCKED;
fi
done )
Run Code Online (Sandbox Code Playgroud)
(将 SCREEN_LOCKED 和 SCREEN_UNLOCKED 替换为您要执行的操作。)
使用xrandr 1>/dev/null 2>1作为解锁操作修复了我的问题,即在屏幕解锁时显示器分辨率/位置没有被正确恢复(xrandr 似乎导致重新读取屏幕设置)。我在我的 .bash_profile 中添加了这一行作为后台任务(严格来说,它可能更适合作为 ~/.config/autostart 中的桌面文件,因为它只在您启动 gnome 时运行):
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" | \
( while true; do
read X;
if echo $X | grep "boolean false" &> /dev/null; then
xrandr 1>/dev/null 2>1;
fi
done ) &
Run Code Online (Sandbox Code Playgroud)
有关 gnome-screensaver API 的更多背景信息,请访问此站点和此处的 dbus 监视器。
一种解决方案是在登录桌面时运行脚本并捕获 dbus 消息。从挂起恢复后屏幕被锁定,输入密码后,dbus 上有解锁事件。
(感谢 Kim SJ 让我走上正轨。我没有 ScreenSaver 信号,但找到了另一个可以使用的界面)。
在 中~/.config/autostart/,我有一个 .desktop 文件,它启动 bash 脚本:
$ 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
Run Code Online (Sandbox Code Playgroud)
监视器unlock_monitor脚本从信号中读取 dbus 消息com.canonical.Unity.Session并对Unlocked信号执行操作:
$ 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
Run Code Online (Sandbox Code Playgroud)
登录时没有“Unlocked”信号,但dbus-monitor启动时有“NameAcquired”信号。
| 归档时间: |
|
| 查看次数: |
9428 次 |
| 最近记录: |