Systemd Type = パッキングは子プロセスをキャプチャしません(更新され、systemdによって発生しません)

Systemd Type = パッキングは子プロセスをキャプチャしません(更新され、systemdによって発生しません)

修正する:

この問題を解決しました。ここで私の経験を共有します。

  • 新しい vncsession は子プロセスの状態を分岐して確認します。
  • キッズチェック/home/$USER/.vnc/。実際、最大の問題はこのフォルダです。このフォルダは以前に作成されたように見え、SELinuxコンテキストはvncsessionとは異なります。フォルダを削除してパスワードを再作成してください。
  • TigerVNCをコンパイルするには、次のコマンドに従ってください。速度仕様、RPMバージョンはプレフィックスを使用し、/usrgitバージョンは/usr/local
  • 実際にエラーメッセージをキャプチャするには、すべてを次のperrorように置き換えます。syslog(LOG_CRIT, ...

最大の問題は、フォークされたプロセスのエラーが反映されjournalct -t vncsessionない、またはjournalctl -u vncserver@:$DISPLAY。根本的な原因を見つけるには、vncsessionのソースコードを修正する必要があります。

元の質問:

Fedora 33でTigerVNCを使用しています。 TigerVNCの最新アップデートはSwitchvncserverからvncsession。最新の変更を反映してシステム単位ファイルが更新されました。ところで、最新のsystemdユニットファイルでVNCを起動できず、デバッグ中です。サービスが正しく実行され(-xvncsessionが正しく呼び出されることを確認するためにラッパーbashコードに追加されます)、サービスが開始されます。非アクティブ

ユニットファイルの基本構造は次のとおりです。

Type=forking
ExecStart=/.../vncsession-start DISPLAY

vncsession-startは実際にラッパーです。

...
exec /.../vncsession USER DISPLAY

問題は、私がsystemctl startサービスするときにエラーなしで終了することです(マスターPIDのみがリストされ、ExitCode = 0)。しかし、私は2つの異なる方法で実行します。

  • Bashで直接実行:実行され、Xvncが起動します。
  • ユニットファイルをに変更しExecStart=/bin/bash -cx 'strace -f vncsession USER DISPLAY'て変更Type=simple:Xvncも起動します。

最初の試みは、誤ったvnc設定の問題を解決することです。 2番目の試みはSELinux設定を確認することです。

文書によると、システムコールが処理されますType=forkingfork()私はvncsessionstraceで確認し、私が見たものは次のとおりです。

  • バッシュexecvnc セッション
  • vncセッション呼び出しclone()いいえ fork()
  • vncsessionを実行してからexecev()start Xvncを呼び出します。

だから私の質問は次のとおりです。 1)この状況に適したものとは何ですか?正しい選択Type=ですか?forking2)この種の問題をデバッグする方法は?

ありがとうございます!

関連情報