Ostatnio umieściłem xset b off
na swoim .bashrc. Teraz denerwuje mnie błąd, który pojawia się, gdy loguję się przez tty lub ssh, tj. Poza sesją X.
Pierwszą rzeczą, jaka przyszła mi do głowy, było [[ -z "$SOME_VAR" ]] && xset b off
(cóż, okazuje się, że ustawienie zmiennej testowej vs. bycie pustym to inne pytanie). Ale który SOME_VAR jest poprawny?
Więc różnicowałem set
dane wyjściowe tty i dane wyjściowe urxvt, set
aby zobaczyć, które zmienne są ustawione w X, a których brakuje w tty. Zgodnie z oczekiwaniami było całkiem sporo różnic (wymieniając tylko te, które wydawały mi się istotne):
DESKTOP_SESSION
DISPLAY
GDMSESSION
SESSION_MANAGER
WINDOWID
WINDOWPATH
XAUTHORITY
XDG_SESSION_COOKIE
XDG_CONFIG_DIRS
XDG_DATA_DIRS
XDG_MENU_PREFIX
Który z nich jest najbardziej poprawny i uniwersalny do przetestowania w celu wykrycia, czy jestem w sesji X, czy nie? Coś, co działałoby na wielu dystrybucjach, platformach i środowiskach desktopowych, jak to możliwe?
Czy jest jeszcze lepszy sposób niż testowanie zmiennych środowiskowych?
źródło
ssh -X
; działa w porządku!Myślę, że sprawdzanie
DISPLAY
byłoby najlepszym podejściem.źródło
DISPLAY
po prostu ogólnie usunąć komunikat o błędzie./dev/null
Od czasu do czasu daj trochę miłości.ssh
s do tej pory, kiedy zacząłem robićssh -X
--- możliwość używania Vima przez ssh, aby zawartość wybrana przez tryb wizualny trafiła do lokalnego schowka X, dla którego nie potrzebujesz Xserver po stronie serwera. Tak więc DISPLAY zostaje ustawiony tak samo, jak proste włączenie przekazywania, nawet jeśli xserver i xset nie są obecne.if [[ $DISPLAY ]]; then … fi
DISPLAY
zmienna może wskazywać na ekran, który tak naprawdę nie ma uruchomionego serwera X (na przykład, gdy jest on zakodowany na stałe w skrypcie lub serwer X został zamknięty po ustawieniu zmiennej).Zwykle używam
TERM
zmiennej do testowania X w moich skryptach.TERM
jest zwykle ustawionylinux
na TTY ixterm
X.Używam tutaj słowa „zwykle”, ponieważ aplikacje takie jak GNU Screen i TMux wydają się zadzierać ze
TERM
Zmienną.źródło
echo $TERM
znaleźć bogate ustawienia na swoim komputerze w różnych konsolach. Używam[ $TERM == "linux" ] && echo do some stuff
na UbuntuPowinno to działać idealnie dobrze:
http://tldp.org/LDP/abs/html/fto.html
Tak więc, kiedy to zmienia się na false (
[ ! -t 0 ]
), jesteśmy w środowisku GUI.źródło
[ -t 0 ]
i[ -t 1 ]
oba są prawdziwe.[ -t 0 ]
działa dobrze na konsoli w Ubuntu (używając CTRL ALT F1)Można to zrobić na wiele sposobów.
W bash spróbuj
Lub, w Zsh, spróbuj
źródło
echo 1
jeśli X jest uruchomiony i logujesz się przez tty1-6 lub ssh. Drugi zawsze robi rzeczy inne niż X - myślę, że${CURRENT_VT[6]}
oznacza to raczej szóstą linię niż szósty znak.zsh
) i ewentualnie wprowadzić pewne modyfikacje, jeśli ci się spodoba, aby działał w bash..zshrc
i wyszukajexport VT
. Używam tej zmiennej do przechowywania tego, w czym jestem Linux VT / console / tty (dla zachęty zsh), ale w X po prostu ustawiłem ją na „X” (chociaż nie VT). Ale to są szczegóły, możesz to wypracować w dowolny sposób, używając tej samej zasady.if [[ $DISPLAY ]]
Na tym samym komputerze
$DISPLAY
powróci na przykład0:0
w emulatorze terminala, ale nic w prawdziwym terminalu. Można to łatwo przetestować za pomocą CtrlAltF1versus CtrlAltF7.bash
Warunek na podstawie$DISPLAY
wyglądałby następująco:źródło