Що таке змінна середовище $ DISPLAY?


74

Я новачок в сценарії оболонок. Я не розумію, що таке $DISPLAYекологічна змінна.

У мене є Ubuntu 13.10 і я використовую /bin/bashshell. У мене є два монітори.

Запитання:

  1. Команда echo $DISPLAYбуде надрукована :0.0на моїй машині (на обох моніторах). Що це значить?

  2. У яких випадках $DISPLAYзмінна буде порожньою або NULL?

  3. Чи є статті з цього приводу?


Сьогодні echo $DISPLAYдрукує :0НЕ:0.0
Чандрая ГК

перевірити це допоможе у випадку пропусків або помилок: askubuntu.com/questions/432610/…
Maythux

Відповіді:


86

Чарівне слово у віконній системі 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 еквівалентний хосту / unix: DS, де хост - локальне ім'я хоста.

: 0,0 означає, що ми говоримо про перший екран, прикріплений до вашого першого екрану у вашому локальному хості

Детальніше читайте тут і тут і тут .

З чоловічої сторінки X (7):

З точки зору користувача, кожен X-сервер має відображуване ім'я форми:

ім'я хоста: displaynumber.screennumber

Ця інформація використовується програмою для визначення способу підключення до сервера та якого екрана він повинен використовувати за замовчуванням (на дисплеях з декількома моніторами):

ім'я хоста Ім'я хоста вказує ім'я машини, до якої відображається фізичний дисплей. Якщо ім'я хоста не вказано, буде використаний найефективніший спосіб спілкування з сервером на одній машині. displaynumber Фраза "display" зазвичай використовується для позначення колекції моніторів, які мають загальну клавіатуру та вказівник (миша, планшет тощо). Більшість робочих станцій мають лише одну клавіатуру, а отже, лише одну дисплей. Однак більші, багатокористувацькі системи часто мають кілька дисплеїв, так що більше однієї людини можуть робити графічну роботу одночасно. Щоб уникнути плутанини, кожному дисплею на машині присвоюється номер відображення (починаючи з 0) при запуску сервера X для цього дисплея. Номер дисплея завжди повинен бути вказаний у назві дисплея. екранне число Деякі екрани поділяють одну клавіатуру та вказівник серед двох або більше моніторів. Оскільки у кожного монітора є власний набір вікон, кожному екрану присвоюється номер екрана (починаючи з 0), коли запускається X-сервер для цього дисплея. Якщо номер екрана не вказаний, буде використаний екран 0.


Коли цей $ DISPLAY буде нульовим або BLANK.
Чандрая ГК

У звичайному випадку цього не повинно відбуватися, якщо на дисплеї не з’явиться проблема. Здебільшого перезапуск диспетчера дисплеїв вирішить проблему. Але це не дія за замовчуванням.
Maythux


@ChandrayyaGK Наприклад, коли я не використовую будь-яке середовище робочого столу, наприклад GNOME або KDE, але безпосередньо входжу в систему за допомогою TTY (як /dev/tty1), я отримав порожнє поле $DISPLAY.
Франклін Ю

@Maythux Іноді номер екрану , здається, буде опущено , коли бути 0. Мій GNOME дає :0для $DISPLAY.
Франклін Ю

10

Існуючі відповіді не вдається вирішити більш широку картину.

Якщо ви не використовуєте графічне середовище (тобто ви входите на системну консоль без вікон тощо; або ви входите віддалено з текстового терміналу через SSH або подібне, наприклад, з комп'ютера з Windows під управлінням PuTTY), не задіяний графічний інтерфейс, і DISPLAYвін зазвичай не налаштований. Вашим єдиним засобом спілкування з комп’ютером є командний рядок (хоча ви можете знати способи переходу в сеанс GUI, якщо ви знаєте, як).

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

Традиційно GUI на комп'ютері 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 без будь-яких моніторів, просто зіставивши графічний інтерфейс користувача в область пам'яті з будь-якою метою).


Мір справді був покинутий разом з Єдністю. Тривалий час lightdm, а не gdm, був за замовчуванням, але, можливо, ця частина вашої відповіді знову стала правильною, як це було до сходження Unity! Я використовую MATE, тому не можу перевірити тривіально ...
Zanna

Я працював Linux з консолі (без вікон), і це все пояснює. Має насправді сенс: p
Жан-Франсуа Т.

3

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

Змінна - ДИСПЛЕЙ

Приклад цінностей:

:0.0
localhost:10.0
terminal01:0.0

Для чого це?

Ця змінна використовується для вказівки графічним програмам, де відображати власне графічний інтерфейс користувача, значення складається з 3 частин: ім'я хоста з двокрапкою (:), номер дисплея з крапкою (.) Та екран число.

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

Хоча номер екрана використовується для вибору серед декількох фізичних екранів, якими керує один і той же X-сервер, його в даний час рідко встановлюють нічого іншого, крім "0". Ручне встановлення значення змінної середовища "DISPLAY" в даний час рідко потрібне, оскільки воно може автоматично та інтелектуально коригуватися багатьма програмами, такими як "GDM" та "SSH", коли це необхідно.


3

echo $ DISPLAY надрукує: 0,0 на моїй машині (на обох моніторах). Що це означає?

: 0,0 означає номер дисплея 0 та номер екрану 0

У якому випадку $ DISPLAY буде порожнім або NULL?

У разі помилки у вашому $ DISPLAY, і це не відбувається нормально

Чи є статті з цього приводу?

Деякі навчальні посібники та ресурс можна знайти тут:

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.