起動プロセスにsystemdを使用する組み込みLinuxボードがあります。また、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ログに、dropbearSSHサービスの直後に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()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を起動するにはどうすればよいですか?ありがとう -