Est-il possible de choisir sur quel affichage X une instance de programme doit s'exécuter?

10

S'il y a plusieurs X Windows exécutés sur un système, est-il possible de faire fonctionner un programme sur une fenêtre particulière? Comment identifieriez-vous la fenêtre et feriez-vous fonctionner le programme là-bas?

Je suppose que j'ai toutes les autorisations nécessaires pour exécuter un tel programme.

vfclists
la source

Réponses:

15

Les programmes X savent à quelle session X ils sont censés parler en examinant la DISPLAYvariable d'environnement.

Vous devez d'abord découvrir ce qui DISPLAYest défini dans la session X où vous souhaitez que votre programme s'exécute. Pour ce faire, émettez la commande à l' echo $DISPLAYintérieur d'un terminal X dans cette session X. Obtenir généralement quelque chose comme :0.0est sorti.

Disons que vous voulez commencer l'excellent programme xclockprogramme dans votre session X où DISPLAYest :0.0, mais vous voulez faire à la console. Vous appuyez ensuite sur Alt-Ctrl-F1 pour passer à cette console, puis tapez:

DISPLAY=:0.0 xclock   # variables set w/ a command are local to that command

Ensuite, vous revenez à X en appuyant sur Alt-Ctrl-F7 ou Alt-Ctrl-F8 (ou peut-être une autre touche F, selon votre saveur Linux) et regardez la nouvelle jolie horloge murale que vous avez là-bas.

En fait, vous auriez pu exécuter la commande ci-dessus dans n'importe quel shell sur cette même machine (via SSH, dans n'importe quelle session X, sur n'importe quelle console, etc.) - le fait que vous ayez spécifié DISPLAY=:0.0avant la commande signifie que la xclockfenêtre apparaîtra toujours dans la même session X.

En fait - à part le fait que les programmes X le regardent - il n'y a rien de spécial dans la DISPLAYvariable. Normalement, lorsque vous démarrez des programmes à partir d'un terminal X, ils démarrent au bon endroit car ils DISPLAYont déjà été définis pour vous.

Au lieu d'utiliser la commande ci-dessus, vous pouvez également la diviser en deux en définissant d'abord DISPLAY, puis en exécutant xclock. Dans ce cas, le DISPLAYparamètre persistera jusqu'à ce que vous fermiez ce shell, et tous les programmes X suivants démarrés à partir de là s'ouvriront dans la même session X que xclock.

                      # variables set w/o a command are local to the shell,
export DISPLAY=:0.0   # unless exported
xclock
zrajm
la source
1
Notez que le dernier bit ne fonctionnera que si vous exportez d'abord la variable shell dans l'environnement.
Ignacio Vazquez-Abrams
Je pense que DISPLAYsera défini pour exporter par défaut, car il est importé par le shell (cela fonctionne à la fois zshet dashpour moi sans utiliser export). Mais, oui, si vous ne pouvez pas faire fonctionner la version à deux lignes, essayez de la remplacer DISPLAY=:0.0par export DISPLAY=:0.0.
zrajm
1

Normalement, les programmes clients X utilisent la DISPLAYvariable d'environnement pour savoir à quel affichage du serveur X se connecter. Certains programmes acceptent également un paramètre de ligne de commande ( -displayou quelque chose de similaire) qui peut être utilisé pour remplacer la DISPLAYvariable d'environnement.

Laszlo Valko
la source