我的目标是在USB闪存驱动器插入时运行Python脚本 . 我编写了一个udev规则和一个在该规则中调用的shell脚本 .
udev规则:/etc/udev/rules.d/10-usb.rules
KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="usb", RUN+="/home/Hypotheron/Desktop/script.sh"
script.sh:
#!/bin/sh
echo 'Hello, world.' > /home/Hypotheron/Desktop/foo.txt
#/home/Hypotheron/Desktop/job.py & exit
我的Python文件的第一行是:
#!/usr/bin/python
我还做了以下命令:
chmod +x job.py
chmod +x script.sh
在脚本.sh中,当写入foo.txt的行被取消注释时,每次闪存驱动器插入时都会创建foo.txt文件 .
当我评论该行并取消注释运行Python文件的行时,它不起作用 .
在两种情况下都可以通过终端运行script.sh,但是当插入闪存驱动器时,只有foo.txt案例有效 .
任何帮助,将不胜感激 .
1 回答
从udev手册页,请特别注意最后2段 .
我的猜测是,你发现了无条件的杀戮部分
编辑1年后:
在有人投票之后我重新审视了这个问题,我已经解决了问题,即
root
(谁正在运行此流程)没有X终端条目对某些事情如notify-send
或启动Gui程序必不可少而且仍然存在如前所述,在事件发生后杀死进程 .当插入USB设备时,以下内容向终端发送通知并启动wxPython Gui程序 .
剧本:
通过定义DISPLAY,我们可以解决root的无X条目输入问题
通过将我们希望运行的命令传递给
at
程序以及现在运行它的指令,我们避免了udev杀死进程 ./lib/udev/rules.d/10-usbinsert.rules文件:
我希望这有助于或让你朝着正确的方向前进 .