Что такое переменная среды DISPLAY $ DISPLAY?

40

Я новичок в сценариях оболочки. Я не понимаю, что такое переменная окружения $DISPLAY .

У меня Ubuntu 13.10, и я использую /bin/bash shell. У меня два монитора.

Вопросы:

  1. Команда echo $DISPLAY будет печатать :0.0 на моей машине (на обоих мониторах). Что это значит?

  2. В каких случаях переменная $DISPLAY будет пустой или NULL?

  3. Есть ли какие-либо статьи или учебные пособия по этому поводу?

задан Chandrayya G K 10.03.2014 в 14:50
источник

4 ответа

61

Волшебное слово в системе окон X - DISPLAY. Дисплей состоит (упрощена):

  • клавиатура,
  • мышь
  • и экран.

Дисплей управляется серверной программой, известной как X-сервер. Сервер предоставляет возможности отображения другим программам, которые подключаются к нему.

Удаленный сервер знает, где ему нужно перенаправить сетевой трафик X через определение переменной среды DISPLAY, которая обычно указывает на сервер X Display, расположенный на вашем локальном компьютере.

Значение переменной среды отображения:

hostname:D.S

, где:

имя хоста - это имя компьютера, на котором выполняется X-сервер. Пропущенное имя хоста означает localhost.

D - порядковый номер (обычно 0). Он может быть изменен, если к одному компьютеру подключено несколько дисплеев.

S - номер экрана. Дисплей может иметь несколько экранов. Обычно есть только один экран, где 0 по умолчанию.

Пример значений

localhost:4
google.com:0
:0.0

hostname:D.S означает экран S на дисплее D имени хоста хоста; сервер X для этого дисплея прослушивает порт TCP 6000 + D.

host/unix:D.S означает экран S на дисплее D хоста-хоста; X-сервер для этого дисплея прослушивает сокет домена UNIX / tmp/.X11-unix/XD (так что он доступен только для хоста).

:D.S эквивалентно host / unix: D.S, где host - это локальное имя хоста.

: 0.0 означает, что мы говорим о первом экране, прикрепленном к вашему первому дисплею на вашем локальном хосте

Подробнее здесь и here и .

Из справочной страницы X (7):

  

С точки зрения пользователя, каждый X-сервер имеет отображаемое имя   вида:

     

имя хоста: displaynumber.screennumber

     

Эта информация используется приложением для определения того, как это должно быть   подключиться к серверу и какой экран он должен использовать по умолчанию (on   дисплеи с несколькими мониторами):

     

hostname Имя хоста указывает имя машины, на которую   дисплей физически подключен. Если имя хоста не указано,   наиболее эффективный способ связи с сервером на одном компьютере   будет использован. displaynumber Фраза "display" обычно используется для   обратитесь к коллекции мониторов, которые имеют общую клавиатуру и   указатель (мышь, планшет и т. д.). На большинстве рабочих станций имеется только один   клавиатурой и, следовательно, только одним дисплеем. Большие, многопользовательские системы,   однако часто имеют несколько дисплеев, поэтому более одного человека   может делать графику сразу. Чтобы избежать путаницы, каждый дисплей   на машине назначается номер дисплея (начиная с 0), когда X   сервер для этого дисплея. Номер дисплея всегда должен быть   заданное в отображаемом имени. screennumber В некоторых дисплеях есть один   клавиатуру и указатель среди двух или более мониторов. Поскольку каждый монитор   имеет свой собственный набор окон, каждому экрану присваивается номер экрана   (начиная с 0), когда запускается X-сервер для этого дисплея. Если   номер экрана не указан, будет использоваться экран 0.

    
ответ дан Maythux 10.03.2014 в 14:52
источник
2

От Ссылка :

Переменная-ДИСПЛЕЙ

Значения Пример:

:0.0
localhost:10.0
terminal01:0.0

Что это значит?

  

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

     

Часть имени хоста может использоваться для вывода графического вывода на удаленную машину по сети. Его можно опустить, когда вывод предназначен для X-сервера, запущенного на локальном компьютере. Номер дисплея позволяет выбирать между несколькими X-серверами, работающими на одном компьютере (Ubuntu использует несколько серверов X для включения нескольких графических сеансов рабочего стола).

     

