Come indurre un programma a pensare che non ci sia X server in esecuzione


28

Ho questo programma che può essere eseguito con un'interfaccia utente di testo e un'interfaccia utente grafica.

Manca qualsiasi interruttore della riga di comando per forzare l'uno o l'altro, piuttosto immagino che in qualche modo rilevi automaticamente se siamo in X o meno (ad esempio se lo eseguo da un terminale virtuale entra nella sua modalità di testo e se lo eseguo da un emulatore del terminale X apre una finestra grafica separata).

Vorrei forzarlo in modalità testo e farlo funzionare all'interno del terminale X. Come farei per farlo?

Risposte:


40

Di solito solo

unset DISPLAY

nella riga di comando del terminale. Alcune applicazioni sono più intelligenti di così, e in realtà controllano le autorizzazioni e il tipo di console rispetto allo pseudoterminale.


7
Sfortunatamente, alcuni software davvero ostinati assumeranno DISPLAY=:0se non sono impostati. Credo che puoi risolverlo eseguendolo con un altro utente e usando iptables per eliminare il loopback X11, ma è piuttosto grossolano.
Kevin,

2
@Kevin forse DISPLAY=invalid:0?
sourcejedi,

2
@PeterCordes oppure è possibile eseguire il comando tramite envanziché una subshell:env -u DISPLAY emacs foo.c
pabouk

2
@PeterCordes emacsha un flag da riga di comando per disabilitare l'uso di X. Basta digitare emacs -nw. Ma se così non fosse, potresti invece usare DISPLAY= emacs, il che funziona anche.
Kasperd,

2
DISPLAY=0.0.0.0:0fallisce all'istante senza effettuare una ricerca del server dei nomi.
punti

31

Se vuoi disabilitare X per un singolo comando puoi scrivere

DISPLAY= ./my_command

Notare lo spazio vuoto strategico dopo =. Più in generale, è possibile impostare variabili di ambiente per un processo anteponendo il comando a una sequenza di <variable>=<value>spazi separati. Poiché lo spazio funge da separatore, =immediatamente seguito da uno spazio cancella la variabile precedente. È possibile esaminare l'effetto di questi prefissi utilizzando una subshell come comando e quindi stampandone l'ambiente. Prendi ad esempio:

$ A=a B=b C= D=d sh
$ echo $A $B $C $D

Questo stamperà

a b d

Ciò dimostra che l'ambiente della subshell è effettivamente diverso come previsto. Nota che la sostituzione della shell avviene prima che i singoli argomenti vengano passati echo, quindi c'è solo un singolo spazio tra be dnell'output, proprio come se la riga di comando fosse echo a b d(con due spazi).

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.