从udev执行的notify-send not working(在脚本中)

时间:2015-07-14 13:26:47

标签: linux usb udev

我想在桌面上通知插入特定的USB设备。以下是udev规则。

KERNEL=="sd*",SUBSYSTEMS=="usb",ACTION=="add",RUN+="/home/username/Desktop/notify_script"

notify_script如下

#!/bin/sh  
su username -c 'notify-send "USB Inserted"'  
echo USB_inserted >> /home/username/Desktop/test_file 

问题:

如果从命令行以root身份执行上述脚本,则上述脚本可以正常工作,但如果从udev执行,则脚本中的notify-send无法正常工作。

问题:

如何从udev进行通知发送工作?要么 我还有其他方式可以获得通知吗? 是否可以从udev调用任何GUI?

谢谢。

1 个答案:

答案 0 :(得分:2)

主要问题是,默认情况下udev规则不会在任何xorg相关环境中运行,因此不知道要使用哪个DISPLAY。因此,如果你想将某些内容回传到像gnome-terminal这样的终端中,它总会失败。该脚本应在udev-rule-match上执行,必须在任何与ui相关的执行之前首先导出DISPLAY。 这是通过

完成的
export DISPLAY=:0

我认为,这也是问题所在,而notify-send只会碰壁。

我实际上也在玩udev规则,我设法让它工作,虽然我以root身份行事,类似于我的回答,这个已经在这里找到了:

https://unix.stackexchange.com/questions/80882/udev-running-a-shellscript-that-accesses-an-x-display

还在这里

Scripts launched from udev do not have DISPLAY access anymore?

您可能还需要检查zenity。对小型通知非常有用