.png)
Recientemente puse xset b off
en mi .bashrc. Ahora me molesta 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 me vino a la mente fue [[ -z "$SOME_VAR" ]] && xset b off
(bueno, resulta que probarvariable configurada frente a estar vacíaes una pregunta diferente). ¿Pero cuál SOME_VAR es el correcto?
Entonces diferí set
la salida de tty y la salida de urxvt set
para ver qué variables están configuradas en X y faltan en tty. Como era de esperar, hubo bastantes diferencias (enumerando sólo aquellas 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 manera incluso mejor que probar las variables de entorno?
Respuesta1
Una forma sencilla y eficaz de comprobar que su servidor de visualización está disponible y es válido es probarlo con xhost
. No siempre puedes confiar en verificar un valor en la DISPLAY
variable, ya que podría estar configurado con un valor no válido.
if xhost >& /dev/null ; then echo "Display exists"
else echo "Display invalid" ; fi
La razón por la que hago esto es porque ejecuto varios scripts en mi usuario crontab
que operan en la pantalla cuando existe, pero funcionan de manera diferente cuando no. En la parte superior de mi crontab
, configuré la DISPLAY
variable :0
aunque aún no existe. Los scripts crontab
que comienzan con @reboot
se iniciarán independientemente de si tiene una pantalla o no. Esto le permitirá detectar dinámicamente cuándo su pantalla aparece y desaparece dentro del mismo script.
NOTA: El >&
único funciona en bash
>= 4. De lo contrario use> /dev/null 2>&1
Respuesta2
Creo que comprobar DISPLAY
sería el mejor enfoque.
- Maneja inicios de sesión remotos (por ejemplo, ssh -X).
- Está disponible en la mayoría de las plataformas, si no en todas.
- Es independiente del administrador de ventanas/DE.
Respuesta3
Normalmente uso la TERM
variable para probar X en mis scripts.
TERM
generalmente está configurado linux
en TTY y xterm
en X.
Utilizo la palabra "generalmente" aquí, ya que aplicaciones como GNU Screen y TMux parecen interferir con la TERM
Variable.
Respuesta4
En un script bash ordinario:if [[ $DISPLAY ]]
En el mismo ordenador, $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
tendría el siguiente aspecto:
if [[ $DISPLAY ]]; then
…
fi
En .profile
o .personal
:if xhost >& /dev/null
Según mi experiencia, $DISPLAY
aún no está establecido cuándo .profile
, o por extensión, .personal
se ejecutarán. Para esos casos, elrespuesta por usuario cmevoli
sirve mejor:
if xhost >& /dev/null; then
fi
Me encontré con este problema al definir un escritorio.CapsLock mapeo de claveseso no debería aplicarse a mi servidor.