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

can not connect to Xserver while running python file using pyQT4 via ubuntu service

我正在尝试执行使用 PyQT4

的 python 文件

我在服务文件运行下面

[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

的错误

我正在使用脚本

#!/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()

通常,服务与能够 login/start X 环境的普通用户的环境不同。 因此我猜 DISPLAY 没有设置。 在您的服务文件中尝试此操作,但确保它会在 X 已经 运行...

之后启动
ExecStart = env -i DISPLAY=:0.0 /usr/bin/python3 /home/nvidia/main

示例 - 用户 root 尝试 运行 X 上的一些东西 - 有和没有 DISPLAY

#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 变量的 and/or 的 XTerm 中进行检查。

[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 服务成功执行了 GUI