Quelle est la variable d'environnement $ DISPLAY?

75

Je suis nouveau dans les scripts shell. Je ne comprends pas quelle est la $DISPLAYvariable environnementale.

J'ai Ubuntu 13.10 et j'utilise un /bin/bashshell. J'ai deux moniteurs.

Des questions:

  1. La commande echo $DISPLAYimprimera :0.0sur ma machine (sur les deux moniteurs). Qu'est-ce que ça veut dire?

  2. Dans quels cas la $DISPLAYvariable sera vide ou NULL?

  3. Existe-t-il des articles ou des tutoriels à ce sujet?

Chandrayya GK
la source
Aujourd'hui, nous echo $DISPLAYn'imprimons :0PAS:0.0
Chandrayya GK
vérifiez que cela aidera en cas de blanc ou d'erreur: askubuntu.com/questions/432610/…
Maythux

Réponses:

86

Le mot magique dans le système de fenêtre X est DISPLAY. Un affichage consiste en (simplifié) de:

  • un clavier,
  • une souris
  • et un écran.

Un affichage est géré par un programme serveur, appelé serveur X. Le serveur offre des fonctionnalités d'affichage aux autres programmes qui s'y connectent.

Le serveur distant sait où il doit rediriger le trafic réseau X via la définition de la variable d'environnement DISPLAY qui pointe généralement vers un serveur X Display situé sur votre ordinateur local.

La valeur de la variable d'environnement d'affichage est:

hostname:D.S

où:

nomhôte est le nom de l'ordinateur sur lequel le serveur X s'exécute. Un nom d'hôte omis signifie l'hôte local.

D est un numéro de séquence (généralement 0). Cela peut varier si plusieurs écrans sont connectés à un ordinateur.

S est le numéro d'écran. Un affichage peut en réalité avoir plusieurs écrans. Habituellement, il n'y a qu'un seul écran, 0 étant la valeur par défaut.

Exemple de valeurs

localhost:4
google.com:0
:0.0

hostname:D.Ssignifie l'écran S sur l'affichage D du nom d'hôte de l'hôte; le serveur X pour cet affichage écoute sur le port TCP 6000 + D.

host/unix:D.Ssignifie l'écran S sur l'affichage D de l'hôte hôte; le serveur X pour cet affichage est à l'écoute sur le socket de domaine UNIX /tmp/.X11-unix/XD (il n'est donc accessible que depuis l'hôte).

:D.S est équivalent à host / unix: DS, où host est le nom d’hôte local.

: 0.0 signifie que nous parlons du premier écran attaché à votre premier affichage dans votre hôte local

Lisez plus ici et ici et ici .

À partir d'une page de manuel X (7):

Du point de vue de l'utilisateur, chaque serveur X a un nom d'affichage du formulaire:

nomhôte: displaynumber.screennumber

Ces informations sont utilisées par l'application pour déterminer le mode de connexion au serveur et le type d'écran à utiliser par défaut (sur les écrans dotés de plusieurs moniteurs):

nomhôte Le nomhôte spécifie le nom de la machine à laquelle l'écran est physiquement connecté. Si le nom d'hôte n'est pas indiqué, le moyen le plus efficace de communiquer avec un serveur de la même machine sera utilisé. displaynumber La phrase "display" est généralement utilisée pour désigner une collection de moniteurs partageant un clavier et un pointeur communs (souris, tablette, etc.). La plupart des postes de travail ont généralement un seul clavier et, par conséquent, un seul écran. Toutefois, les systèmes multi-utilisateurs plus grands disposent souvent de plusieurs écrans, ce qui permet à plusieurs personnes de travailler simultanément sur les graphiques. Pour éviter toute confusion, un numéro d’affichage (commençant à 0) est attribué à chaque écran d’une machine au démarrage du serveur X pour cet écran. Le numéro d'affichage doit toujours être indiqué dans un nom d'affichage. numéro d'écran Certains écrans partagent un seul clavier et un seul pointeur entre deux ou plusieurs moniteurs. Étant donné que chaque moniteur dispose de son propre ensemble de fenêtres, un numéro d’écran (commençant à 0) est attribué à chaque écran au démarrage du serveur X pour cet affichage. Si le numéro d'écran n'est pas fourni, l'écran 0 sera utilisé.

Maythux
la source
Quand ce $ DISPLAY sera nul ou vierge.
Chandrayya GK
En mode normal Cela ne doit pas se produire sauf en cas de problème sur votre écran. Le redémarrage de votre gestionnaire d'affichage résoudra généralement le problème. Mais ce n'est pas une action par défaut.
Maythux
@ChandrayyaGK Par exemple, lorsque je n'utilise aucun environnement de bureau tel que GNOME ou KDE, mais que je me connecte directement avec TTY (du type /dev/tty1), j'ai le vide $DISPLAY.
Franklin Yu
@ Maythux Parfois, le numéro d'écran semble être omis lorsqu'il est 0. Mon GNOME donne :0pour $DISPLAY.
Franklin Yu
10

Les réponses existantes ne parviennent pas à aborder la situation dans son ensemble.

