连接/断开电源时使用 udev 激活脚本

Haw*_*uro 5 linux udev

当我连接/断开电源时,我试图让 udev 运行几个小脚本。我在 /etc/udev/rules.d/50-caff.rules 中有以下代码:

SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_STATUS}=="Charging", RUN+="/home/haukur/rules/off.sh"
SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_STATUS}=="Discharging", RUN+="/home/haukur/rules/on.sh"
Run Code Online (Sandbox Code Playgroud)

这是on.sh:

#!/bin/sh
caffeine -a
Run Code Online (Sandbox Code Playgroud)

和off.sh:

#!/bin/sh
caffeine -d
Run Code Online (Sandbox Code Playgroud)

不管怎样,我写了这些,写进udevadm control --reload-rules了 bash ……什么也没发生。当我插上或拔下电源时,咖啡因似乎根本没有激活。

根据/var/log/syslog(Ubuntu 的替代品/var/log/messages),udev 在我拔下插头时会识别:

Feb 26 08:44:52 (none) udevd[3838]: starting '/home/haukur/rules/off.sh'
Run Code Online (Sandbox Code Playgroud)

但是当它尝试运行 off.sh(它本身尝试运行咖啡因)时,它返回此错误:

udevd[2719]: '/home/haukur/rules/off.sh'(err) '** (caffeine:3840): WARNING **: Command line `dbus-launch --autolaunch=62907743a139af9b3c86412e00000026 --binary-syntax --close-stderr' exited with non-zero exit status 1: Autolaunch error: X11 initialization failed.\n'
Run Code Online (Sandbox Code Playgroud)

你知道有什么方法可以解决这个问题吗?使用 xmonad WM 运行 Ubuntu 12.04 LTS。

Raú*_*udo 1

如果应用程序“caffeine”需要访问您的桌面,您可能需要在调用该程序之前导出 DISPLAY:

export DISPLAY=:0 
Run Code Online (Sandbox Code Playgroud)

您可以简单地将其添加到命令调用之前:

DISPLAY=:0 caffeine -a
Run Code Online (Sandbox Code Playgroud)