Was ist die Umgebungsvariable $ DISPLAY?

75

Ich bin neu in der Shell-Skripterstellung. Ich verstehe nicht, was die $DISPLAYUmgebungsvariable ist.

Ich habe Ubuntu 13.10 und benutze die /bin/bashShell. Ich habe zwei Monitore.

Fragen:

  1. Der Befehl echo $DISPLAYwird :0.0auf meinem Computer gedruckt (auf beiden Monitoren). Was bedeutet das?

  2. In welchen Fällen ist die $DISPLAYVariable leer oder NULL?

  3. Gibt es dazu Artikel oder Tutorials?

Chandrayya GK
quelle
Heute echo $DISPLAYwird :0NICHT gedruckt:0.0
Chandrayya GK
Überprüfen Sie dies im Falle von Leerzeichen oder Fehlern: askubuntu.com/questions/432610/…
Maythux

Antworten:

86

Das Zauberwort im X-Window-System ist DISPLAY. Eine Anzeige besteht (vereinfacht) aus:

  • eine Tastatur,
  • eine Maus
  • und ein Bildschirm.

Eine Anzeige wird von einem Serverprogramm verwaltet, das als X-Server bezeichnet wird. Der Server dient zum Anzeigen von Funktionen für andere Programme, die eine Verbindung zu ihm herstellen.

Der Remote-Server weiß über die Definition der Umgebungsvariablen DISPLAY, die in der Regel auf einen X-Display-Server verweist, der sich auf Ihrem lokalen Computer befindet, wo er den X-Netzwerkverkehr umleiten muss.

Der Wert der Anzeigeumgebungsvariablen ist:

hostname:D.S

wo:

Hostname ist der Name des Computers, auf dem der X-Server ausgeführt wird. Ein weggelassener Hostname bedeutet den localhost.

D ist eine Sequenznummer (normalerweise 0). Sie kann variiert werden, wenn mehrere Displays an einen Computer angeschlossen sind.

S ist die Bildschirmnummer. Eine Anzeige kann tatsächlich mehrere Bildschirme haben. Normalerweise gibt es nur einen Bildschirm, wobei 0 der Standard ist.

Beispiel für Werte

localhost:4
google.com:0
:0.0

hostname:D.Sbedeutet Bildschirm S auf Anzeige D von Host Hostname; Der X-Server für diese Anzeige überwacht den TCP-Port 6000 + D.

host/unix:D.Sbedeutet Bildschirm S auf der Anzeige D von Host Host; Der X-Server für diese Anzeige überwacht den UNIX-Domain-Socket /tmp/.X11-unix/XD (ist also nur vom Host aus erreichbar).

:D.S ist äquivalent zu host / unix: DS, wobei host der lokale Hostname ist.

: 0.0 bedeutet, dass es sich um den ersten Bildschirm handelt, der an Ihre erste Anzeige in Ihrem lokalen Host angehängt ist

Lesen Sie hier und hier und hier mehr .

Aus einer X (7) -Manpage:

Aus Sicht des Benutzers hat jeder X-Server einen Anzeigenamen der Form:

Hostname: displaynumber.screennumber

Diese Informationen werden von der Anwendung verwendet, um zu bestimmen, wie eine Verbindung zum Server hergestellt werden soll und welchen Bildschirm sie standardmäßig verwenden soll (bei Anzeigen mit mehreren Monitoren):

Hostname Der Hostname gibt den Namen des Computers an, mit dem die Anzeige physisch verbunden ist. Wenn der Hostname nicht angegeben wird, wird die effizienteste Art der Kommunikation mit einem Server auf demselben Computer verwendet. displaynumber Der Ausdruck "display" bezieht sich normalerweise auf eine Sammlung von Monitoren, die eine gemeinsame Tastatur und einen gemeinsamen Zeiger haben (Maus, Tablet usw.). Die meisten Workstations verfügen in der Regel nur über eine Tastatur und daher nur über ein Display. Größere Mehrbenutzersysteme verfügen jedoch häufig über mehrere Bildschirme, sodass mehr als eine Person gleichzeitig Grafikarbeiten ausführen kann. Um Verwechslungen zu vermeiden, wird jeder Anzeige auf einem Computer eine Anzeigenummer (beginnend mit 0) zugewiesen, wenn der X-Server für diese Anzeige gestartet wird. Die Anzeigenummer muss immer in einem Anzeigenamen angegeben werden. Bildschirmnummer Einige Bildschirme teilen sich eine Tastatur und einen Zeiger auf zwei oder mehr Bildschirmen. Da jeder Monitor seine eigenen Fenster hat, wird jedem Bildschirm eine Bildschirmnummer (beginnend mit 0) zugewiesen, wenn der X-Server für diesen Bildschirm gestartet wird. Wenn die Bildschirmnummer nicht angegeben wird, wird Bildschirm 0 verwendet.

