Как я могу указать дисплей? - PullRequest
50 голосов
/ 24 апреля 2009

Когда я запускаю некоторые программы через SSH, например firefox &, я получаю сообщение об ошибке

Error: no display specified 

Я хотел бы открыть много дисплеев, по-прежнему показывая stdout каждой программы.

Исходный вопрос: Как указать отображение для отображения многоэкранной программы?

Пабло Санта-Крус дает мне следующий код в качестве решения. Я не понимаю этого.

$ export DISPLAY=yourmachine.yourdomain.com:0.0

$ firefox &

Что такое yourmachine и yourdomain.com в команде?

Ответы [ 11 ]

67 голосов
/ 31 июля 2009

Способ работы X такой же, как и для любой сетевой программы. У вас есть сервер некоторого описания (в данном случае, сервер X-дисплея), который работает на определенной машине, и у вас есть X-клиенты (например, Firefox), которые пытаются подключиться к этому серверу, чтобы отобразить их информацию.

Часто (на «домашних» машинах) клиент и сервер работают на одном и том же компьютере, и есть только один сервер, но X достаточно мощный, чтобы этого не происходило. Он был построен с самого начала разделения сервера и клиента.

Это позволяет вам делать такие удивительные вещи, как войти в свой ящик (в текстовом режиме) на полпути вокруг планеты, сказать ему, что сервер отображения - это тот ящик, на котором вы сейчас находитесь, и, вуаля, окна неожиданно запускаются появляются локально.

Чтобы клиент мог взаимодействовать с пользователем, ему необходимо знать, как найти сервер. Есть несколько способов сделать это. Многие клиенты допускают указание опции -display или --display:

xeyes -display paxbox1.paxco.com:0.0

Многие будут использовать переменную окружения DISPLAY, если отображение не указано специально. Вы можете установить эту переменную как любую другую:

DISPLAY=paxbox1.paxco.com:0.0; export DISPLAY # in .profile
export DISPLAY=paxbox1.paxco.com:0.0 # in your shell
DISPLAY=paxbox1.paxco.com:0.0 firefox & # for that command (shell permitting)

Первая часть переменной DISPLAY - это просто адрес компьютера сервера дисплея. Он следует тому же правилу, что и любой другой IP-адрес; это может быть разрешаемое имя DNS (включая localhost) или определенный IP-адрес (например, 192.168.10.55).

Вторая часть специфична для X. Он дает номер X "display" (X server) и номер экрана для использования. Первый (номер дисплея) обычно относится к группе устройств, содержащих один или несколько экранов, но с одной клавиатурой и мышью (то есть один поток ввода). Номер экрана обычно дает конкретный экран в этой группе.

Примером может быть:

+----------------------------------------+
|paxbox1.paxco.com|                      |
+-----------------+                      |
|                                        |
|  +----------+----+  +----------+----+  |
|  |Display :0|    |  |Display :1|    |  |
|  +----------+    |  +----------+    |  |
|  |               |  |               |  |
|  | +-----------+ |  |               |  |
|  | |Screen :0.0| |  |               |  |
|  | +-----------+ |  |               |  |
|  | +-----------+ |  |               |  |
|  | |Screen :0.1| |  |               |  |
|  | +-----------+ |  |               |  |
|  | +-----------+ |  | +-----------+ |  |
|  | |Screen :0.2| |  | |Screen :1.0| |  |
|  | +-----------+ |  | +-----------+ |  |
|  | +-----------+ |  | +-----------+ |  |
|  | |Screen :0.3| |  | |Screen :1.1| |  |
|  | +-----------+ |  | +-----------+ |  |
|  | +-----------+ |  | +-----------+ |  |
|  | | Keyboard  | |  | |  Keyboard | |  |
|  | +-----------+ |  | +-----------+ |  |
|  | +-----------+ |  | +-----------+ |  |
|  | |   Mouse   | |  | |   Mouse   | |  |
|  | +-----------+ |  | +-----------+ |  |
|  +---------------+  +---------------+  |
|                                        |
+----------------------------------------+

