web-dev-qa-db-ja.com

Python ssh + tmuxセッションをデタッチすると、「Xサーバーに接続できません」でコードがクラッシュします

私はリモートマシン上でPythonコードを実行し(それをsshで実行します)、Tmuxを使用します。リモートマシンから切断するまで、コードは問題なく実行されます。Tmuxを介した接続のポイントはすべてリモートマシンに接続していなくても、コードは引き続き実行されます。後で再接続すると、次のエラーメッセージが表示されます。

: cannot connect to X server localhost:11.0

なぜこれが起こっているのか、またはどうすればそれを止めることができるのか誰かが知っていますか?

7
user1551817
cannot connect to X server localhost:11.0

...コードがXサーバー(GUI環境)に接続しようとしている(そして失敗している)ことを意味します。おそらくSSHセッションを介して転送されます。 tmuxは、ターミナルアプリケーションにセッション継続性を提供します。 Xサーバーをエミュレートすることはできません。


GUI接続をまったく実行できないようにしたい場合(そして、ソフトウェアがこのように記述されている場合でも、試行さえしないようにする場合)は、コードを実行する前にDISPLAY環境変数の設定を解除してください。

これがエラーまたは例外の原因である場合、それを生成するコードは、後のエラーを引き起こしているのと同じコードです。


引き続き存在するfakeGUI環境を作成する場合は、Xvfbを使用してそれを行うこともできます。

一部のLinuxディストリビューションはxvfb-runラッパー。これを自動設定するために:

# prevent any future commands in this session from connecting to your real X environment
unset DISPLAY XAUTHORITY

# run yourcode.py with a fake X environment provided by xvfb-run
xvfb-run python yourcode.py

ちなみに、xvfb-runに存在するバグに関するメモと、それに利用可能な修正については、質問 xvfb-runが複数のインスタンスが並行して呼び出された場合は信頼できない を参照してください。


Tmuxがターミナルアプリケーションに提供するものと同様の機能を備えたGUIアプリケーションを実行できるように、実際にデタッチして後で再アタッチできるXサーバーが必要な場合は、 X11vnc または同様のツールの使用を検討してください。

8
Charles Duffy