【树莓派5错误集锦(1)】通过使用systemd配置opencv程序自启动出现qt.qpa.xcb:could not connect to display
通过使用systemd配置opencv程序自启动出现qt.qpa.xcb:could not connect to display qt.qpa.plugin: could not load the Qt platform plugin "xcb的错误

1.定位错误
一般的systemd配置文件如下:
[Unit] Description=My service After=network.target [Service] Restart=on-failure RestartSec=5 ExecStart=/usr/bin/python3 -u /home/pi/myled.py User=pi [Install] WantedBy=multi-user.target
但是对于opencv这种需要依赖PYQT插件显示CV2.IMSHOW少了一个参数:
Environment=DISPLAY=:0.0
2.解决错误
(1)配置设置
通过查阅DISPLAY在Linux的作用Linux DISPLAY 变量设置小草新浪博客发现
在2台Linux机器之间, 如果设置服务器端配置文件/etc/ssh/sshd_config中包含
X11Forwarding no
客户端配置文件/etc/ssh/ssh_config包含
ForwardX11 yes
则从客户端ssh到服务器端后会自动设置DISPLAY环境变量, 允许在服务器端执行的图形程序将图形显示在客户端上. 在服务器上查看环境变量显示如下(这个结果不同的时候并不相同)
所以修改
sudo nano /etc/ssh/sshd_config
中的‘X11Forwarding’变为no,ctrl+o保存 enter确定 crtl+x关闭即可修改成功

(2)查找环境变量
echo $DISPLAY
如果输出的为空,则表示该环境变量没有设置。我使用的是debian系统,默认的是没有设置该环境变量。
因此需要设置该环境变量,在终端上执行下面命令:
export DISPLAY=:0
如果成功返回

那么参数可变为
Environment=DISPLAY=:0
1.最后systemd配置文件变为
[Unit] Description=example service [Service] ExecStart=/bin/python3 /home/wcy/Project/test.py Environment=DISPLAY=:0 Restart=on-failure RestartSec=5 User=wcy type=idle [Install] WantedBy=multi-user.target
2.将该文件mystart.service复制到/etc/systemd/system目录下
sudo cp /home/wcy/Project/example.service /etc/systemd/system/mystart.service
3.使用systemctl管理服务
-
启动服务
sudo systemctl start mystart.service
此时可以看到led闪烁
-
添加或修改配置文件后,需要重新加载
sudo systemctl daemon-reload
-
设置开机自启动
sudo systemctl enable mystart.service
-
关闭开机自启动
sudo systemctl disable mystart.service
问题得到解决使用。
总结
实际问题是对Linux系统的DISPLAY参数的不理解。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)