RPI 3b+、Debian ストレッチ
systemdでQtアプリケーションを起動したいです。アプリケーションはXを使用し、ディスプレイを開く必要があります。
MIT_MAGIC-COOKIE が無効なため、常に失敗します。しかし、systemdは(失敗した場合)再起動し、正常に動作します。 (「APESディスプレイアプリケーションを起動するのは私のQtアプリケーションです - 私のgrepは「Light Display Manager」と同じ問題を発見しました - 最初は失敗しましたが、再起動後に成功しました)
pi@right-display:~ $cat /var/log/syslog | pi@right-display:~ $cat /var/log/syslog |
11月16日 10:43:26 右ディスプレイ systemd[1]: ストップライトディスプレイマネージャ...
11月16日 10:43:40 右ディスプレイ systemd[1]: APES ディスプレイアプリケーションの起動を開始しました。
11月16日 10:43:40 右ディスプレイ systemd[1]: 照明ディスプレイマネージャを起動します。
11月16日 10:43:41 右モニター x11vnc[653]: 16/11/2023 10:43:41 *** XOpenDisplay が失敗しました。ディスプレイやディスプレイはありません。
11月16日 10:43:41 右ディスプレイ systemd[1]: Light Display Manager を起動します。
11月16日 10:43:42 右側の表示 APES_Display[572]: QStandardPaths: XDG_RUNTIME_DIR が設定されておらず、デフォルトは "/tmp/runtime-pi" です。 11月16日 10:43:44 右表示 APES_Display[572]: Invalid MIT -MAGIC - COOKIE-1 keyqt.qpa.screen: QXcbConnection: ディスプレイに接続できません: 0 Nov 16 10:43:44 右表示 APES_Display[ 572]:Xディスプレイに接続できません。
11月16日 10:43:44 右表示 systemd[1]: Display.service: 基本プロセスが終了しました。コード = 終了、ステータス = 1/FAILURE
11月16日 10:43:44 右ディスプレイ systemd[1]: Display.service: デバイスが障害状態に入りました。
11月16日 10:43:44 右側のディスプレイ systemd[1]: Display.service: "終了コード"のため失敗しました。
Nov 16 10:43:45 右モニター x11vnc[653]: 16/11/2023 10:43:45 *** XOpenDisplay ":0" が成功しました。
11月16日 10:44:02 右表示 systemd[1]: Display.service: サービス遅延時間が切れて再起動される予定です。
Nov 16 10:44:02 右ディスプレイ systemd[1]: APES ディスプレイアプリケーションの起動が停止しました。
Nov 16 10:44:02 右ディスプレイ systemd[1]: APES ディスプレイアプリケーションの起動を開始しました。
11月16日 10:44:02 右側の表示 APES_Display[1307]: QStandardPaths: XDG_RUNTIME_DIR が設定されておらず、デフォルトは「/tmp/runtime-pi」です。
それでは、アプリがディスプレイをオンにする前に実行する必要があるサービスがありますか?または、起動時にのみ必要なように見える「魔法クッキー」を作成する必要があります(サービスを手動で起動すると常に機能します)
それが何であるかをどうやって知ることができますか?
答え1
最善のアプローチは、動作可能と思われるまで数秒待機し、サービスがそのタイマーに依存するようにするシステムタイマーを作成することです。OnBootSec=
使用する必要があるタイマーオプション。私たちが見ることができるように、最初の障害はLDMの開始とLDMの開始の間に発生します。