我有一个嵌入式 Linux 板,它使用 systemd 进行启动过程。我还有一个用 Qt 编写的 GUI,我可以从命令行很好地启动它,并使用电路板的触摸屏或按钮进行交互。要启动应用程序,我通常会这样做:
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.
如果我在启动后通过 SSH 连接到主板并运行“ps”,我可以看到我的进程已启动(如果我杀死它,它会按预期从 systemd 重新启动):
196 root 26868 S /home/user/gui
systemctl status 的输出对我来说看起来不错,请注意最后一行 'ARM build' 是我的代码中的 qDebug() 打印语句:
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,就像我从命令行启动它一样?谢谢 -