Co to jest zmienna środowiskowa $ DISPLAY?

74

Jestem nowy w skryptowaniu powłoki. Nie rozumiem, co to $DISPLAYjest zmienna środowiskowa.

Mam Ubuntu 13.10 i używam /bin/bashpowłoki. Mam dwa monitory.

Pytania:

  1. Polecenie echo $DISPLAYwydrukuje się :0.0na moim komputerze (na obu monitorach). Co to znaczy?

  2. W jakich przypadkach $DISPLAYzmienna będzie pusta lub NULL?

  3. Czy są na ten temat jakieś artykuły lub samouczki?

Chandrayya GK
źródło
Dzisiaj echo $DISPLAYdrukuje się :0NIE:0.0
Chandrayya GK
zaznacz, że to pomoże w przypadku pustych miejsc lub błędów: askubuntu.com/questions/432610/…
Maythux,

Odpowiedzi:

86

Magiczne słowo w systemie X Window to DISPLAY. Wyświetlacz składa się (uproszczony) z:

  • klawiatura,
  • Mysz
  • i ekran.

Wyświetlaniem zarządza program serwera, znany jako serwer X. Serwer umożliwia wyświetlanie możliwości innym łączącym się z nim programom.

Serwer zdalny wie, gdzie musi przekierować ruch sieciowy X poprzez definicję zmiennej środowiskowej DISPLAY, która ogólnie wskazuje na serwer X Display znajdujący się na twoim komputerze lokalnym.

Wartość zmiennej środowiskowej wyświetlania wynosi:

hostname:D.S

gdzie:

nazwa hosta to nazwa komputera, na którym działa serwer X. Pominięta nazwa hosta oznacza localhost.

D jest numerem kolejnym (zwykle 0). Można to zmienić, jeśli do jednego komputera podłączonych jest wiele wyświetlaczy.

S to numer ekranowy. Wyświetlacz może mieć wiele ekranów. Zwykle jest tylko jeden ekran, gdzie domyślnym jest 0.

Przykład wartości

localhost:4
google.com:0
:0.0

hostname:D.Soznacza ekran S na wyświetlaczu D nazwy hosta; serwer X dla tego wyświetlacza nasłuchuje na porcie TCP 6000 + D.

host/unix:D.Soznacza ekran S na wyświetlaczu D hosta; serwer X dla tego wyświetlacza nasłuchuje w gnieździe domeny UNIX /tmp/.X11-unix/XD (więc jest dostępny tylko z hosta).

:D.S jest równoważne hostowi / unix: DS, gdzie host jest lokalną nazwą hosta.

: 0.0 oznacza, że ​​mówimy o pierwszym ekranie dołączonym do pierwszego wyświetlacza w lokalnym hoście

Czytaj więcej tutaj i tutaj i tutaj .

Ze strony podręcznika X (7):

Z punktu widzenia użytkownika każdy serwer X ma wyświetlaną nazwę postaci:

nazwa hosta: displaynumber.screennumber

Informacje te są wykorzystywane przez aplikację do ustalenia, w jaki sposób powinien się połączyć z serwerem i którego ekranu powinien używać domyślnie (na wyświetlaczach z wieloma monitorami):

nazwa hosta Nazwa hosta określa nazwę komputera, z którym wyświetlacz jest fizycznie podłączony. Jeśli nazwa hosta nie zostanie podana, zostanie użyty najbardziej wydajny sposób komunikacji z serwerem na tym samym komputerze. displaynumber Wyrażenie „display” jest zwykle używane w odniesieniu do kolekcji monitorów, które mają wspólną klawiaturę i wskaźnik (mysz, tablet itp.). Większość stacji roboczych ma zwykle tylko jedną klawiaturę, a zatem tylko jeden ekran. Większe systemy z wieloma użytkownikami często mają jednak kilka wyświetlaczy, dzięki czemu więcej niż jedna osoba może wykonywać prace graficzne jednocześnie. Aby uniknąć nieporozumień, każdemu wyświetlaczowi na maszynie przypisany jest numer wyświetlacza (zaczynający się od 0) po uruchomieniu serwera X dla tego wyświetlacza. Wyświetlany numer musi zawsze być podany w nazwie wyświetlanej. screennumber Niektóre wyświetlacze mają tę samą klawiaturę i wskaźnik na dwóch lub więcej monitorach. Ponieważ każdy monitor ma swój własny zestaw okien, każdemu ekranowi przypisany jest numer ekranu (zaczynający się od 0) po uruchomieniu serwera X dla tego ekranu. Jeśli numer ekranu nie zostanie podany, zostanie użyty ekran 0.

