web-dev-qa-db-ja.com

ディスプレイを接続せずに起動時にQt GUIアプリケーションを起動するにはどうすればよいですか?

システムを起動するたびにQt GUIアプリを実行し、永久に実行する必要があります。そのためのシステムサービスを作成しました。

サービスファイルの内容は次のとおりです。

QtGUIAPP.service

[Unit]
Description=QtGUIAPP

[Service]
Environment="DISPLAY=:0"
Environment="XAUTHORITY=/home/user/.Xauthority"
ExecStart=/usr/bin/Sudo /home/user/QtGUIAPP --no-sandbox
Restart=always
[Install]
WantedBy=multi-user.target

上記は問題なく正常に動作します。

しかし、モニターなしでPCを起動してリモートでアクセスすると、アプリケーションが実行されていないようです。そして、私はsyslogで次のようなエラーを受け取ります

 Invalid MIT-MAGIC-COOKIE-1 keyQStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'QXcbConnection: Could not connect to display :0Could not connect to any X display.
Oct 18 12:45:55 user systemd[1]: QtGUIAPP.service: Main process exited, code=exited, status=1/FAILURE
Oct 18 12:45:55 user systemd[1]: QtGUIAPP.service: Unit entered failed state.
Oct 18 12:45:55 user systemd[1]: QtGUIAPP.service: Failed with result 'exit-code'.
Oct 18 12:45:55 user avahi-daemon[799]: Host name conflict, retrying with user-2
Oct 18 12:45:55 user avahi-daemon[799]: Registering new address record for 10.0.7.15 on enp2s0.IPv4.
Oct 18 12:45:56 user systemd[1]: QtGUIAPP.service: Service hold-off time over, scheduling restart.

問題はラインにあると思います

 Environment="DISPLAY=:0"

上記のスクリプトを変更して、ディスプレイが接続されているときと接続されていないときの両方で機能するようにするにはどうすればよいですか。

1
Haris

XなしでQtを実行することはできないので、Xを実行する必要があります。モニターが検出されない場合、デフォルトでは起動しません。

私は このUbuntuフォーラムスレッド正確な回答へのリンク )を見つけました。これは、モニターに接続できないという問題を回避するのに役立つ可能性があります。

私はUbuntuでそれほど優れていない(過去2年間使用してきた)ので、同じことを行う他のオプションがあるかもしれません。

私はまったく同じ問題を抱えていました-(今のところ)モニターが接続されていないマシンでXを実行したいのです。

Intelドライバーを使用して、Xは接続されているモニターを見つけられず、あきらめました。

(II) intel(0): Output VGA disconnected
(WW) intel(0): No outputs definitely connected, trying again...
(II) intel(0): Output VGA disconnected
(WW) intel(0): Unable to find initial modes
(EE) intel(0): No valid modes.
(II) UnloadModule: "intel"

これらのフォーラムやその他のフォーラムで、いくつかの異なるスレッドからつながったソリューションを偶然見つけました。

最初に、基本的なxorg.confファイルを作成する必要がありました。このファイルでは、インテルではなくVESAドライバーを指定しました(xorg.confについては、投稿の下部を参照してください)

これにより、別のエラーが発生しました。

(EE) VESA: Kernel modesetting driver in use, refusing to load
(WW) Falling back to old probe method for vesa
(EE) No devices detected.

次にnomodesetをGRUBブートオプションに追加する必要がありました(以前は/boot/grub/menu.lstにありましたが、現在は/etc/default/grubにあります)

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"

...そしてSudo update-grubを実行します。

(存在しない)モニターのいくつかの基本設定を使用すると、モニターを接続せず、VESAドライバーを使用して、まともな解像度でXを実行できます。

xorg.confファイル:

Section "Monitor"
  Identifier   "Monitor0"
  HorizSync    31-81
  VertRefresh  56-75
EndSection

Section "Device"
  Identifier  "Card0"
  Driver      "vesa"
EndSection

Section "Screen"
    Identifier "Screen0"
    Device     "Card0"
    Monitor    "Monitor0"
EndSection
2
kartikay101