Хотя номер экрана используется для выбора между несколькими физическими экранами, которыми управляет один и тот же X-сервер, он редко устанавливается на что-либо, кроме «0» в настоящее время. Вручную установка значения переменной среды DISPLAY редко требуется в настоящее время, поскольку она может автоматически и разумно корректироваться многими приложениями, такими как «GDM» и «SSH», когда это необходимо.

    
ответ дан Pandya 07.09.2014 в 10:46
2
  

echo $ DISPLAY напечатает: 0.0 на моей машине (на обоих мониторах). Какие   это означает?

: 0.0 означает номер дисплея 0 и номер экрана 0

  

В этом случае $ DISPLAY будет пустым или NULL?

В случае ошибки в вашем DISPLAY, и это не происходит нормально

  

Существуют ли какие-либо статьи или учебные пособия по этому вопросу?

Некоторые учебники и ресурсы можно найти здесь:

ответ дан user259474 18.03.2014 в 12:21
1

Существующие ответы не могут адресовать более общую картину.

Если вы не используете графическую среду (т. е. вы входите в систему на системной консоли без окон и т. д., или вы удаляетесь удаленно из терминала с текстовым интерфейсом через SSH или аналогичного, например, с компьютера под управлением Windows PuTTY), тогда GUI не задействован, и DISPLAY обычно не будет отменено. Единственное средство общения с компьютером - это командная строка (хотя могут быть способы поворота в сеанс GUI, если вы знаете, как это сделать).

Если вы входите в консоль с графическим интерфейсом (на Ubuntu, как правило, используется GDM greeter) или с помощью графического терминала (например, на компьютере под управлением Windows с eXceed или mobaX или в программном обеспечении удаленного рабочего стола, таком как VNC клиент) переменная DISPLAY настраивается программой, которая управляет вашим графическим сеансом, чтобы указать графическим клиентам, к которым подключаются устройства ввода / вывода.

Традиционно в графическом интерфейсе на компьютере Ubuntu была запущена X.org, реализация X11, но совсем недавно модернизированная замена под названием Mir была введена Canonical; и еще совсем недавно я считаю, что Мир будет оставлен в пользу другого проекта с аналогичными целями, названными Wayland . Эти замены предназначены для уменьшения сложности полного стека X11, который мы не будем здесь делать - они придерживаются того же соглашения DISPLAY , которое в конце концов говорит о том, что мы обсуждаем здесь.

В X11 хост-часть DISPLAY может быть удаленным сервером, и вы будете использовать ваш компьютер Ubuntu в качестве «графического терминала» для доступа к файлам и программам на этом удаленном сервере (в этом случае ваш компьютер является " сервер ", который обслуживает клавиатуру, мышь и одно или несколько устройств отображения для« клиентских »программ, запущенных на удаленном ... сервере). Чаще всего на вашем компьютере запускаются сервер X11 (или Мир или Wayland) и клиентские программы (менеджер рабочего стола и различные графические клиенты, такие как веб-браузер, почтовый клиент, программа календаря и т. Д.). Это указывается частью «сервера» значения DISPLAY , которое в последнем случае обычно пусто (что подразумевает значение по умолчанию, localhost ).

Сервер X11 может запускать один или несколько графических сеансов - например, ваш вход в консоль и удаленный сеанс VNC могут работать одновременно. В этом случае (если они управляются одним и тем же экземпляром сервера X11), у вас есть несколько «показов» в терминах X11. На практике один сеанс (одно событие входа и экземпляр настольного компьютера, порожденный этим), представляет собой один дисплей в X11.

Один из таких дисплеев может иметь один или несколько экранов. Традиционно это означало один монитор, хотя оригинальная архитектура имела некоторые неудачные черты, такие как невозможность перемещения окна с одного экрана на другой. Дополнения, подобные Xinerama и Xrandr, еще больше загромождали ситуацию до такой степени, что один экран часто соединяет несколько мониторов различными способами.

Если вы играли в системах с несколькими мониторами, вы, вероятно, обнаружили, что вы можете организовать мониторы различными способами и в конечном итоге иметь прямоугольную область, где ваши мониторы отображают некоторые ее части, а другие части не назначаются ни одному монитору. Это «экран», который создает X11, и если у вас более одной карты дисплея, вы можете иметь несколько из этих экранов, каждый из которых назначается одному или нескольким мониторам (или, теоретически, без монитора, Xvfb использует это, чтобы разрешить вы запускаете X11 без каких-либо мониторов, просто сопоставляя графический интерфейс с областью памяти для любой цели).

    
ответ дан tripleee 29.05.2017 в 07:53