Recientemente lo puse xset b off
en mi .bashrc. Ahora estoy molesto por el error que aparece cuando inicio sesión a través de tty o ssh, es decir, fuera de la sesión X.
Lo primero que se me ocurrió fue [[ -z "$SOME_VAR" ]] && xset b off
(bueno, resulta que la variable de prueba que se establece frente a estar vacía es una pregunta diferente). ¿Pero cuál SOME_VAR es el correcto?
Así que diferto la set
salida de tty y la salida de urxvt set
para ver qué variables están establecidas en X y las que faltan en tty. Como era de esperar, hubo muchas diferencias (enumerando solo las que me parecieron relevantes):
DESKTOP_SESSION
DISPLAY
GDMSESSION
SESSION_MANAGER
WINDOWID
WINDOWPATH
XAUTHORITY
XDG_SESSION_COOKIE
XDG_CONFIG_DIRS
XDG_DATA_DIRS
XDG_MENU_PREFIX
¿Cuál es el más correcto y universal para probar para detectar si estoy en una sesión X o no? ¿Algo que funcione en tantas distribuciones, plataformas y entornos de escritorio como sea posible?
¿O hay una forma aún mejor que probar las variables de entorno?
fuente
ssh -X
; ¡funciona bien!Creo que verificar
DISPLAY
sería el mejor enfoque.fuente
DISPLAY
, o simplemente suprimiría el mensaje de error en general. Dale un/dev/null
poco de amor de vez en cuando.ssh
s simples hasta ahora, cuando comencé a hacerssh -X
--- para poder usar Vim sobre ssh para que el contenido seleccionado por modo visual llegue al portapapeles X local, para lo cual no necesita xserver en el lado del servidor. Por lo tanto, DISPLAY se configura como efecto de simplemente habilitar el reenvío, incluso si xserver y xset no están presentes.if [[ $DISPLAY ]]; then … fi
DISPLAY
variable puede apuntar a una pantalla que en realidad no tiene un servidor X en ejecución (por ejemplo, cuando está codificado en un script, o el servidor X se cerró después de configurar la variable).Usualmente uso la
TERM
variable para probar X en mis scripts.TERM
usualmente está configuradolinux
en TTY yxterm
en X.Uso la palabra "usualmente" aquí, ya que aplicaciones como GNU Screen y TMux parecen confundirse con la
TERM
Variable.fuente
echo $TERM
descubrir la configuración de richt en su máquina en diferentes consolas. Yo uso[ $TERM == "linux" ] && echo do some stuff
en UbuntuEsto debería funcionar perfectamente bien:
http://tldp.org/LDP/abs/html/fto.html
Entonces, cuando esto se evalúa como falso (
[ ! -t 0 ]
), estamos en un entorno GUI.fuente
[ -t 0 ]
y[ -t 1 ]
son ambos verdaderos.[ -t 0 ]
funciona bien en la consola en Ubuntu (usando CTRL ALT F1)Hay muchas formas de hacerlo.
En bash, intenta
O, en zsh, intente
fuente
echo 1
si X se está ejecutando e inicia sesión a través de tty1-6 o ssh. El otro siempre hace "cosas que no son X". Creo que eso${CURRENT_VT[6]}
significa más bien la sexta línea que la sexta letra.zsh
) y posiblemente hacer algunas modificaciones si lo desea, para que funcione en bash..zshrc
y buscaexport VT
. Utilizo la variable para contener en qué Linux VT / console / tty estoy (para el indicador zsh) pero en X, simplemente lo configuré en "X" (aunque no es un VT). Pero eso es detalles, podría resolverlo de la manera que desee en bash utilizando el mismo principio.if [[ $DISPLAY ]]
En la misma computadora,
$DISPLAY
volverá , por ejemplo,0:0
en un emulador de terminal, pero nada en un terminal real. Esto se puede probar fácilmente con CtrlAltF1versus CtrlAltF7.Una
bash
condición basada en$DISPLAY
se vería de la siguiente manera:fuente