Maythux
quelle
Wenn dieses $ DISPLAY NULL oder BLANK ist.
Chandrayya GK
Im Normalfall Dies darf nur geschehen, wenn ein Problem in Ihrem Display vorliegt. Meistens wird das Problem durch einen Neustart Ihres Display-Managers behoben. Dies ist jedoch keine Standardaktion.
Maythux
@ChandrayyaGK Wenn ich zum Beispiel keine Desktop-Umgebung wie GNOME oder KDE verwende, sondern mich direkt mit TTY (wie /dev/tty1) anmelde, erhalte ich das Leerzeichen $DISPLAY.
Franklin Yu
@ Maythux Manchmal scheint die Bildschirmnummer weggelassen zu werden, wenn sie 0 ist. Mein GNOME gibt :0für an $DISPLAY.
Franklin Yu
10

Die vorhandenen Antworten gehen nicht auf das Gesamtbild ein.

Wenn Sie keine grafische Umgebung verwenden (dh Sie melden sich an der Systemkonsole ohne Fenster usw. an oder Sie melden sich remote von einem Nur-Text-Terminal über SSH oder ähnlichem an, z. B. von einem Windows-Computer, auf dem PuTTY ausgeführt wird) Es ist keine grafische Benutzeroberfläche beteiligt und DISPLAYwird normalerweise deaktiviert. Die einzige Möglichkeit, mit dem Computer zu kommunizieren, ist die Befehlszeile (wenn Sie wissen, wie Sie in eine GUI-Sitzung wechseln können).

Wenn Sie sich an der Konsole mit einer grafischen Oberfläche anmelden (unter Ubuntu wird normalerweise der GDM-Begrüßer verwendet) oder ein grafisches Terminal verwenden (z. B. von einem Windows-Computer mit eXceed oder mobaX oder einer Remotedesktopsoftware wie einem VNC-Client) DISPLAYDie Variable wird von dem Programm eingerichtet, das Ihre grafische Sitzung verwaltet, um grafischen Clients anzuzeigen, mit welchen E / A-Geräten eine Verbindung hergestellt werden soll.

Traditionell lief auf der GUI eines Ubuntu-Computers X.org, eine X11-Implementierung. In jüngerer Zeit wurde jedoch von Canonical ein modernisierter Ersatz namens Mir eingeführt. und ich glaube, dass Mir in letzter Zeit zugunsten eines anderen Projekts mit im Großen und Ganzen ähnlichen Zielen, Wayland, aufgegeben wird . Diese Ersetzungen sollen die Komplexität eines vollständigen X11-Stacks verringern, auf den wir hier nicht näher eingehen werden. Sie halten sich an dieselbe DISPLAYKonvention, die wir schließlich hier diskutieren.

Unter X11 könnte der Host-Teil DISPLAYein Remote-Server sein, und Sie würden Ihren Ubuntu-Computer als "grafisches Terminal" verwenden, um auf Dateien und Programme auf diesem Remote-Server zuzugreifen (in diesem Fall ist Ihr Computer der "Server", der eine Tastatur bedient) , eine Maus und ein oder mehrere Anzeigegeräte für "Client" -Programme, die auf dem fernen ... Server ausgeführt werden). In der Regel werden der X11-Server (oder Mir- oder Wayland-Server) und die Client-Programme (ein Desktop-Manager und verschiedene grafische Clients wie ein Webbrowser, ein E-Mail-Client, ein Kalenderprogramm usw.) auf Ihrem Computer ausgeführt. Dies wird durch den "Server" -Teil des DISPLAYWerts angezeigt , der im letzteren Fall normalerweise leer ist (was den Standardwert impliziert localhost).

