Linux переменная окружения display

Запуск X-приложенний в Linux

Если рассмотреть схему работы системы X Window немного подробнее. То сначала может показаться, что эта схема слишком запутана и сложна. Однако это лишь первое впечатление от нестандартного и универсального подхода к реализации принципов работы с видеодисплейными терминалами (вывода изображения на экран монитора) в сложных и распределённых системах UNIX и Linux. На самом деле такая концепция очень полезна. В первую очередь для системного администрирования. Она позволяет администраторам организовать удобную для себя программно-аппаратную среду для управления и контроля всей системы. Ведь система X Window основана на архитектуре клиент-серверного взаимодействия. Что делает её (X Window) очень податливой для централизации и масштабирования. А это в свою очередь прямо влияет на удобство администрирования и мониторинга систем и сетей (даже самых сложных), в которых используется X Window.

Распределённая схема запуска X-приложений

Изображение обрабатывается для вывода на дисплей (не путать с монитором) X-сервером на его стороне. Для этого используются данные от зарегистрированных клиентов, которые (и это очень важно) могут работать на отдельных компьютерах в системе/сети. В качестве данных клиентов используются результаты работы графических и библиотек элементов интерфейса (GUI). А также графических сред, установленных на стороне клиента.

Информация об обновлении дисплея X Window передаётся по сети от клиентов. К дисплею может быть подключено несколько мониторов — для каждого клиента свой. Для этого клиенту необходимо знать:

  • хост, на котором запущен X-сервер;
  • номер активного дисплея (управляется менеджером дисплеев);
  • номер монитора, привязанного к активному дисплею.

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

Переменная окружения DISPLAY

Каким образом X-приложение на стороне клиента «узнаёт», к какому X-серверу подключаться и какие дисплей и монитор использовать для вывода GUI? Для этого существует специальная переменная окружения DISPLAY. Она содержит информацию об IP-адресе X-сервера (или имя хоста) и номера дисплея и монитора (если мониторов несколько). Естественно, что в том случае, когда X-сервер и X-приложение работают на одном компьютере, то вся эта информация может быть опущена за исключением номера монитора. В качестве которого указывается значение «0», если он один.

Для задания параметров переменной DISPLAY на стороне клиента можно выполнить следующую команду:

Теперь клиент будет «знать», что для отображения его GUI нужно использовать монитор номер 2, дисплея номер 10, который поддерживается X-сервером, доступном по адресу hostname.domain.com. Просмотреть текущее значение переменной DISPLAY можно например так:

Однако следует помнить, что переменные окружения должны быть корректно заданы для каждого процесса, использующего X-сервер. Например, X-приложения, запущенные из одной командной оболочки и корректно работающие в системе X Window, могут не работать, будучи запущенными из другой. Если для этих оболочек переменная DISPLAY имеет разные значения.

Даже когда X-приложения работают через указанный X-сервер, то они могут отправлять в вывод клиентской командной оболочки (из которой были запущены) некоторую информацию по стандартным каналам ввода/вывода STDOUT и STDERR – в этом нет ничего необычного.

Разумеется, в имени хоста можно опускать название домена. Если клиент и сервер оба в него включены. Хотя это может зависеть от схемы распознавания доменных имён в конкретной сети. Ну и конечно стоит помнить о том, что если клиент и сервер работают на одном компьютере, то очень рекомендуется полностью исключать из переменной DISPLAY имя компьютера (вместо хоста как в случае с удалённым X-сервером). В этом случае будет задействован сокет UNIX вместо стандартного сетевого сокета TCP. Это очень полезно — ведь данный тип сокета более быстрый и эффективный, чем сокет сети. К тому же это позволяет избежать проблем с настройкой брандмауэров. Поскольку сокеты типа UNIX по-умолчанию не подлежат прослушиванию и блокировкам.

Авторизация клиентов

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

Читайте также:  Analyze this для windows

Самой распространённой моделью авторизации клиентов для X-сервера является использование куков (cookie). Которые представляют собой случайно генерируемые последовательности символов. Куки известны диспетчеру дисплеев, отвечающему за авторизацию. Клиент, предоставивший диспетчеру дисплеев такие куки воспринимается сервером как аутентифицированный. Сами куки сохраняются в файл

/.Xauthority на стороне клиента. Команда xauth позволяет просматривать куки сервера и добавлять их в файл

/.Xauthority. Когда X-приложение не может получить доступ к X-серверу по причине неудачной авторизации, может быть получен вывод примерно такого содержания:

Как видно, для X-приложения был отклонён доступ к X-серверу из-за отсутствия нужных куков. Но не стоит унывать, ведь сами куки можно получить, выполнив на стороне сервера:

В данном выводе получены куки для сокета UNIX, сетевого интерфейса Ethernet. А также для интерфейса с обратной связью localhost.

Далее, поскольку возможность копирования/вставки поддерживается командными оболочками. Чтобы добавить полученные куки в набор клиента нужно выполнить (на стороне клиента) следующую команду:

Теперь можно удостовериться, что куки были добавлены правильно. Т. е. попробовать запустить X-приложение на клиентской машине. В результате чего данные клиента должны быть отображены на сервере.

Как можно видеть, использование системы X Window позволяет легко выйти за рамки использования одного компьютера. Подобная концепция позволяет гибко масштабировать системы на основе UNIX\Linux не только в классическом представлении «командной строки», но и с использованием всех самых современных разработок и достижений для GUI.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Linux переменная окружения display

Библиотека сайта rus-linux.net


автор Guido Socher (homepage)

