- Вопрос или проблема
- Ответ или решение
- Решение проблемы с ошибкой "Can’t open display: :0.0" при использовании SSH с X11 Forwarding
- 1. Проверка конфигурации SSH
- 2. Переменная окружения DISPLAY
- 3. Проверка на наличие xauth
- 4. Отключение контроля доступа X
- 5. Установка X-сервера на клиенте
- 6. Проверка конфигурации и прав доступа
- 7. Использование SSH с опцией -Y
- Заключение
Вопрос или проблема
Я пытаюсь открыть xterm
на своем удаленном сервере (Ubuntu Server 10.04) с помощью ssh:
ssh -X имя@машина xterm
но возвращаемая ошибка:
xterm Xt error: Can't open display: :0.0`
Я гуглил и пробовал все, что нашел.
Все еще получаю эту ошибку. Переменная DISPLAY должна быть установлена автоматически, верно?
Часть sshd_config
:
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
Есть какие-либо советы?
Если ssh может установить соединение, он установит DISPLAY
на правильное значение. Поскольку у вас установлено X11DisplayOffset
на 10 (значение по умолчанию), ssh будет использовать первый доступный дисплей, начиная с 10. Если вы видите значение, меньшее 10¹, тогда что-то мешает нормальной пересылке X11, настроенной ssh, по крайней мере, переопределяя DISPLAY
. Значение :0
(или :0.0
, часть после точки не имеет значения) указывает на первый дисплей, который был запущен на машине, который в типичных случаях является активной сессией (или графическим экраном входа) на консоли машины.
Наиболее вероятное объяснение наблюдаемого вами поведения заключается в том, что один из ваших файлов конфигурации оболочки устанавливает DISPLAY
. Самым очевидным виновником является ~/.bashrc
(который из-за особенности bash выполняется, когда родитель bash является rshd
или sshd
, даже если оболочка не интерактивная). Другой файл, который определяет переменные окружения, это /etc/environment
. Если это так, решение очевидно: не устанавливайте DISPLAY
там. (Существует очень мало случаев, когда вам нужно вручную устанавливать DISPLAY
.)
Существуют и другие экзотические объяснения. Это может произойти, если вы изменили свою оболочку входа на screen
(в теории мило, но на практике нецелесообразно) и у вас есть файл инициализации оболочки, который заставляет устанавливать DISPLAY
внутри screen (это не самая лучшая идея). Это также могло произойти, если вы настроили сервер на прием переменных окружения, отправляемых клиентом (AcceptEnv
директива в sshd_config
), клиент отправляет DISPLAY
, и соединение X не может быть установлено. Либо это могло произойти, если вы установили переменную окружения на сервере через директиву command
в ~/.ssh/authorized_keys
. Либо xterm
может быть скриптом.
¹ Или любое значение X11DisplayOffset
в конфигурации сервера, но оно редко когда меняется от значения по умолчанию.
Ваша команда должна работать, или, по крайней мере, она работает для меня. Попробуйте это вместо:
ssh -Y user@machine xterm
Редактирование (1):
Попробуйте это:
ssh -X user@machine env
Это должно показать все переменные окружения. Там должны быть различные SSH вещи, а также DISPLAY. DISPLAY должен быть 10.0.
Вы также можете попробовать это:
ssh -X user@machine DISPLAY=10.0 xterm
Кроме X11Forwarding yes
, мне также нужно было добавить
X11UseLocalhost no
в /etc/ssh/sshd_config
как описано здесь.
Контроль доступа X, вероятно, мешает.
Запустите xhost +
(из пакета x11-xserver-utils
), чтобы полностью отключить контроль доступа.
Я обнаружил, что xauth не был установлен.
Также проверьте, что у вас установлен X11 на клиентской стороне. У меня возникла эта проблема, когда я обновил свой Mac до OS X Mountain Lion. Mountain Lion удаляет X11, поэтому вам нужно установить его снова через проект с открытым исходным кодом X Quartz.
http://xquartz.macosforge.org/landing/
Возможно, подключения X11 для пользователя, пытающегося запустить xterm, не допускаются, исправьте это, запустив следующую команду на хост-машине:
xhost +si:localuser:mininet
Не забудьте исправить проблему с файлом ~/.Xauthority.
Сначала необходимо установить соединение, а после его установления открыть xterm.
Ответ или решение
Решение проблемы с ошибкой "Can’t open display: :0.0" при использовании SSH с X11 Forwarding
При работе с SSH для запуска графических приложений на удаленном сервере с использованием X11 Forwarding, нередко возникают ошибки, подобные "Xt error: Can’t open display: :0.0". Данная проблема может быть вызвана множеством факторов. В этой статье подробно рассмотрены возможные причины и способы их устранения.
1. Проверка конфигурации SSH
Прежде всего, убедитесь, что в файле конфигурации SSH-сервера (/etc/ssh/sshd_config
) включено следующее:
X11Forwarding yes
X11DisplayOffset 10
Вы также можете добавить строку:
X11UseLocalhost no
Это может помочь, если у вас возникают проблемы с локальным подключением. После внесения изменений в конфигурацию, обязательно перезапустите демон SSH:
sudo service ssh restart
2. Переменная окружения DISPLAY
После установления SSH-соединения вы можете проверить значение переменной DISPLAY
, выполнив команду:
ssh -X user@machine env
Вы должны увидеть значение DISPLAY
, равное 10.0
или близкое к этому. Если оно установлено на :0.0
, это указывает на то, что переменная переопределена и передает данные с локального компьютера.
Чтобы временно установить DISPLAY
вручную, используйте следующую команду:
ssh -X user@machine DISPLAY=10.0 xterm
3. Проверка на наличие xauth
Убедитесь, что пакет xauth
установлен на сервере. Этот инструмент отвечает за установление и управление авторизацией для X11. Вы можете установить его с помощью команды:
sudo apt-get install xauth
4. Отключение контроля доступа X
Иногда ошибка может быть связана с контролем доступа к X-серверу. Чтобы отключить этот контроль, выполните следующую команду на удаленном сервере:
xhost +
Это полностью отключает доступ, что может быть небезопасно, поэтому лучше всего определить конкретного пользователя:
xhost +si:localuser:username
5. Установка X-сервера на клиенте
Если вы используете macOS или другую операционную систему без предустановленного X-сервера, убедитесь, что у вас установлен X11. Для macOS вы можете установить XQuartz, который доступен по следующей ссылке: XQuartz.
6. Проверка конфигурации и прав доступа
Убедитесь, что у вас есть необходимые права доступа для запуска графических приложений. При необходимости, проверьте файл ~/.Xauthority
пользователя, под которым вы подключаетесь. Если нужно, удалите или перенастройте его.
7. Использование SSH с опцией -Y
Если все вышеперечисленное не помогло, попробуйте использовать более безопасный параметр -Y
вместо -X
:
ssh -Y user@machine xterm
Этот ключ позволяет делать доверенные соединения, что может помочь избежать проблем с отображением.
Заключение
Ошибка "Can’t open display: :0.0" может быть вызвана многими факторами, связанными с как конфигурацией сервера, так и клиентского окружения. Следуя предложенным рекомендациям, вы сможете диагностировать и исправить проблемы с X11 Forwarding. Если у вас возникли трудности даже после выполнения всех шагов, рассмотрите возможность обращения к системному администратору или технической поддержке для получения дополнительных указаний.