システムを起動するたびに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"
上記のスクリプトを変更して、ディスプレイが接続されているときと接続されていないときの両方で機能するようにするにはどうすればよいですか。
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