Здесь у вас есть один компьютер (paxbox1.paxco.com) с двумя серверами дисплея. Первый имеет четыре экрана, а второй - два. Возможны следующие варианты:

DISPLAY=paxbox1.paxco.com:0.0
DISPLAY=paxbox1.paxco.com:0.1
DISPLAY=paxbox1.paxco.com:0.2
DISPLAY=paxbox1.paxco.com:0.3
DISPLAY=paxbox1.paxco.com:1.0
DISPLAY=paxbox1.paxco.com:1.1

в зависимости от того, где вы хотите видеть ваши фактические окна и какие устройства ввода вы хотите использовать.

18 голосов
/ 24 апреля 2009
$ export DISPLAY=yourmachine.yourdomain.com:0.0
$ firefox &
11 голосов
/ 08 июля 2009

Когда вы подключаетесь к другому компьютеру через SSH, вы можете включить X-Forwarding в SSH, чтобы X-окна передавались в зашифрованном виде через туннель SSH обратно на ваш компьютер. Вы можете включить переадресацию X, добавив -X в командную строку ssh или установив ForwardX11 yes в своем конфигурационном файле SSH.

Чтобы проверить, была ли X-Forwarding настроена успешно (сервер может не разрешить это), просто попробуйте, если echo $DISPLAY выведет что-то вроде localhost:10.0.

9 голосов
/ 08 июля 2009

Попробуйте

export DISPLAY=localhost:0.0
6 голосов
/ 11 марта 2013

Попробуйте установить пакет xorg-x11-xauth .

5 голосов
/ 31 декабря 2014

Я столкнулся с подобной проблемой, поэтому, возможно, этот ответ кому-нибудь поможет.

Причина ошибки Error: no display specified заключается в том, что Firefox запускается, но на удаленном хосте не запущен X-сервер (GUI). Вы можете использовать пересылку X11 для запуска Firefox на удаленном хосте, но отображать его на локальном хосте. В Mac OS X вам потребуется загрузить XQuartz , чтобы использовать пересылку X11. Без этого у вас не будет набора переменных $DISPLAY, поэтому, если вы попробуете и echo $DISPLAY, он будет пустым.

4 голосов
/ 14 декабря 2017

Я столкнулся с подобной проблемой сегодня. Итак, вот простое решение: Выполняя SSH на машине, просто добавьте Ctrl - Y .

ssh user@ip_address -Y

После входа в систему введите firefox &. И ты в порядке.

4 голосов
/ 30 октября 2017

Пожалуйста, НЕ пытайтесь установить $ DISPLAY вручную при подключении по SSH.
Если вы подключаетесь через SSH -X, а $ DISPLAY остается пустым, это обычно означает, что зашифрованный канал установить невозможно.

Скорее всего, вам не хватает пакета xauth или xorg-x11-xauth. Попробуйте установить его на удаленном компьютере, используя:

sudo apt-get install xauth

или

sudo apt-get install xorg-x11-xauth

После этого завершите и перезапустите ваше соединение SSH. Не забудьте использовать SSH -X, чтобы вывод X Window был перенаправлен на локальный компьютер.

Теперь попробуйте echo $DISPLAY еще раз, чтобы увидеть, был ли $ DISPLAY установлен автоматически демоном SSH. Он должен показать вам строку с IP-адресом и портом.

3 голосов
/ 17 февраля 2018

войдите на ваш сервер через

ssh -X root@yourIP

отредактируйте файл / etc / ssh / sshd_config и добавьте в него эту строку.

X11UseLocalhost no

Перезагрузите sshd. для CentOS ( проверьте ваш дистрибутив )

/sbin/service sshd restart

проверьте свой ДИСПЛЕЙ

echo $DISPLAY

вы должны увидеть это

yourIP:10.0

Наслаждайтесь

firefox

для получения дополнительной информации

1 голос
/ 27 января 2017

Даже я столкнулся с тем же в CentOS 6.8.

yum reinstall xorg*

Завершите текущий сеанс и откройте другой сеанс в таком инструменте, как mobiXterm. Убедитесь, что в сеансе включена переадресация X11 в инструменте.

...