Как я могу указать дисплей?
Когда я запускаю некоторые программы через 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
в зависимости от того, где вы хотите, чтобы ваши фактические окна появлялись и какие устройства ввода вы хотите использовать.
Когда вы подключаетесь к другому компьютеру через 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
Пожалуйста, НЕ пытайтесь установить $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
будет пустым.
Я столкнулся с подобной проблемой сегодня. Итак, вот простое решение: делая 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