web-dev-qa-db-fra.com

Comment faire croire à un programme qu'il n'y a pas de serveur X en cours d'exécution

J'ai ce programme qui peut fonctionner avec une interface utilisateur texte et une interface utilisateur graphique.

Il manque un commutateur de ligne de commande pour forcer l'un ou l'autre, je suppose plutôt qu'il détecte automatiquement si nous sommes en X ou non (par exemple, si je l'exécute à partir d'un terminal virtuel, il entre en mode texte et si je l'exécute à partir de un émulateur de terminal X, il ouvre une fenêtre graphique distincte).

Je voudrais le forcer en mode texte et le faire fonctionner à l'intérieur du terminal X. Comment pourrais-je m'y prendre?

28
Luka Aleksić

Habituellement juste

unset DISPLAY

en ligne de commande du terminal. Certaines applications sont plus intelligentes que cela et vérifient réellement les autorisations et le type de console par rapport au pseudoterminal.

40
Thomas Dickey

Si vous souhaitez désactiver X pour une seule commande, vous pouvez écrire

DISPLAY= ./my_command

Remarquez l'espace vide stratégique après =. Plus généralement, vous pouvez définir des variables d'environnement pour un processus en préfixant votre commande avec une séquence de <variable>=<value> séparés par des espaces. Puisque l'espace sert de séparateur, = immédiatement suivi d'un espace efface la variable précédente. Nous pouvons examiner l'effet de ces préfixes en utilisant un sous-shell comme commande, puis en imprimant son environnement. Prenez par exemple:

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

Cela imprimera

a b d

Cela montre que l'environnement de la sous-coque est en effet différent comme prévu. Notez que la substitution Shell se produit avant que les arguments individuels ne soient passés à echo, donc il n'y a qu'un seul espace entre b et d dans la sortie, comme si la ligne de commande était echo a b d (avec deux espaces).

31
tobi_s