我有一个使用systemd启动进程的嵌入式Linux主板。我还有一个用Qt编写的GUI,我可以从命令行启动,并使用主板的触摸屏或按钮进行交互。要启动应用程序,我通常做:使用systemd自动启动的Qt 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):
196 root 26868 S /home/user/gui
的systemctl状态输出看起来OK我,看到最后一行 'ARM生成' 是我的代码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启动我的Qt GUI,就像我从命令行执行一样?谢谢 -
2012-11-20
PhilBot
+0
也许这可能涉及到不同的工作目录。您应该检查是否使用与systemd相同的工作目录,您的应用程序仍然具有良好的行为,可以通过命令行启动。 –
+0
问题可能是因为您在登录时启动它,但尚未正确设置所有内容。我曾经遇到过一个问题,Qt在登录时自动启动时没有在KDE中创建一个托盘图标,因为它在系统托盘可用之前启动。你能安排程序在登录后10-20秒开始吗? –