我有这个非常奇怪的问题,基本上我想从我的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")
基本上就是这样。我知道它与图形环境有关,但我不知道如何解决它。
答案 0 :(得分:1)
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%的时间内正常工作。
答案 1 :(得分:0)
由于问题是xpdf
没有找到要连接的显示器,我们有两个基本选项:使用现有显示器查找和验证,或者创建一个新显示器。后者通常更容易,例如:
xinit /usr/bin/xpdf -fullscreen $PDFFILE -- :2
这会启动一个新的X显示:2只运行xpdf,甚至不是窗口管理器。
答案 2 :(得分:-2)
在尝试疯狂约2周后,它终于奏效了。 有用的是
os.system("DISPLAY=:0 /usr/bin/xpdf)
我知道subprocess.call是调用程序的更好方法,但它现在似乎不起作用。 我将尝试Yann后来提出的方式,但是现在我只是感到高兴,它只是有效。
谢谢大家的帮助,我真的很感激!