首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法通过ubuntu服务使用pyQT4运行python文件时连接到Xserver

无法通过ubuntu服务使用pyQT4运行python文件时连接到Xserver
EN

Stack Overflow用户
提问于 2021-01-05 14:44:58
回答 2查看 509关注 0票数 0

我正在尝试执行使用PyQT4的python文件

我正在运行下面的服务文件

代码语言:javascript
复制
[Unit]
Description = Test
After=multi-user.target

[Service]
Type=simple
ExecStart = /usr/bin/python3 /home/nvidia/main
Restart=on-abort

[Install]
WantedBy =multi-user.target

此文件位于/lib/systemd/system/test.service下,我将通过systemctl start Test启动此服务

但启动此服务会导致标记为cannot connect to X Server, failed with result exit-code的错误

我正在使用脚本

代码语言:javascript
复制
#!/usr/bin/python

#################################################################################################################################################

# Author          = Rucha
# Version         = V 2.0.3
# Class           = PR01 OOP
# Module          = pyqt4
# Date            = Jan 02 2021

#################################################################################################################################################
import sys
from PyQt4 import QtGui

######################################################################################################################################

class MainWindow:

    def __init__(self):
        self.vbox = QtGui.QHBoxLayout()

    def Title(self,Window,Name):
        Window.setWindowTitle(Name)

    
    def window(self):

        app = QtGui.QApplication(sys.argv)
        w = QtGui.QWidget()

        w.setGeometry(800,800,500,500)

        self.Title(w,"Test")          
        
        w.show()
        sys.exit(app.exec_())
    
MainWindow1 = MainWindow()
MainWindow1.window()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-26 21:24:05

代码语言:javascript
复制
[Unit]
Description = Test
After=multi-user.target

[Service]
Type=simple
Environment="DISPLAY=:0"
Environment="XAUTHORITY=/home/nvidia/.Xauthority"
ExecStart = /usr/bin/python /home/nvidia/main
Restart=on-failure

[Install]
WantedBy =graphical.target

我使用上面的指令值通过systemd服务成功地执行了图形用户界面

票数 0
EN

Stack Overflow用户

发布于 2021-01-05 17:57:08

通常,服务的环境与能够登录/启动X环境的普通用户的环境不同。因此,我猜DISPLAY没有被设置。在您的服务文件中尝试此操作,但请确保它将在X运行后启动...

代码语言:javascript
复制
ExecStart = env -i DISPLAY=:0.0 /usr/bin/python3 /home/nvidia/main

示例-用户根用户尝试在X上运行一些东西-使用和不使用DISPLAY

代码语言:javascript
复制
#kcalc
qt.qpa.screen: QXcbConnection: Could not connect to display 
Could not connect to any X display.
#env -i DISPLAY=:0.0 kcalc
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'

您可以在带有和/或不带有DISPLAY变量的XTerm中检查这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65574289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档