Auf einem X11-Server können eine oder mehrere grafische Sitzungen ausgeführt werden. Beispielsweise können Ihre Konsolenanmeldung und eine Remote-VNC-Sitzung gleichzeitig ausgeführt werden. In diesem Fall (wenn sie von derselben X11-Serverinstanz verwaltet werden) haben Sie mehr als eine "Anzeige" in X11-Begriffen. In der Praxis entspricht eine Sitzung (ein Anmeldeereignis und die daraus hervorgehende Desktop-Instanz) einer Anzeige in X11.

Eine solche Anzeige kann einen oder mehrere Bildschirme haben. Traditionell bedeutete dies einen Monitor, obwohl die ursprüngliche Architektur einige unglückliche Eigenschaften aufwies, wie die Unfähigkeit, ein Fenster von einem Bildschirm auf einen anderen zu verschieben. Add-Ons wie Xinerama und Xrandr trübten die Situation bis zu dem Punkt, an dem ein Bildschirm häufig mehrere Monitore auf verschiedene Weise miteinander verbindet.

Wenn Sie mit Systemen mit mehreren Monitoren gespielt haben, haben Sie wahrscheinlich festgestellt, dass Sie Monitore auf verschiedene Weise anordnen können und einen rechteckigen Bereich erhalten, in dem einige Teile der Monitore angezeigt werden und andere Teile keinem Monitor zugewiesen sind. Dies ist der "Bildschirm", den X11 erstellt. Wenn Sie über mehr als eine Grafikkarte verfügen, können Sie mehrere dieser Bildschirme einem oder mehreren Monitoren zuweisen (oder theoretisch ohne Monitor ausführen; Xvfb nutzt dies aus, um dies zu ermöglichen Sie können X11 ohne Monitore ausführen, indem Sie die GUI einfach einem Speicherbereich zuordnen (für welchen Zweck auch immer).

Tripleee
quelle
Mir wurde in der Tat zusammen mit Unity verlassen. Für lange Zeit war LightDM anstelle von GDM die Standardeinstellung, aber vielleicht ist dieser Teil Ihrer Antwort wieder korrekt, wie vor dem Aufstieg von Unity! Ich benutze MATE, also kann ich nicht trivial nachsehen ...
Zanna
Ich habe Linux von der Konsole aus (ohne Windows) ausgeführt und das erklärt alles. Macht eigentlich Sinn: p
Jean-Francois T.
3

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

Variable-DISPLAY

Werte Beispiel:

:0.0
localhost:10.0
terminal01:0.0

Wofür ist es?

Diese Variable wird verwendet, um grafischen Anwendungen anzuzeigen, in denen die tatsächliche grafische Benutzeroberfläche angezeigt werden soll. Der Wert besteht aus drei Teilen: Einem Hostnamen, gefolgt von einem Doppelpunkt (:), einer Anzeigenummer, gefolgt von einem Punkt (.) Und einem Bildschirm Nummer.

Der Host-Name-Teil kann verwendet werden, um die grafische Ausgabe über das Netzwerk an einen Remote-Computer zu senden. Sie kann weggelassen werden, wenn die Ausgabe für einen X-Server bestimmt ist, der auf dem lokalen Computer ausgeführt wird. Die angezeigte Nummer ermöglicht die Auswahl zwischen mehreren X-Servern, die auf demselben Computer ausgeführt werden (Ubuntu verwendet mehrere X-Server, um mehrere grafische Desktopsitzungen zu ermöglichen).

Obwohl die Bildschirmnummer zur Auswahl mehrerer physischer Bildschirme verwendet wird, die von demselben X-Server verwaltet werden, wird sie heutzutage selten auf einen anderen Wert als "0" festgelegt. Das manuelle Einstellen des Werts der Umgebungsvariablen "DISPLAY" ist heutzutage selten erforderlich, da er bei Bedarf von vielen Anwendungen wie "GDM" und "SSH" automatisch und intelligent angepasst werden kann.

Pandya
quelle
3

echo $ DISPLAY druckt: 0.0 auf meinem Computer (auf beiden Monitoren). Was bedeutet das?

: 0.0 bedeutet Anzeigenummer 0 und Bildschirmnummer 0

In welchem ​​Fall ist $ DISPLAY leer oder NULL?

Im Falle eines Fehlers in Ihrem $ DISPLAY passiert dies normalerweise nicht

Gibt es dazu Artikel oder Tutorials?

Einige Tutorials und Ressourcen finden Sie hier:

Gemeinschaft
quelle