我有一个非常奇怪的问题,基本上我想从我的xpdf
脚本启动Python
(或Libreoffice),该脚本由systemd-service启动。当我从终端启动脚本时,一切正常,但是当我插入启动服务的USB设备时,我会在系统日志中看到以下错误消息:
sh[2321]: Error: Can't open Display
此错误与X11有关,这就是我的Google搜索告诉我的。
因此,我的问题是:如何从Python正确运行
xpdf
或libreoffice之类的程序? import subprocess
subprocess.call("/usr/bin/xpdf")
基本上就是这样。我知道它与图形环境有关,但是我不知道该如何解决。
最佳答案
X显示系统具有非常好的安全性,可以阻止随机的本地进程仅将内容显示到本地屏幕上(在过去昂贵的Sun和SGI系统中,这是一个问题,计算机实验室通常会让用户通过telnet到其他设备。很有趣!)。
如果运行xpdf的用户与登录X会话的用户相同,则只需告诉xpdf将其UI连接到哪里即可。通常通过将DISPLAY=:0
导出到环境中来完成,这意味着“连接到第一个本地屏幕”。大多数X程序还支持-display :0
参数。
这样:
/usr/bin/xpdf -display :0
要么:
DISPLAY=:0 /usr/bin/xpdf
您不可能有多个X会话,因此
:0
可以在99%的时间内工作。