Guido любит Линукс не только из-за того, что ему интересно разбираться в том, как работают операционные системы, но так же из-за людей, которые участвуют в его создании

Перевод на Русский:
Вася Леушин

Содержание:

  • Общее понятие дисплея
  • Запуск удаленного приложения
  • Перенос дисплея на удаленный хост
  • OpenGL
  • Заключение
  • Ссылки
  • Страница отзывов

Запуск удаленных приложений в Х11

Многие пользователи при знакомстве с Линуксом думают, что его графический рабочий стол это просто еще одна » Windows» в которой можно запускать приложения в отдельных окнах. Некоторые, конечно, замечают, что можно иметь несколько рабочих столов, но все равно им кажется, что это Windows. X Window System (X11) это что-то гораздо большее! Это сетевая оконная система. Мы увидим, какие новые возможности она нам предлагает.

Общее понятие дисплея

Каждое графическое приложение X Window при запуске считывает переменную окружения DISPLAY, что бы выяснить на какой компьютерный экран посылать графические данные. Это, вместе с сетевыми возможностями системы X Window делает возможным удаленный запуск графических приложений. То есть вы используете ресурсы процессора одной машины при работе с приложением на другой. Весь GUI (графический интерфейс пользователя) появляется на той машине, с которой вы им управляете. Вы даже не замечаете, что используете два компьютера. Конечно, определенную роль здесь играет скорость передачи данных, но нормальной 10-мегабитной локальной сети вполне достаточно.

Для чего это вам?
Существует множество сетевых графических приложений. Компании используют их для управления оборудованием находящимся может быть за тысячи километров, и вы можете использовать такие же приложения так, как если бы они были на вашем компьютере.
Допустим, у вас есть два компьютера: одна быстрая гигагерцевая машина и еще старенький Pentium-133 — вы вполне сможете оценить скорость вашей новой машины, даже не садясь за нее. Возможно, ваша сестра заняла быстрый компьютер — но вы все равно пользуете его.
Как это работает?
Все приложения X Window (такие как например Gimp, Xterm, Konquerer, Netscape и т. д.) в действительности являются сетевыми клиентами, которые присоединяются к X-серверу. В задачу X-сервера входят: взаимодействие с графическим аппаратным обеспечением, рисование картинок на вашем экране, считывание данных с мышки и клавиатуры. Программы-клиенты (gimp, netscape) посылают серверу указания о том, как рисовать рамки и кнопки. Взамен они принимают от сервера команды с мышки и клавиатуры. Само собой разумеется, что потребуется аутентификация, иначе кто угодно может испортить чей-нибудь экран. Существуют две программы для управления доступом:
— xhost: используя эту программу, вы можете допустить любого пользователя с определенной машины передавать графику на ваш дисплей. Например: Вы работаете на машине с именем philosophus. Что бы дать доступ на ваш дисплей любой программе с хоста movietux вам нужно набрать команду:

Читайте также:  Nvcuda dll windows 10 64 bit

xhost +movietux
Это должно быть набрано в оболочке philosophus’а

— xauth: Это более сложная программа, основанная на cookie. С ее помощью вы можете предоставлять доступ определенным пользователям, тем самым эта программа обладает более высоким уровнем безопасности, чем xhost. Аутентификация использует cookie из файла .Xauthority в домашней директории пользователя. Доступ дается только если удаленная машина содержит нужный cookie в этом файле. Что бы скопировать этот cookie с вашей машины (philosophus) на хост с которого вы хотите запускать программу (movietux), вы можете использовать один из следующих методов:

xauth extract — philosophus:0.0 | ssh movietux /usr/X11R6/bin/xauth merge
или
scp

При запуске программы-клиента происходит следующее:

  1. Клиент проверяет переменную DISPLAY для поиска сервера или пытается подключиться к серверу на локальном хосте.
  2. Сервер проверяет, имеет ли клиент допуск к передаче «картинок» к нему. Если имеет — тогда сервер рисует графику.

Переменная окружения DISPLAY имеет следующий синтаксис:

bash:export DISPLAY=hostname:displaynumber.screennumber
tcsh:setenv DISPLAY hostname:displaynumber.screennumber

Я не буду говорить о displaynumber и screennumber, обычно это 0.0. Вот пример для bash:

Запуск удаленного приложения

Перенос дисплея на удаленный хост

# перенос дисплея на удаленный логин:
# поместить его в свой файл

/.login
set whoami=`who -ml`
set remhost=`expr «$whoami» : ‘.*(\(.*\))’`
if ( «$remhost» != «» ) then
setenv DISPLAY «$remhost»:0.0
endif

этот скрипт получает имя удаленного хоста из команды «who -ml». Команда возвращает что-то вроде

>who -ml
movietux!guido pts/3 Oct 26 21:55 (philosophus.tux.org)

если вы используете bash вам нужен такой скрипт:

# перенос дисплея на удаленный логин:
# поместить его в свой файл

/.bash_profile
whoami=`who -ml`
remhost=`expr «$whoami» : ‘.*(\(.*\))’`
if [ -n «$remhost» ]; then
DISPLAY=»$remhost»:0.0
export DISPLAY
fi

Источник

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

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

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

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

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

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

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

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

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

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

hostname — это имя компьютера, на котором работает X-сервер. Опущенное имя хоста означает localhost.

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

S — номер экрана. Дисплей может иметь несколько экранов. Обычно есть только один экран, хотя по умолчанию 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.

Читайте также:  Как отформатировать ssd диск под windows 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 без каких-либо мониторов, просто сопоставьте графический интерфейс с областью памяти для любых целей).

Источник

Оцените статью