我有一个非常奇怪的问题,基本上我想从我的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%的时间内工作。

08-24 20:47