2016-10-03 49 views
2

我運行在遠程計算機(我ssh到),然後用TMUX上Python代碼時「不能連接到X服務器」。代碼運行良好,直到我從遠程機器斷開連接。我通過Tmux進行連接的重點在於,即使我沒有連接到遠程機器,代碼也能繼續運行。當我後來重新連接,我有錯誤消息:Python代碼崩潰與分離的ssh + TMUX會話

: cannot connect to X server localhost:11.0 

有沒有人有一個想法,爲什麼這種情況正在發生或我怎麼能阻止它?

+1

你能顯示代碼? – d33tah

+1

你有沒有試過在後臺運行? – pferate

+1

該錯誤是在其表面上很簡單的 - 它使用本地X服務器。 –

回答

2
cannot connect to X server localhost:11.0 

...意味着你的代碼試圖(和失敗)連接到一個X服務器 - 一個GUI環境 - 大概是被轉發了你的SSH會話。 tmux爲終端應用程序提供會話連續性;它無法模擬X服務器。


如果你想從能夠做的一切任何GUI的連接停止它(或許,如果軟件正是如此寫,連嘗試都)運行代碼,未設置前DISPLAY環境變量。

如果這會導致錯誤或異常,代碼生成是這是造成你以後的錯誤相同的代碼。


如果你想創建一個假的GUI的環境,將仍然存在,你也可以這樣做,用的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的運行錯誤筆記的問題xvfb-run unreliable when multiple instances invoked in parallel,並提供修復相同。


如果你願意,你可以從它們中分離並重新連接以後,讓你運行具有類似功能的GUI應用程序到什麼TMUX爲您提供了終端應用的X服務器,請考慮使用X11vnc或類似的工具。

+0

非常有用的感謝。我不知道爲什麼我的代碼甚至試圖建立一個GUI連接,因爲我不要求它顯示()任何東西。但現在我知道問題出在哪裏,我可以試驗一下。謝謝! – user1551817

+0

啊。通常,初始化GUI庫足以嘗試連接,而不需要顯示任何窗口。 –