Si vous n'utilisez pas d'environnement graphique (c'est-à-dire que vous vous connectez à la console système sans fenêtre, etc.; ou que vous vous connectez à distance à partir d'un terminal texte uniquement sous SSH ou similaire, par exemple à partir d'un ordinateur Windows exécutant PuTTY), aucune interface graphique n'est impliquée et DISPLAYsera généralement non définie. La ligne de commande est votre seul moyen de communiquer avec l’ordinateur (bien qu’il soit possible de faire pivoter une session avec une interface graphique si vous savez comment faire).

Si vous vous connectez à la console à l'aide d'une interface graphique (sous Ubuntu, on utilise généralement la sonde GDM) ou à l'aide d'un terminal graphique (tel qu'un ordinateur Windows exécutant eXceed ou mobaX, ou un logiciel de bureau à distance tel qu'un client VNC), DISPLAYLa variable est configurée par le programme qui gère votre session graphique pour indiquer aux clients graphiques les périphériques d’E / S auxquels se connecter.

Traditionnellement, l'interface graphique sur un ordinateur Ubuntu exécutait X.org, une implémentation de X11, bien que plus récemment, un remplacement modernisé appelé Mir ait été introduit par Canonical; et encore plus récemment, je crois que Mir sera abandonné au profit d'un autre projet, appelé Wayland, ayant des objectifs similaires . Ces remplacements ont pour but de réduire la complexité d'une pile X11 complète, ce que nous n'allons pas DISPLAYaborder ici - ils adhèrent à la même convention, qui est après tout ce dont nous discutons ici.

Sur X11, la partie hôte DISPLAYpeut être un serveur distant et vous utiliseriez votre ordinateur Ubuntu comme un "terminal graphique" pour accéder aux fichiers et aux programmes de ce serveur distant (votre ordinateur est alors le "serveur" qui sert un clavier. souris, et un ou plusieurs périphériques d’affichage pour les programmes "clients" s'exécutant sur le serveur distant). Plus généralement, le serveur X11 (ou Mir ou Wayland) et les programmes clients (un gestionnaire de bureau et divers clients graphiques tels qu'un navigateur Web, un client de messagerie, un programme de calendrier, etc.) s'exécutent tous sur votre ordinateur. Ceci est indiqué par la partie "serveur" de la DISPLAYvaleur, qui dans ce dernier cas est généralement vide (ce qui implique la valeur par défaut localhost).

Un serveur X11 peut exécuter une ou plusieurs sessions graphiques. Par exemple, votre connexion à la console et une session VNC distante peuvent être exécutées simultanément. Dans ce cas (si elles sont gérées par la même instance de serveur X11), vous avez plusieurs "affichages" en termes X11. En pratique, une session (un événement de connexion et l'instance de bureau créée à partir de celle-ci) correspond à un affichage dans X11.

Un tel affichage peut avoir un ou plusieurs écrans. Traditionnellement, cela signifiait un moniteur, bien que l'architecture originale ait des traits malheureux tels que l'incapacité de déplacer une fenêtre d'un écran à un autre. Des add-ons tels que Xinerama et Xrandr ont encore compliqué la situation au point où un écran connecte souvent plusieurs moniteurs de différentes manières.

Si vous avez joué avec des systèmes à plusieurs moniteurs, vous avez probablement découvert que vous pouvez organiser les moniteurs de différentes manières et vous retrouver avec une zone rectangulaire dans laquelle vos moniteurs en affichent certaines parties et les autres ne sont affectés à aucun moniteur. Il s’agit de "l’écran" créé par X11, et si vous avez plusieurs cartes d’affichage, vous pouvez avoir plusieurs de ces écrans, chacun assigné à un ou plusieurs moniteurs (ou, en théorie, fonctionnant sans moniteur; Xvfb exploite cela pour permettre d’exécuter X11 sans aucun moniteur, en mappant simplement l’interface graphique sur une région de mémoire pour quelque fin que ce soit).

triple
la source
Mir a en effet été abandonné avec Unity. Pendant longtemps, lightdm plutôt que gdm était la valeur par défaut, mais peut-être que cette partie de votre réponse est redevenue la même qu'avant l'ascension de Unity! J'utilise MATE, donc je ne peux pas vérifier trivialement ...
Zanna
Je courais Linux depuis la console (sans Windows) et cela explique tout. Cela fait sens: p
Jean-François T.
3

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

Variable - AFFICHAGE

Exemple de valeurs:

:0.0
localhost:10.0
terminal01:0.0

À quoi ça sert?

Cette variable est utilisée pour indiquer aux applications graphiques où afficher l'interface graphique réelle, la valeur se compose de 3 parties: un nom d'hôte suivi de deux points (:), un numéro d'affichage suivi d'un point (.) Et d'un écran nombre.

La partie nom d’hôte peut être utilisée pour envoyer la sortie graphique à une machine distante via le réseau. Il peut être omis lorsque la sortie est destinée à un serveur X s'exécutant sur la machine locale. Le numéro d'affichage permet de sélectionner plusieurs serveurs X exécutés sur le même ordinateur (Ubuntu utilise plusieurs serveurs X pour permettre plusieurs sessions de bureau graphiques).

Bien que le numéro d'écran soit utilisé pour sélectionner plusieurs écrans physiques gérés par le même serveur X, il est rarement défini sur autre chose que "0" de nos jours. La définition manuelle de la valeur de la variable d'environnement "DISPLAY" est rarement nécessaire de nos jours car elle peut être ajustée automatiquement et intelligemment par de nombreuses applications telles que "GDM" et "SSH" en cas de besoin.

Pandya
la source
3

echo $ DISPLAY imprimera 0.0 sur ma machine (sur les deux moniteurs). Qu'est-ce que cela signifie?

: 0.0 signifie le numéro d'affichage 0 et le numéro d'écran 0

Dans quel cas $ DISPLAY sera vide ou NULL?

En cas d'erreur dans votre $ DISPLAY et cela ne se produit pas normalement

Existe-t-il des articles ou des tutoriels à ce sujet?

Quelques tutoriels et ressources peuvent être trouvés ici:

Communauté
la source