我正在尝试启动一个python脚本, 等待用户输入通过一个shell 脚本触发由UDEV规则。输入到达后,python脚本需要进行一些数据库调用。我遇到了几个不同的问题。
udev规则如下:
SUBSYSTEM=="usb" RUN+="/path/to/script.sh"
问题#1 -我似乎无法让它真正打开窗户。以下是我在script.sh中的内容:
#!/bin/bash
lxterminal -e /path/to/python_script.py
下面是我从udev得到的错误:
'/path/to/script.sh'(err) '(lxterminal:4606): Gtk-WARNING **: cannot open display: '
这是另一个版本的shell脚本,它实际运行,但不可见,并在检查输入时崩溃。我猜是因为如果我让终点站打开,我就需要重新路由stdin ?脚本:
export DISPLAY=0:; bash -c /path/to/script.sh
错误:(err) name = input('Enter your name')
(err) 'EOFError: EOF when reading a line'
如果我去掉输入,我得到这个错误:
[4859] exit with return code 0
这个答案听起来好像这是不可能的,但这是编程,任何事情都应该是可能的!https://unix.stackexchange.com/questions/119078/cannot-run-script-using-udev-rules
这个论坛的结束听起来是可能的,但我需要使用Zenity?https://ubuntuforums.org/showthread.php?t=759389
任何来自更熟悉udev的人的信息将是伟大的!
第一期;
lxterminal --command "python -i /path/to/python_script.py"
我在这里找到了我需要的信息:从udev启动的脚本不再具有DISPLAY访问权限?
udev调用的脚本:
export DISPLAY=:0.0; export XAUTHORITY='/var/run/lightdm/root/:0'; /path/to/python.py
然后在python.py脚本中:
cmd = ["zenity", "--entry", "--title='title'", "--text='{}'".format(var)]
response = (subprocess.check_output(cmd)).decode("utf-8") # Decode to a string