Recentemente eu coloquei xset b off
no meu .bashrc. Agora eu estou irritado com o erro que aparece quando eu faço logon via tty ou via ssh, ou seja, fora da sessão X.
A primeira coisa que me veio à mente foi [[ -z "$SOME_VAR" ]] && xset b off
(bem, acontece que a variável de teste sendo definida versus vazia) é uma pergunta diferente). Mas qual SOME_VAR é o correto?
Então, diferenciei a set
saída de tty e a saída de urxvt set
para ver quais variáveis são definidas em X e ausentes em tty. Como esperado, havia muitas diferenças (listando apenas as que me pareciam relevantes):
DESKTOP_SESSION
DISPLAY
GDMSESSION
SESSION_MANAGER
WINDOWID
WINDOWPATH
XAUTHORITY
XDG_SESSION_COOKIE
XDG_CONFIG_DIRS
XDG_DATA_DIRS
XDG_MENU_PREFIX
Qual é o mais correto e universal para testar, a fim de detectar se estou em uma sessão X ou não? Algo que funcionaria em tantas distros, plataformas e ambientes de desktop quanto possível?
Ou existe uma maneira ainda melhor do que testar variáveis de ambiente?
fonte
ssh -X
; funciona bem!Eu acho que a verificação
DISPLAY
seria a melhor abordagem.fonte
DISPLAY
ou simplesmente suprimiria a mensagem de erro em geral. Dê um/dev/null
pouco de amor de vez em quando.ssh
s simples até agora, quando comecei a fazerssh -X
--- poder usar o Vim sobre ssh para que o conteúdo selecionado pelo modo visual chegue à área de transferência local X, para a qual você não precisa do xserver no lado do servidor. Portanto, o DISPLAY é definido da mesma maneira que simplesmente permite o encaminhamento, mesmo que xserver e xset não estejam presentes.if [[ $DISPLAY ]]; then … fi
DISPLAY
variável pode apontar para uma exibição que realmente não possui um servidor X em execução (por exemplo, quando é codificado em um script ou o servidor X foi desligado após a definição da variável).Eu normalmente uso a
TERM
variável para testar o X nos meus scripts.TERM
geralmente é definido comolinux
TTY exterm
X.Eu uso a palavra "geralmente" aqui, pois aplicativos como GNU Screen e TMux parecem mexer com a
TERM
variável.fonte
echo $TERM
descobrir a configuração rica em seu mashine em diferentes consoles. Eu uso[ $TERM == "linux" ] && echo do some stuff
no UbuntuIsso deve funcionar perfeitamente bem:
http://tldp.org/LDP/abs/html/fto.html
Portanto, quando isso é avaliado como false (
[ ! -t 0 ]
), estamos em um ambiente de GUI.fonte
[ -t 0 ]
e[ -t 1 ]
ambos são verdadeiros.[ -t 0 ]
funciona bem no console no Ubuntu (usando CTRL ALT F1)Existem várias maneiras de fazer isso.
No bash, tente
Ou, no zsh, tente
fonte
echo 1
se o X estiver em execução e você fizer login via tty1-6 ou ssh. O outro sempre faz "coisas não-X" - acho que isso${CURRENT_VT[6]}
significa 6ª linha do que 6ª char.zsh
) e possivelmente fazer algumas modificações, se quiser, para fazê-lo funcionar no bash..zshrc
e procureexport VT
. Eu uso a variável para armazenar em que Linux VT / console / tty eu estou (para o prompt zsh), mas no X, apenas a defino como "X" (embora não seja um VT). Mas isso é detalhes, você pode trabalhar da maneira que quiser no bash usando o mesmo princípio.if [[ $DISPLAY ]]
No mesmo computador,
$DISPLAY
retornará, por exemplo,0:0
em um emulador de terminal, mas nada em um terminal real. Isso pode ser facilmente testado com CtrlAltF1versus CtrlAltF7.Uma
bash
condição baseada$DISPLAY
seria da seguinte maneira:fonte