bashrc: como saber se a janela X está disponível ou não?

10

Existe uma parte no meu ~/.bashrc, que define $ EDITOR como gvim. Funciona bem quando estou na janela X. No entanto, se eu ssh na minha estação de trabalho (de outra estação de trabalho), o gvim começa a reclamar "não é possível abrir a tela".

Portanto, desejo colocar uma ifdeclaração no bashrc, de que, se a janela X estiver disponível, use gvim, caso contrário, deixe-o vim.

Como eu consegui isso?

Ryan
fonte

Respostas:

11

Uma maneira de fazer isso testa a existência da variável de ambiente DISPLAY:

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

Em alguns casos, o DISPLAY será definido, mesmo que o seu gvim não consiga entrar em contato com o servidor X. Nesses casos, use o programa RunningX :

if RunningX
then
    EDITOR=gvim
else
    EDITOR=vim
fi
garyjohn
fonte
if [[ $DISPLAY ]]para os aficionados por colchete duplo
Serge Stroobandt 16/10
7

A $DISPLAYvariável de ambiente deve ser definida como algo se você estiver no X e desabilitada se não estiver conectado a um monitor.

Então você pode usar isso:

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

Mas existe outra solução. Chama-se ssh X forwarding.

Corre

ssh -X yourworkstation

então você pode executar o vim em uma máquina na qual você está com ssh e ele será exibido na máquina em que você está executando o X.

Mikel
fonte
3

Coloque isso no seu .bashrc:

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

Embora essa não seja uma resposta para sua pergunta, achei útil ressaltar que, se você estiver executando o ssh de uma estação de trabalho executando o X * para outra, você poderá usar o gvim se configurar o encaminhamento do X com o ssh. As informações da janela serão enviadas pela rede e o gvim aparecerá como se fosse executado localmente.

Adicione o seguinte em ~ / .ssh / config

Host *
   ForwardX11 yes 

Agora você poderá executar o gvim.

Se sua estação de trabalho de origem é o Windows e não está executando o X, você realmente pode inicializar um servidor X localmente usando o Cygwin. Uma vez configurada, você pode configurar clientes ssh populares como o PuTTy para encaminhar o X11 e o gvim aparecerá no que parece ser uma janela nativa decorada com janelas.

mkomitee
fonte
0

Basta verificar uma das variáveis ​​de ambiente que o Xorg define na inicialização, como o XLOCAL, que contém informações sobre a sessão atual do X11.

exine
fonte
0

Gostei da resposta de garyjohn usando o RunningX, pois é inteligente em relação a variáveis ​​de exibição ruins, mas não vazias.

Mas .. eu gostaria de ir um melhor. Costumo usar sessões de tela. Posso iniciar uma sessão de tela em casa, DISPLAY está definido. Então, eu ssh de outro lugar, DISPLAY ainda está definido e na verdade é exibido ... em casa! Então .. então irei 'exportar $ DISPLAY ='. Isso é bom, mas como essa resposta já foi verificada e encontrou uma variável DISPLAY válida no momento.

Eu vim aqui procurando uma solução para um problema semelhante. Queria usar o yelp para navegar na página de manual do X-GUI, mas desative automaticamente o comando man tradicional quando não estiver usando o X. Com base no que li aqui, vim com isso:

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

Estou pensando que, para o problema do EDITOR, alguém poderia fazer algo como segue:

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

Eu teria acabado de postar que sem a longa história, mas ainda não a testei. Eu me considero um novato bash. Eu testei o meu 'comando man', que funciona! No entanto, estou usando o emacs para o meu editor, ele faz sua própria verificação para o X. Eu nem tenho o gvim instalado.

user3042526
fonte