2

起動プロセスに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を起動するにはどうすればよいですか?ありがとう -

4

1 に答える 1

1

上記の入力に感謝します。実際には、作業ディレクトリやタイミングの問題ではありませんでした。問題は、QtGUIがタッチスクリーンとの通信に必要な適切な環境変数を取得していないことでした。/ 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
于 2012-11-21T13:51:16.000 に答える