Maythux
źródło
Kiedy ten $ DISPLAY będzie pusty lub PUSTY.
Chandrayya GK
Normalnie Nie może się to zdarzyć, chyba że wystąpi problem z wyświetlaczem. Przeważnie ponowne uruchomienie menedżera ekranu rozwiąże problem. Ale to nie jest akcja domyślna.
Maythux,
@ChandrayyaGK Na przykład, gdy nie używam żadnego środowiska graficznego, takiego jak GNOME lub KDE, ale loguję się bezpośrednio za pomocą TTY (jak /dev/tty1), mam puste pole $DISPLAY.
Franklin Yu,
@Maythux Czasami liczba ekran wydaje się być pominięty, gdy będąc 0. Mój GNOME daje :0za $DISPLAY.
Franklin Yu,
10

Istniejące odpowiedzi nie odnoszą się do szerszego obrazu.

Jeśli nie korzystasz ze środowiska graficznego (tj. Logujesz się na konsoli systemowej bez systemu Windows itp. Lub logujesz się zdalnie z terminala tekstowego za pośrednictwem SSH lub podobnego, na przykład z komputera z systemem Windows z uruchomionym programem PuTTY), GUI nie jest zaangażowane i DISPLAYzwykle nie jest ustawione. Jedynym sposobem komunikowania się z komputerem jest linia poleceń (choć mogą istnieć sposoby przestawienia się na sesję GUI, jeśli wiesz jak).

Jeśli logujesz się na konsoli za pomocą interfejsu graficznego (w systemie Ubuntu, zwykle używany jest moduł powitalny GDM) lub używasz terminala graficznego (na przykład z komputera z systemem Windows z uruchomionym oprogramowaniem eXceed lub mobaX lub z oprogramowania zdalnego pulpitu, takiego jak klient VNC), DISPLAYZmienna jest konfigurowana przez program, który zarządza sesją graficzną w celu wskazania klientom graficznym, z którymi urządzeniami We / Wy się połączyć.

Tradycyjnie w GUI na komputerze Ubuntu działała X.org, implementacja X11, choć ostatnio firma Canonical wprowadziła zmodernizowany zamiennik o nazwie Mir; a jeszcze bardziej wierzę, że Mir zostanie porzucony na rzecz innego projektu o zasadniczo podobnych celach, zwanego Wayland . Zamienniki te mają na celu zmniejszenie złożoności pełnego stosu X11, do którego tutaj nie będziemy wchodzić - są zgodne z tą samą DISPLAYkonwencją, o której przecież mówimy tutaj.

Na X11 hostem DISPLAYmoże być serwer zdalny, a komputer Ubuntu byłby używany jako „terminal graficzny” do uzyskiwania dostępu do plików i programów na tym serwerze zdalnym (w takim przypadku komputer jest „serwerem” obsługującym klawiaturę , mysz i jedno lub więcej urządzeń wyświetlających do programów „klienckich” działających na zdalnym ... serwerze). Częściej serwer X11 (lub Mir lub Wayland) i programy klienckie (menedżer pulpitu i różne klienty graficzne, takie jak przeglądarka internetowa, klient poczty e-mail, program kalendarza itp.) Działają na komputerze. Wskazuje na to część „serwerowa” DISPLAYwartości, która w tym ostatnim przypadku jest zazwyczaj pusta (co implikuje wartość domyślną localhost).

