Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Xlib.error.DisplayConnectionError在使用systemd启动操作系统时运行python程序_Python 3.x_Systemd - Fatal编程技术网

Python 3.x Xlib.error.DisplayConnectionError在使用systemd启动操作系统时运行python程序

Python 3.x Xlib.error.DisplayConnectionError在使用systemd启动操作系统时运行python程序,python-3.x,systemd,Python 3.x,Systemd,基本背景资料: 我试图在操作系统启动时运行我的程序(我当前的操作系统是Debian9) 最新稳定版本) 我的项目是听键盘使用Xlib库,我也 使用Tkinter弹出一些UI窗口 这是/etc/system/system/my_project.service 重新启动后,我运行: sudo systemctl status my_project.service 我得到以下错误 May 08 11:49:43 debian keyboard_listener.py[303]:文件 “/usr/

基本背景资料:

我试图在操作系统启动时运行我的程序(我当前的操作系统是Debian9) 最新稳定版本) 我的项目是听键盘使用Xlib库,我也 使用Tkinter弹出一些UI窗口

  • 这是/etc/system/system/my_project.service

    • 重新启动后,我运行:
      sudo systemctl status my_project.service
      我得到以下错误
    May 08 11:49:43 debian keyboard_listener.py[303]:文件 “/usr/local/lib/python3.5/dist-packages/Xlib/protocol/display.py”, 第90行,在init

    May 08 11:49:43 debian keyboard_listener.py[303]:self.socket= connect.get_套接字(名称、协议、主机、显示号)

    May 08 11:49:43 debian keyboard_listener.py[303]:文件 “/usr/local/lib/python3.5/dist-packages/Xlib/support/connect.py”,第行 87,在get_插座中

    5月8日11:49:43 debian键盘_listener.py[303]:返回 mod.get_套接字(dname、协议、主机、dno)

    May 08 11:49:43 debian keyboard_listener.py[303]:文件 “/usr/local/lib/python3.5/dist-packages/Xlib/support/unix_-connect.py”, 第113行,在get_插座中

    May 08 11:49:43 debian键盘_listener.py[303]:raise 错误。DisplayConnectionError(dname,str(val))

    May 08 11:49:43 debian keyboard_listener.py[303]: Xlib.error.DisplayConnectionError:无法连接到显示器“:0”: [Errno 111]连接被拒绝

    May 08 11:49:43 debian systemd[1]:my_project.service:Main 进程已退出,代码=已退出,状态=1/失败

    May 08 11:49:43 debian systemd[1]:my_project.service:Unit 进入失败状态

    May 08 11:49:43 debian systemd[1]:my_project.service:失败 结果为“退出代码”

    我如何解决这个问题(错误111)?我应该在我的项目服务中添加一些内容吗 我如何使我的项目在启动时运行?

    tl;dr:
    systemd
    无法工作 在没有明确的排序依赖项的情况下,
    systemd
    同时处理事务中的所有单元。这意味着,在启动
    服务之前,它不会也不会等待X服务器在显示器上显示:0

    在现代GNU/Linux发行版中,X服务器不是由任何systemd单元直接启动的,因此不能在X服务器上指定systemd排序依赖项。因此,
    systemd
    不适用于您试图完成的任何任务,至少在systemd中实现更细粒度的依赖机制之前是如此

    建议的解决办法 作为一种解决方法,您可以尝试
    /etc/xdg/autostart
    ~/.config/autostart
    ~/.xinitrc
    (适用于您的X.org设置的内容)。这些脚本保证在图形用户会话中运行


    如果需要状态监控,您可以将这两种方法结合起来,使用其中一个脚本或从其中一个脚本内部启动一个瞬态systemd单元。

    那么,从您的角度来看,什么适合在操作系统启动时运行应用程序(取决于Xlib)?@Guy expanded answer
    [Unit]
    Description=Daemon tool that opens the required environment given a 
    certain shortcut key
    
    [Service]
    Environment="DISPLAY=:0"
    ExecStart=/usr/local/bin/keyboard_listener.py
    
    [Install]
    WantedBy=multi-user.target