Vor kurzem habe ich xset b off
meine .bashrc. Jetzt ärgere ich mich über den Fehler, der auftaucht, wenn ich mich über tty oder über ssh anmelde, also außerhalb der X-Sitzung.
Das erste, was mir in den Sinn kam, war [[ -z "$SOME_VAR" ]] && xset b off
(nun, es stellt sich heraus, dass das Setzen einer Testvariablen im Vergleich zum Leeren eine andere Frage ist). Aber welche SOME_VAR ist die richtige?
Also habe ich die Ausgabe von tty set
und urxvt differenziert, um set
zu sehen, welche Variablen in X gesetzt sind und in tty fehlen. Wie erwartet gab es ziemlich viele Unterschiede (nur die auflisten, die mir relevant erschienen):
DESKTOP_SESSION
DISPLAY
GDMSESSION
SESSION_MANAGER
WINDOWID
WINDOWPATH
XAUTHORITY
XDG_SESSION_COOKIE
XDG_CONFIG_DIRS
XDG_DATA_DIRS
XDG_MENU_PREFIX
Welches ist das Richtigste und Universellste, um festzustellen, ob ich in einer X-Sitzung bin oder nicht? Etwas, das in möglichst vielen Distributionen, Plattformen und Desktop-Umgebungen funktioniert?
Oder gibt es einen besseren Weg als Umgebungsvariablen zu testen?
quelle
ssh -X
; funktioniert gut!Ich denke, das Überprüfen
DISPLAY
wäre der beste Ansatz.quelle
DISPLAY
, die Fehlermeldung im Allgemeinen zu unterdrücken. Gib/dev/null
von Zeit zu Zeit etwas Liebe.ssh
bis jetzt perfekt mit einfachen s, als ich anfing,ssh -X
Vim über ssh zu verwenden, damit der im visuellen Modus ausgewählte Inhalt in die lokale X-Zwischenablage gelangt, für die Sie brauchen keinen xserver auf der Serverseite. DISPLAY wird also so eingestellt, dass die Weiterleitung einfach aktiviert wird, auch wenn xserver und xset nicht vorhanden sind.if [[ $DISPLAY ]]; then … fi
DISPLAY
Variable kann auf eine Anzeige verweisen, auf der tatsächlich kein X-Server ausgeführt wird (z. B. wenn sie in einem Skript fest codiert ist oder der X-Server heruntergefahren wurde, nachdem die Variable festgelegt wurde).Normalerweise benutze ich die
TERM
Variable, um in meinen Skripten auf X zu testen.TERM
wird normalerweiselinux
auf TTY undxterm
auf X gesetzt.Ich verwende hier das Wort "normalerweise", da Anwendungen wie GNU Screen und TMux mit der
TERM
Variablen zu verwechseln scheinen .quelle
echo $TERM
Sie, die Richtungsangaben an Ihrer Maschine auf verschiedenen Konsolen zu ermitteln. Ich benutze[ $TERM == "linux" ] && echo do some stuff
auf UbuntuDies sollte einwandfrei funktionieren:
http://tldp.org/LDP/abs/html/fto.html
Wenn dies zu false (
[ ! -t 0 ]
) ausgewertet wird, befinden wir uns in einer GUI-Umgebung.quelle
[ -t 0 ]
und zwar und[ -t 1 ]
sind beide wahr.[ -t 0 ]
funktioniertEs gibt viele Möglichkeiten, wie Sie das tun können.
Versuchen Sie es in der Bash
Oder versuchen Sie es in zsh
quelle
echo 1
X ausgeführt wird und Sie sich über tty1-6 oder ssh anmelden. Der andere macht immer "non-X stuff" - ich denke das${CURRENT_VT[6]}
bedeutet eher die 6. Zeile als das 6. Zeichen.zsh
) versuchen und möglicherweise einige Änderungen vornehmen, wenn Sie möchten, damit es in bash funktioniert..zshrc
und suchen Sie nachexport VT
. Ich verwende die Variable, um das Linux-VT / console / tty zu speichern, in dem ich mich befinde (für die zsh-Eingabeaufforderung), aber in X setze ich es einfach auf "X" (obwohl kein VT). Aber das sind Details, Sie können es nach dem gleichen Prinzip herausfinden, wie Sie es möchten.if [[ $DISPLAY ]]
Auf dem gleichen Computer
$DISPLAY
wird beispielsweise0:0
in einem Terminal-Emulator nichts zurückgegeben, aber in einem echten Terminal. Dies kann leicht mit CtrlAltF1versus getestet werden CtrlAltF7.Eine
bash
Bedingung basierend auf$DISPLAY
würde wie folgt aussehen:quelle