web-dev-qa-db-fra.com

Quelle est la variable d'environnement $ DISPLAY?

Je suis nouveau dans les scripts Shell. Je ne comprends pas ce qu'est la variable d'environnement $DISPLAY.

J'ai Ubuntu 13.10 et j'utilise /bin/bash Shell. J'ai deux moniteurs.

Des questions:

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

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

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

57
Chandrayya G K

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.S signifie que l'écran S apparaît sur l'affichage D du nom d'hôte de l'hôte; le serveur X de cet affichage est en écoute sur TCP port 6000 + D.

Host/unix:D.S signifie que l'écran S apparaît sur l'affichage D de l'hôte hôte; le serveur X de cet affichage écoute sur le socket de domaine UNIX /tmp/.X11-unix/XD (il est donc uniquement accessible à partir de l'hôte).

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

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

En savoir 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é.

76
Maythux

Les réponses existantes ne parviennent pas à aborder le tableau plus large.

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 sur 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éfini. 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 distant tel qu'un client VNC) La variable DISPLAYest 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 X11, bien que plus récemment, un remplacement modernisé appelé Mir ait été introduit par Canonical; et encore plus récemment, je crois Mir sera abandonné au profit d'un autre projet avec des objectifs globalement similaires, appelé Wayland . Ces remplacements ont pour but de réduire la complexité d'une pile X11 complète, ce que nous n'allons pas aborder ici - ils adhèrent à la même convention DISPLAYname__, qui est après tout ce dont nous discutons ici.

Sur X11, la partie hôte de DISPLAYpourrait ê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 étant alors le serveur). clavier, une 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 valeur DISPLAYname__, qui dans ce dernier cas est généralement vide (ce qui implique la valeur par défaut, localhostname__).

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. C'est "l'écran" créé par X11, et si vous avez plusieurs cartes d'affichage, vous pouvez en avoir plusieurs, chacun étant affecté à un ou plusieurs moniteurs (ou, en théorie, fonctionnant sans moniteur; Xvfb l'exploite pour permettre d’exécuter X11 sans aucun moniteur, mappant simplement l’interface graphique sur une région de mémoire pour quelque fin que ce soit).

7
tripleee

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 que la sortie graphique soit envoyée à 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 activer 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.

3
Pandya

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:

3
user259474