Jak nakłonić program do myślenia, że ​​nie działa serwer X.

28

Mam ten program, który może działać zarówno z tekstowym interfejsem użytkownika, jak i graficznym interfejsem użytkownika.

Brakuje przełącznika wiersza poleceń, aby wymusić jedno lub drugie, raczej wydaje mi się, że w jakiś sposób automatycznie wykrywa, czy jesteśmy w X, czy nie (np. Jeśli uruchomię go z wirtualnego terminalu, wejdzie w tryb tekstowy, a jeśli uruchomię go z emulator terminala X otwiera osobne okno graficzne).

Chciałbym zmusić go do przejścia w tryb tekstowy i uruchomić w terminalu X. Jak miałbym to zrobić?

Luka Aleksić
źródło

Odpowiedzi:

40

Zwykle tylko

unset DISPLAY

w wierszu poleceń terminala. Niektóre aplikacje są mądrzejsze i faktycznie sprawdzają uprawnienia i typ konsoli w porównaniu z pseudoterminalem.

Thomas Dickey
źródło
7
Niestety, niektóre naprawdę uparte programy zakładają DISPLAY=:0, że są wyłączone. Wierzę, że możesz to naprawić, uruchamiając go pod innym użytkownikiem i używając iptables do upuszczenia sprzężenia zwrotnego X11, ale to dość obrzydliwe.
Kevin
2
@Kevin może DISPLAY=invalid:0?
sourcejedi
2
@PeterCordes lub możesz wykonać polecenie envzamiast podpowłoki:env -u DISPLAY emacs foo.c
pabouk
2
@PeterCordes emacsma flagę wiersza poleceń, aby wyłączyć użycie X. Wystarczy wpisać emacs -nw. Ale jeśli nie, możesz zamiast tego użyć DISPLAY= emacs, co również działa.
kasperd
2
DISPLAY=0.0.0.0:0kończy się niepowodzeniem natychmiast bez wyszukiwania serwera nazw.
pkt
31

Jeśli chcesz wyłączyć X dla pojedynczego polecenia, możesz napisać

DISPLAY= ./my_command

Zwróć uwagę na strategiczne puste miejsce po =. Mówiąc bardziej ogólnie, można ustawić zmienne środowiskowe dla procesu, poprzedzając polecenie sekwencją <variable>=<value>oddzieloną spacjami. Ponieważ spacja służy jako separator, =bezpośrednio po niej spacja usuwa poprzednią zmienną. Możemy spojrzeć na efekt tych prefiksów, używając podpowłoki jako polecenia, a następnie drukując jej środowisko. Weź na przykład:

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

To zostanie wydrukowane

a b d

To pokazuje, że środowisko podpowłoki rzeczywiście różni się od zamierzonego. Zauważ, że podstawienie powłoki następuje przed przekazaniem poszczególnych argumentów echo, więc między wyjściem bi dna wyjściu jest tylko jedna spacja , tak jakby to było w wierszu poleceń echo a b d(z dwoma spacjami).

tobi_s
źródło