Você pode tentar com o comando xset:
if [[ ! $(xset -q) ]]; then
# the X server is not reachable
else
# the X server is reachable
fi
Este é um meio-termo intermediário entre programação e administração de servidor, mas este parece ser o lugar mais relevante para isso.
Estou procurando uma maneira de determinar se a variável ' $DISPLAY
' está anunciando um XServer ao qual podemos nos conectar, ou seja, se toda a autenticação e outros detalhes estiverem em vigor para permitir que mais coisas sejam executadas.
Eu estou idealmente procurando por algo como ferramenta shell-end que retorne verdadeiro / falso, que pode ser usado em um script de compilação para determinar se os outros testes nele (que eu não controle) devem ser executados ou não .
Os testes no momento simplesmente verificam a variável env
" $DISPLAY
" e, se estiver lá, tentarão se conectar e, quando a conexão não funcionar, os testes assumem a falha do teste, não simplesmente a tela não é conectável.
Eu só preciso ser capaz de fazer
if [[ ! can_connect_to_X ]] ; then
unset DISPLAY
fi
Para parar estes testes com problemas mentais graves.
Em uma situação ideal, a ferramenta necessária para isso deve ser fornecida com as próprias bibliotecas X Client, de modo a não incorrer em dependências especiais, e ser capaz de assumir se o utilitário não estiver lá, não podemos nos conectar qualquer exibição.
Eu estou supondo que há uma solução melhor. Mas você sempre pode usar apenas uma pequena ferramenta como xclock e verificar o status de saída.
if [[ ! xclock ]]; then
exit 1
fi
pkill xclock
Mas cara, isso é feio: -)
Menos Hacky, coloque o seguinte no checkX.c:
#include <X11/Xlib.h>
#include <stdio.h>
int main()
{
Display *display;
if( ! (display=XOpenDisplay(NULL) ) ) {
return(1);
}
return 0;
}
Então:
gcc -lX11 checkX.c -o checkX
chmod +x checkX
Por fim:
if ./checkX; then
echo "We are good to go!"
fi
Heres um WayToDoIt possível, não tenho certeza como é bom embora.
x_works(){
# If there is no xdpyinfo
# Bash will return 127
# If X cant connect, it returns 1
# If X can connect, it returns 0
xdpyinfo 1>/dev/null 2>&1
WORKS="$?"
return $WORKS
}
if x_works; then
...
Este aparece para funcionar.