ssh -X «Xt error: невозможно открыть дисплей:: 0.0»


9

Я пытаюсь открыть xtermна своем удаленном сервере (Ubuntu Server 10.04) с помощью SSH:

ssh -X name@machine xterm

но ошибка возвращается:

xterm Xt error: Can't open display: :0.0`

Я погуглил и попробовал все, что нашел. Все еще получаю эту ошибку. Переменная DISPLAY должна быть установлена ​​автоматически, верно?

Часть sshd_config:

X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes

Любой совет?


Можете ли вы запустить xtermв текущем терминале до SSH-IN?
энзотиб

@belacqua: это не обязательно. Я обычно подключаюсь к удаленному безголовому серверу и могу легко запускать удаленные X-приложения на локальном X-сервере.
энзотиб

@enzotib - спасибо; Я этого не знал.
Белаква

@enzotib извини, я не видел твой комментарий. Да, я могу открыть xterm на своей локальной машине
Fabian

Ответы:


8

Если 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внутри экрана (не очень хорошая идея). Это также может произойти, если вы настроили сервер на прием переменных среды, отправленных клиентом ( AcceptEnvдиректива in sshd_config), клиент отправляет DISPLAY, и X-соединение не может быть установлено. Или это может произойти, если вы установите переменную окружения на сервере с помощью commandдирективы in ~/.ssh/authorized_keys. Или xtermможет быть сценарий.

¹ Или какое-либо значение X11DisplayOffsetв конфигурации сервера, но вряд ли когда-либо изменилось по умолчанию.


1
было бы полезно иметь перечисленные способы решения различных проблем, о которых вы упомянули.
Джордж Стокер

@GeorgeStocker Все эти проблемы имеют вид «есть некоторые настройки в файле конфигурации», поэтому решение всех этих проблем - удалить или изменить настройку. Есть ли какой-то конкретный, который вы можете идентифицировать, но не исправить?
Жиль "ТАК - перестань быть злым"

Я вижу DISPLAY=localhost:11.0по моему env, но его актуальность и стоит ли мне его менять DISPLAY 10.0, неясно.
Джордж Стокер

@ GeorgeStocker Тогда ваши симптомы не соответствуют этому вопросу. Я обновил свой ответ, чтобы уточнить, что 10 - это предельное значение, ниже которого применяется этот ответ. 11 является ожидаемым значением здесь (вероятно, второе активное соединение SSH с переадресацией X).
Жиль "ТАК - перестань быть злым"

Я бегу DISPLAY=:0 xtermи все еще получаю xterm: Xt error: Can't open display: :0ошибку, поэтому переменная окружения не является проблемой.
Дан Даскалеску

3

Ваша команда должна работать, или, по крайней мере, она работает для меня. Попробуйте это вместо:

ssh -Y user@machine xterm

Изменить (1):

Попробуй это:

ssh -X user@machine env

Это должно показать всю окружающую среду. Там должны быть различные вещи SSH, а также DISPLAY. ДИСПЛЕЙ должен быть 10.0.

Вы также можете попробовать это:

ssh -X user@machine DISPLAY=10.0 xterm

Я попробовал это с, -Yно это не сработало. Я все еще получаюCan't open display: :0.0
Фабиан

Какая у вас локальная машина? Относится: 0.0, так как по умолчанию это локальный X-сервер, а не удаленный ...
ред.

Я использую Ubuntu 10.04, Linux Mint 11 или Mac OS X 10.7. Использование зависит от местоположения (работа / дом), но ошибка все та же
Fabian

Я отредактирую ответ ... (1)
ред.

Моя переменная DISPLAYlocalhost:10.0
Алексис Уилк

2

Контроль доступа X, вероятно, в пути.

Запустите xhost +(из пакета x11-xserver-utils), чтобы полностью отключить контроль доступа.


2

Кроме того X11Forwarding yes, мне также нужно было добавить

X11UseLocalhost no

в /etc/ssh/sshd_config

как описано здесь .



0

Также убедитесь, что у вас установлен X11 на стороне клиента. Я получил эту проблему, когда я обновил свой Mac до OS X Mountain Lion. Mountain Lion удаляет X11, поэтому вам придется установить его снова через проект X Quartz с открытым исходным кодом. http://xquartz.macosforge.org/landing/


-1

Вы должны сначала открыть соединение, а после того, как установлено, открыть xterm.


Спасибо за ваш ответ. Что вы имеете в виду под «открыть соединение»? Когда я использую ssh -X name@machine и после подключения xtermя получаю ту же ошибку. Вы имели в виду это? ;)
Фабиан

Нет, это должно работать и без подключения в первую очередь.
энзотиб

@ Фабиан - я думаю, именно это он и имел в виду.
Белаква

Я думаю, что соединение VNC необходимо.
нанофарад

@enzotib, ну ... на самом деле sshсначала подключается, затем в этой sshсреде запускается xterm . Так что в любом случае это почти то же самое, только если вы используете ssh -X remoteсначала, тогда вы можете проверить, проверяете ли вы, echo $DISPLAYчтобы убедиться, что $DISPLAYон правильно установлен на удаленном компьютере после ssh -X.
Алексис Уилке
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.