Come faccio a provare a livello di programmazione se è ansible connettersi al server X specificato in $ DISPLAY

Questo è un po 'un mezzo-terreno tra la programmazione e il server-admin, ma questo sembra infine il luogo più rilevante per esso.

Sto cercando un modo per determinare se la variabile ' $DISPLAY ' sta pubblicizzando un XServer in cui possiamo effettivamente connettersi, cioè, se tutte le autenticazioni e cosa è in atto per consentire ulteriori cose da eseguire.

Sono idealmente alla ricerca di uno strumento di shell-end che restituisce true / false, che può essere utilizzato in un build-script per determinare se gli altri test in esso (che non ho controllo) dovrebbero essere eseguiti o less.

I test attualmente controllano semplicemente la variabile env " $DISPLAY " e, se esiste, cercherà di connettersi e quando la connessione non funziona, i test presuppongono il guasto del test, non solo il display non è connettibile.

Devo solo essere in grado di fare

 if [[ ! can_connect_to_X ]] ; then unset DISPLAY fi 

Al fine di fermare questi test con gravi problemi mentali.

In una situazione ideale, l'attrezzo necessario per farlo dovrebbe essere fornito con le librerie X Client stesso, per non incorrere in dependencies particolari e per poter assumere se l'utilità non è presente non possiamo connettersi a nessuna visualizzazione.

3 Solutions collect form web for “Come faccio a provare a livello di programmazione se è ansible connettersi al server X specificato in $ DISPLAY”

È ansible provare con il command xset:

 if [[ ! $(xset -q) ]]; then # the X server is not reachable else # the X server is reachable fi 

Immagino che esista una soluzione migliore. Ma puoi sempre utilizzare solo un piccolo strumento come xclock e controllare lo stato di output.

 if [[ ! xclock ]]; then exit 1 fi pkill xclock 

Ma l'uomo, che è brutto 🙂

Meno Hacky, mettete i seguenti in checkX.c:

 #include <X11/Xlib.h> #include <stdio.h> int main() { Display *display; if( ! (display=XOpenDisplay(NULL) ) ) { return(1); } return 0; } 

Poi:

 gcc -lX11 checkX.c -o checkX chmod +x checkX 

Da ultimo:

 if ./checkX; then echo "We are good to go!" fi 

Ecco un ansible WayToDoIt, non sicuro di quanto sia buono.

  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 ... 

Questo sembra funzionare.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.