È possibile scegliere su quale display X deve essere eseguita un'istanza del programma?


10

Se ci sono più X Windows in esecuzione su un sistema, è possibile far funzionare un programma su una finestra particolare? Come identificheresti la finestra e far eseguire il programma lì?

Suppongo di avere tutte le autorizzazioni necessarie per eseguire un tale programma.


Risposte:


15

I programmi X sanno con quale sessione X dovrebbero parlare guardando la DISPLAYvariabile d'ambiente.

Per prima cosa devi scoprire cosa DISPLAYè impostato nella sessione X in cui vuoi che il tuo programma venga eseguito. Fallo immettendo il comando echo $DISPLAYall'interno di un X-terminal in quella sessione X. In genere ottenere qualcosa di simile :0.0viene emesso.

Diciamo che si desidera avviare il programma eccellente xclockprogramma nella sessione X dove DISPLAYè :0.0, ma si vuole fare questo alla console. Quindi premi Alt-Ctrl-F1 per passare a quella console, quindi digita:

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

Quindi torni a X premendo Alt-Ctrl-F7 o Alt-Ctrl-F8 (o forse qualche altro tasto F, a seconda del tuo sapore di Linux) e guarda il nuovo grazioso orologio a muro che hai lì.

In effetti avresti potuto eseguire il comando sopra in qualsiasi shell su quella stessa macchina (tramite SSH, in qualsiasi sessione X, su qualsiasi console ecc.) - il fatto che hai specificato DISPLAY=:0.0prima del comando significa che la xclockfinestra apparirà sempre in la stessa sessione X.

In effetti - a parte il fatto che i programmi X lo guardano - non c'è nulla di speciale nella DISPLAYvariabile. Normalmente quando si avviano programmi da un terminale X, iniziano nel posto giusto perché DISPLAYè già stato impostato per te.

Invece di usare il comando sopra, puoi anche dividerlo in due prima impostando DISPLAYe poi eseguendo xclock. In questo caso l' DISPLAYimpostazione persisterà fino alla chiusura della shell e tutti i successivi programmi X avviati da lì si apriranno nella stessa sessione X di xclock.

                      # variables set w/o a command are local to the shell,
export DISPLAY=:0.0   # unless exported
xclock

1
Si noti che l'ultimo bit non funzionerà se non si esporta prima la variabile di shell nell'ambiente.
Ignacio Vazquez-Abrams,

Penso che DISPLAYsarà impostato per esportare di default, poiché è importato dalla shell (funziona in entrambi zshe dashper me senza usare export). Ma, sì, se non è possibile ottenere la versione di due linee di lavoro, provare a sostituire DISPLAY=:0.0con export DISPLAY=:0.0.
zrajm,

1

Normalmente, i programmi client X utilizzano la DISPLAYvariabile d'ambiente per sapere a quale display del server X connettersi. Alcuni programmi accettano anche un parametro della riga di comando ( -displayo qualcosa di simile) che può essere utilizzato per sovrascrivere la DISPLAYvariabile di ambiente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.