2016-10-03 4 views
2

Я запускаю код Python на удаленной машине (в которую я вставляю ssh), а затем использую Tmux. Код работает отлично, пока я не отсоединяюсь от удаленной машины. Весь смысл моего подключения через Tmux заключается в том, что код продолжает работать, даже когда я не подключен к удаленной машине. Когда я заново позже, у меня есть сообщение об ошибке:Код Python с ошибкой «не может подключиться к X-серверу» при отсоединении сеанса 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-сервер - графический интерфейс среды - предположительно перенаправляются над 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-run unreliable when multiple instances invoked in parallel для заметок на ошибках, присутствующих в Xvfb перспективе, и исправить имеющийся для того же.


Если вы хотите сервер X вы можете отделить от и прикрепить позже, что позволяет запускать GUI-приложений с подобной функциональностью к тому, что tmux дает вам для терминальных приложений, рассмотрите возможность использования X11vnc или аналогичного инструмента.

+0

Очень полезно. Я не уверен, почему мой код даже пытался создать графическое соединение, поскольку я не прошу его показать() что угодно. Но теперь я знаю, где проблема, я могу немного поэкспериментировать. Благодаря! – user1551817

+0

Ahh. Часто инициализировать библиотеку GUI достаточно, чтобы попытаться подключиться, фактически не доходя до отображения каких-либо окон. –