Serwer X11 może uruchamiać jedną lub więcej sesji graficznych - na przykład logowanie do konsoli i zdalna sesja VNC mogą być uruchomione w tym samym czasie. W takim przypadku (jeśli są zarządzane przez tę samą instancję serwera X11), masz więcej niż jeden „ekran” w kategoriach X11. W praktyce jedna sesja (jedno zdarzenie logowania i instancja pulpitu spawnowana z tego) to jeden ekran w X11.

Jeden taki wyświetlacz może mieć jeden lub więcej ekranów. Tradycyjnie oznaczało to jeden monitor, chociaż oryginalna architektura miała pewne niefortunne cechy, takie jak niemożność przeniesienia okna z jednego ekranu na drugi. Dodatki, takie jak Xinerama i Xrandr, jeszcze bardziej zawiedli sytuację do tego stopnia, że ​​jeden ekran często łączy wiele monitorów na różne sposoby.

Jeśli grałeś na systemach z wieloma monitorami, prawdopodobnie odkryłeś, że możesz rozmieszczać monitory na różne sposoby i otrzymać prostokątny obszar, w którym monitory wyświetlają niektóre jego części, a inne nie są przypisane do żadnego monitora. Jest to „ekran”, który tworzy X11, a jeśli masz więcej niż jedną kartę graficzną, możesz mieć wiele z tych ekranów, z których każdy jest przypisany do jednego lub więcej monitorów (lub teoretycznie działa bez monitora; Xvfb wykorzystuje to, aby umożliwić możesz uruchomić X11 bez żadnych monitorów, po prostu mapując GUI do regionu pamięci dla dowolnego celu).

potrójny
źródło
Mir został rzeczywiście porzucony wraz z Jednością. Przez długi czas domyślne było lightdm zamiast gdm, ale może ta część twojej odpowiedzi znów stała się poprawna, tak jak przed wejściem Unity! Używam MATE, więc nie mogę trywialnie sprawdzić ...
Zanna
Korzystałem z systemu Linux z konsoli (bez systemu Windows) i to wszystko wyjaśnia. Ma sens: p
Jean-Francois T.
3

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

Zmienna - WYŚWIETLACZ

Przykład wartości:

:0.0
localhost:10.0
terminal01:0.0

Po co to jest?

Ta zmienna służy do wskazywania aplikacjom graficznym, w którym ma zostać wyświetlony rzeczywisty graficzny interfejs użytkownika, wartość składa się z 3 części: nazwy hosta, dwukropka (:), numeru wyświetlacza, a następnie kropki (.) I ekranu numer.

Części nazwy hosta można użyć do wysłania graficznego wyniku do zdalnego komputera przez sieć. Można go pominąć, gdy dane wyjściowe są przeznaczone dla serwera X działającego na komputerze lokalnym. Wyświetlany numer pozwala wybrać spośród wielu serwerów X działających na tym samym komputerze (Ubuntu używa wielu serwerów X, aby umożliwić wiele sesji pulpitu graficznego).

Chociaż numer ekranu jest używany do wybierania spośród wielu fizycznych ekranów zarządzanych przez ten sam serwer X, obecnie rzadko jest ustawiony na cokolwiek innego niż „0”. Ręczne ustawianie wartości zmiennej środowiskowej „DISPLAY” jest obecnie rzadko potrzebne, ponieważ w razie potrzeby może być automatycznie i inteligentnie dostosowywane przez wiele aplikacji, takich jak „GDM” i „SSH”.

Pandya
źródło
3

echo $ DISPLAY wydrukuje: 0,0 na moim komputerze (na obu monitorach). Co to znaczy?

: 0,0 oznacza wyświetlaną liczbę 0 i numer ekranu 0

W takim przypadku $ DISPLAY będzie pusty lub NULL?

W przypadku błędu w Twoim WYŚWIETLACZU i to nie dzieje się normalnie

Czy są na ten temat jakieś artykuły lub samouczki?

Niektóre samouczki i zasoby można znaleźć tutaj:

Społeczność
źródło