使用systemd自动启动的Qt GUI实例不响应输入
我有一个嵌入式Linux板,它使用systemd进行启动过程。我还有一个用Qt编写的GUI,我可以从命令行很好地启动它,并使用板上的触摸屏或按钮进行交互。要启动应用程序,我通常会执行以下操作:使用systemd自动启动的Qt GUI实例不响应输入,qt,embedded-linux,init,systemd,Qt,Embedded Linux,Init,Systemd,我有一个嵌入式Linux板,它使用systemd进行启动过程。我还有一个用Qt编写的GUI,我可以从命令行很好地启动它,并使用板上的触摸屏或按钮进行交互。要启动应用程序,我通常会执行以下操作: ssh root@192.168.1.2 cd ~/ ./gui 我希望使用SystemD自动启动,因此我编写了一个如下所示的服务文件: [Unit] Description=The Qt Gui After=dropbear.service systemd-logind.service Conditi
ssh root@192.168.1.2
cd ~/
./gui
我希望使用SystemD自动启动,因此我编写了一个如下所示的服务文件:
[Unit]
Description=The Qt Gui
After=dropbear.service systemd-logind.service
ConditionFileIsExecutable=/home/user/gui
[Service]
ExecStart=/home/user/gui
Restart=on-abort
[Install]
WantedBy=multi-user.target
当主板启动时,我在systemd日志中看到它在dropbear SSH服务之后立即启动gui:
[ OK ] Started Dropbear SSH2 daemon.
Starting The Qt Gui...
[ OK ] Started The Qt Gui.
如果我在主板启动并运行“ps”后SSH到主板,我可以看到我的进程启动了(如果我杀死它,它会按照systemd的预期重新启动):
systemctl status的输出在我看来是正常的,请注意最后一行“ARM build”是我代码中的qDebug()print语句:
gui.service - The Qt Gui
Loaded: loaded (/etc/systemd/system/gui.service; enabled)
Active: active (running) since Tue, 2012-11-20 21:30:20 UTC; 4min 35s ago
Main PID: 196 (gui)
CGroup: name=systemd:/system/gui.service
└ 196 /home/user/gui
Nov 20 21:30:20 systemd[1]: Starting The Qt Gui...
Nov 20 21:30:20 systemd[1]: Started The Qt Gui.
Nov 20 21:30:22 gui[196]: ARM build
但是,我根本无法与使用systemd启动的GUI实例进行交互!如果我从命令行启动一个辅助实例,那么我可以按下按钮或触摸屏,屏幕上会弹出GUI并按预期工作。有什么好处?我在服务文件中尝试了“Type=forking”,但这也没有帮助。你知道这里出了什么问题吗?我如何让systemd像从命令行一样启动QtGUI?谢谢-谢谢您的上述意见。这实际上不是一个工作目录或时间问题。问题是我的Qt GUI没有获得与触摸屏通信所需的适当环境变量。为我工作的采购/etc/profile:
[Unit]
Description=The Qt Gui
After=dropbear.service
ConditionFileIsExecutable=/home/user/gui
[Service]
Type=simple
TimeoutStartSec=60
WorkingDirectory=/home/user
ExecStartPre=/bin/sh -c 'echo 127 > /sys/class/backlight/generic-bl/brightness'
ExecStart=/bin/sh -c 'source /etc/profile ; /home/user/gui -qws'
Restart=always
[Install]
WantedBy=multi-user.target
可能与不同的工作目录有关。您应该检查是否使用与systemd相同的工作目录,您的应用程序是否仍然通过命令行启动。问题可能是因为您是在登录时启动它的,而不是所有内容都已正确设置。我曾经遇到一个问题,Qt在登录时自动启动时没有在KDE中创建托盘图标,因为它是在系统托盘可用之前启动的。你能安排程序在登录后10-20秒启动吗?
[Unit]
Description=The Qt Gui
After=dropbear.service
ConditionFileIsExecutable=/home/user/gui
[Service]
Type=simple
TimeoutStartSec=60
WorkingDirectory=/home/user
ExecStartPre=/bin/sh -c 'echo 127 > /sys/class/backlight/generic-bl/brightness'
ExecStart=/bin/sh -c 'source /etc/profile ; /home/user/gui -qws'
Restart=always
[Install]
WantedBy=multi-user.target