<< Предыдущий раздел | /\ Содержание | >> Следующий раздел

Имя X-сервера

Каждый запущенный X-сервер имеет свое имя, по которому на него можно сослаться. Оно называется именем дисплея или просто "дисплей". Имя выглядит следующим образом:

Bobby.inp.nsk.su:0.0

Имя состоит из трех частей: имя компьютера (можно указывать и короткое имя (bobby), и IP-адрес), затем через двоеточие идет так называемый номер дисплея (используется, когда на одном компьютере запущено несколько X-серверов одновременно; обычно просто "0") и затем через точку так называемый номер экрана -- обычно тоже "0".

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

ИмяСсылка
Sky:0Нулевой дисплей на компьютере Sky
:0.1 Первый экран нулевого дисплея данного компьютера
:3 Третий дисплей данного компьютера

Чаще всего имя дисплея -- это или просто ":0.0", или "компьютер:0.0".

Как указать программе, на каком дисплее ей работать

При запуске каждая программа проверяет переменную окружения с названием DISPLAY. Посмотреть ее значение можно командой echo $DISPLAY:

bobby:~% echo $DISPLAY
:0.0
bobby:~% _

При запуске X-Window в $DISPLAY автоматически помещается ссылка на запускаемый X-сервер. Менять же ее значение требуется только при входе по telnet/rlogin/rsh на другой компьютер.

Команды изменения значения $DISPLAY разные в разных shell'ах. В используемом на практических занятиях zsh это делается командой export:

somewhere:~% echo $DISPLAY

somewhere:~% export DISPLAY=Bobby.inp.nsk.su:0.0
somewhere:~% echo $DISPLAY
Bobby.inp.nsk.su:0.0
somewhere:~% _

Вокруг символа "=" не должно быть пробелов!

Аналогичная команда в bash будет выглядеть так:

DISPLAY=Bobby.inp.nsk.su:0.0; export DISPLAY
а в csh/tcsh так:

setenv DISPLAY Bobby.inp.nsk.su:0.0

Практически всем программам можно указать имя дисплея при помощи ключа "-display":

xterm -display bobby:0
Менять значение $DISPLAY при этом не требуется -- она может быть даже пустой.

Управление доступом: xhost

Если просто зайти (например, по telnet) на какой-то другой компьютер и попытаться запустить оттуда к себе на дисплей программу, то это не удастся:

sky:~% xterm -display bobby:0
Xlib: connection to "bobby:0.0" refused by server
Xlib: Client is not authorized to connect to Server
xterm Xt error: Can't open display: bobby:0
sky:~% _

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

Команда "xhost +компьютер" добавляет указанный компьютер в список тех, кому разрешен доступ. "xhost -компьютер" удаляет компьютер из этого списка. При этом будет запрещен доступ всем программам в будущем -- те, что уже запущены, "отключены" не будут. Просто "xhost" без параметров печатает текущий список доступа.

Предупреждение
Команду xhost можно запускать только с локального компьютера -- например, если компьютер Alpha открыл доступ к своему дисплею для компьютера Beta, то с Beta не удастся открыть компьютеру Gamma доступ к Alpha.


<< Предыдущий раздел | /\ Содержание | >> Следующий раздел