bashrc: ¿cómo saber que X window está disponible o no?

10

Hay una parte en my ~/.bashrc, que establece que $ EDITOR sea gvim. Funciona bien cuando estoy en X window. Sin embargo, si ssh a mi estación de trabajo (desde otra estación de trabajo) gvim comienza a quejarse "no se puede abrir la pantalla".

Por lo tanto, deseo poner una ifdeclaración en bashrc, que si X window está disponible, entonces use gvim, de lo contrario deje que sea vim.

¿Cómo podría lograr eso?

Ryan
fuente

Respuestas:

11

Una forma de hacerlo prueba la existencia de la variable de entorno DISPLAY:

if [ "$DISPLAY" ]
then
    EDITOR=gvim
else
    EDITOR=vim
fi

En algunos casos, DISPLAY se configurará aunque su gvim no pueda contactar al servidor X. En esos casos, use el programa RunningX :

if RunningX
then
    EDITOR=gvim
else
    EDITOR=vim
fi
garyjohn
fuente
if [[ $DISPLAY ]]para los aficionados de doble soporte ...
Serge Stroobandt
7

La $DISPLAYvariable de entorno debe establecerse en algo si está en X, y deshabilitarse si no está conectado a una pantalla.

Entonces podrías usar esto:

if [ -n "$DISPLAY" ]; then
    alias vim='gvim'
else
    alias vim='vim'
fi

Pero hay otra solución. Se llama reenvío ssh X.

correr

ssh -X yourworkstation

entonces puede ejecutar vim en una máquina en la que se ssh'd, y se mostrará en la máquina donde está ejecutando X.

Mikel
fuente
3

Pon esto en tu .bashrc:

if [ -z "${DISPLAY:-}" ]; then
  EDITOR='vim'
else
  EDITOR='gvim'
fi
cahuk
fuente
1

Si bien esta no es una respuesta a su pregunta, pensé que podría ser útil señalar que si está enviando mensajes de una estación de trabajo que ejecuta X * a otra estación de trabajo, en realidad puede usar gvim si configura el reenvío de X con ssh. La información de la ventana se enviará a través de la red y gvim aparecerá como si se ejecutara localmente.

Agregue lo siguiente en ~ / .ssh / config

Host *
   ForwardX11 yes 

Ahora podrás ejecutar gvim.

Si su estación de trabajo de origen es Windows y no ejecuta X, en realidad PUEDE iniciar un servidor X localmente utilizando Cygwin. Una vez que esté configurado, puede configurar clientes ssh populares como PuTTy para hacer reenvío X11, y luego aparecerá gvim en lo que parece ser una ventana nativa decorada con ventanas.

mkomitee
fuente
0

Simplemente marque una de las variables de entorno que Xorg establece en el inicio, como XLOCAL que contiene información sobre la sesión X11 actual.

exine
fuente
0

Me gustó la respuesta de garyjohn usando RunningX ya que es inteligente sobre las variables DISPLAY malas pero no vacías.

Pero ... me gustaría ir uno mejor. A menudo uso sesiones de pantalla. Podría comenzar una sesión de pantalla en casa, DISPLAY está definido. Luego, ingresé desde otro lugar, DISPLAY todavía está definido y en realidad se muestra ... ¡en casa! Entonces ... entonces exportaré $ DISPLAY = '. Esto está bien, pero dado que esa respuesta ya se verificó y encontró una variable DISPLAY válida en el momento en que .bashrc ejecutó inicialmente EDITOR, todavía se establecería en gvim.

Vine aquí en busca de una solución a un problema similar, quería usar yelp para la exploración de la página de manual de X-GUI pero automáticamente desplegarme al comando man tradicional cuando no estoy usando X. Basado en lo que leí aquí, se me ocurrió esto:

man () {
    if RunningX
    then
        yelp "man:$@";
    else
        /usr/bin/man "$@";
    fi
}

Estoy pensando que para el problema del EDITOR se podría hacer algo como lo siguiente:

EDITOR=vim
vim () {
    if RunningX
    then
        gvim "$@";
    else
        vim "$@";
    fi
}

Hubiera publicado eso sin la larga historia, pero no lo he probado. Me considero un novato bash. Probé mi 'comando man', ¡eso funciona! Sin embargo, estoy usando emacs para mi editor, hace su propia comprobación de X. Ni siquiera tengo instalado gvim.

usuario3042526
fuente