通过udev规则触发的shell脚本打开lxterminal窗口

时间:2016-08-18 03:56:22

标签: linux shell terminal rule udev

我正在尝试通过 UDEV规则通过shell 脚本触发启动一个python脚本 等待用户输入 即可。输入到达后,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的人的任何信息都会很棒!

2 个答案:

答案 0 :(得分:1)

问题#1;

lxterminal --command "python -i /path/to/python_script.py"

答案 1 :(得分:0)

我在这里找到了我需要的信息:Scripts launched from udev do not have DISPLAY access anymore?

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