Recientemente lo puse xset b offen 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 setsalida de tty y la salida de urxvt setpara 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_SESSIONDISPLAYGDMSESSIONSESSION_MANAGERWINDOWIDWINDOWPATHXAUTHORITYXDG_SESSION_COOKIEXDG_CONFIG_DIRSXDG_DATA_DIRSXDG_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
DISPLAYsería el mejor enfoque.fuente
DISPLAY, o simplemente suprimiría el mensaje de error en general. Dale un/dev/nullpoco de amor de vez en cuando.sshs 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 … fiDISPLAYvariable 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
TERMvariable para probar X en mis scripts.TERMusualmente está configuradolinuxen TTY yxtermen X.Uso la palabra "usualmente" aquí, ya que aplicaciones como GNU Screen y TMux parecen confundirse con la
TERMVariable.fuente
echo $TERMdescubrir la configuración de richt en su máquina en diferentes consolas. Yo uso[ $TERM == "linux" ] && echo do some stuffen 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 1si 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..zshrcy 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,
$DISPLAYvolverá , por ejemplo,0:0en un emulador de terminal, pero nada en un terminal real. Esto se puede probar fácilmente con CtrlAltF1versus CtrlAltF7.Una
bashcondición basada en$DISPLAYse vería de la siguiente manera:fuente