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

75

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

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

Вопросов:

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

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

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

Чандрайя Г.К.
источник
Сегодня echo $DISPLAYпечатается :0НЕ:0.0
Чандрайя Г.К.
проверить это поможет в случае пропуска
Maythux

Ответы:

86

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

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

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

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

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

hostname:D.S

где:

hostname - это имя компьютера, на котором работает 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: DS, где host - локальное имя хоста.

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

Читайте больше здесь и здесь и здесь .

Со страницы руководства X (7):

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

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

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

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

Maythux
источник
При этом $ DISPLAY будет нулевым или пустым.
Чандрайя Г.К.
В обычном режиме это не должно происходить, если на вашем дисплее нет проблемы. В основном, перезапуск диспетчера дисплеев решит проблему. Но это не действие по умолчанию.
Maythux
@ChandrayyaGK Например, когда я не использую какую-либо рабочую среду, такую ​​как GNOME или KDE, но напрямую захожу с TTY (вроде /dev/tty1), я получаю пустое место $DISPLAY.
Франклин Ю
@Maythux Иногда номер экрана опускается, когда он равен 0. Мой GNOME дает :0для $DISPLAY.
Франклин Ю
10

Существующие ответы не соответствуют более широкой картине.

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

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

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

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

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

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

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

tripleee
источник
Мир действительно был заброшен вместе с Unity. Долгое время по умолчанию использовался lightdm, а не gdm, но, возможно, эта часть вашего ответа снова стала правильной, как это было до восхождения Unity! Я использую MATE, так что я не могу проверить тривиально ...
Zanna
Я запускал Linux с консоли (без окон), и это все объясняет. Имеет смысл: р
Жан-Франсуа Т.
3

С https://help.ubuntu.com/community/EnvironmentVariables :

Переменная-DISPLAY

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

:0.0
localhost:10.0
terminal01:0.0

Для чего это?

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

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

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

Pandya
источник
3

echo $ DISPLAY выведет: 0.0 на моем компьютере (на обоих мониторах). Что это значит?

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

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

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

Есть ли какие-либо статьи или учебники по этому вопросу?

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

Сообщество
источник