修正する:
この問題を解決しました。ここで私の経験を共有します。
- 新しい vncsession は子プロセスの状態を分岐して確認します。
- キッズチェック
/home/$USER/.vnc/
。実際、最大の問題はこのフォルダです。このフォルダは以前に作成されたように見え、SELinuxコンテキストはvncsessionとは異なります。フォルダを削除してパスワードを再作成してください。 - TigerVNCをコンパイルするには、次のコマンドに従ってください。速度仕様、RPMバージョンはプレフィックスを使用し、
/usr
gitバージョンは/usr/local
。 - 実際にエラーメッセージをキャプチャするには、すべてを次の
perror
ように置き換えます。syslog(LOG_CRIT, ...
最大の問題は、フォークされたプロセスのエラーが反映されjournalct -t vncsession
ない、またはjournalctl -u vncserver@:$DISPLAY
。根本的な原因を見つけるには、vncsessionのソースコードを修正する必要があります。
元の質問:
Fedora 33でTigerVNCを使用しています。 TigerVNCの最新アップデートはSwitchvncserver
からvncsession
。最新の変更を反映してシステム単位ファイルが更新されました。ところで、最新のsystemdユニットファイルでVNCを起動できず、デバッグ中です。サービスが正しく実行され(-x
vncsessionが正しく呼び出されることを確認するためにラッパー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=forking
。fork()
私はvncsession
straceで確認し、私が見たものは次のとおりです。
- バッシュ
exec
vnc セッション - vncセッション呼び出し
clone()
、いいえfork()
- vncsessionを実行してから
execev()
start Xvncを呼び出します。
だから私の質問は次のとおりです。 1)この状況に適したものとは何ですか?正しい選択Type=
ですか?forking
2)この種の問題をデバッグする方法は?
ありがとうございます!