Как я могу указать дисплей?

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

Error: no display specified 

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

Начальный вопрос: Как я могу указать дисплей, чтобы получить многоэкранную программу?

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

$ export DISPLAY=yourmachine.yourdomain.com:0.0

$ firefox &

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

12 ответов

Решение

То, как работает 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

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

$ export DISPLAY=yourmachine.yourdomain.com:0.0
$ firefox &

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

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

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

ssh -X root@yourIP

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

X11UseLocalhost no

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

/sbin/service sshd restart

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

echo $DISPLAY

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

yourIP:10.0

наслаждаться

firefox

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

Пытаться

export DISPLAY=localhost:0.0

Пожалуйста, НЕ пытайтесь установить $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-адресом и портом.

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

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

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

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

ssh user@ip_address -Y

После входа введите firefox &, И тебе хорошо идти.

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

yum reinstall xorg*

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

Я через VNC, чтобы понять X11 больше. Чтобы указать отображение для отображения многоэкранной программы, экспортируйте DISPLAY=IP:DisplayNum.ScreenNum

Например,

vncserver :2
vncserver -list
echo '$DISPLAY'=$DISPLAY 
export DISPLAY=:2  # export DISPLAY=IP:DisplayNum or export DISPLAY=:DisplayNum for localhost; So that can vnc connect and see the vnc desktop :2 if $DISPLAY is not :2.
echo '$DISPLAY'=$DISPLAY

Я использую сервер xming, прежде чем набирать firefox, используйте следующую команду export DISPLAY=0:0

Другие вопросы по тегам