Domanda

Sto cercando di avviare VNCViewer su Raspberry PI utilizzando PHP, dove RPI è il client e il mio server VNC esegue MS Windows.

In PHP Sto usando questo script per avviare VNCViewer

$cmd="echo password | vncviewer -autopass " .$ip;
shell_exec($cmd);
.

funziona quando eseguo lo script della shell da RPI, ma quando proverò da PHP ottengo questo errore:

Error: Can't open display:
.

C'è qualche soluzione per questo errore?

È stato utile?

Soluzione

Se stai usando X11, è probabile che probabilmente è necessario impostare la variabile DISPLAY.

X11 Client (Programmi) che devono aprire Windows su un server X11 (Display) Utilizzare questa variabile per determinare dove il client deve trovare il server. Il modello client / server viene utilizzato qui perché server fornisce funzionalità di visualizzazione della finestra al client .

X Include la possibilità di visualizzare Windows su server remoti su una rete, anche se il 99,9% del tempo verrà visualizzato le cose sul display principale sulla macchina che esegue il programma, quindi, generalmente, DISPLAY=localhost:0.0.

La cattura è che se DISPLAY è non impostato, un programma non sa dove aprire le sue finestre, anche se c'è un server X che funziona sulla stessa macchina. E quando i programmi vengono eseguiti da cron o gli script di avvio del sistema o infatti tutto ciò che non è stato lanciato da x stesso (incluso uno script PHP eseguito dal server Web), di solito non hanno DISPLAY impostato su nulla.

Allora .. Come hai notato nei commenti, l'impostazione DISPLAY=:0 lo dirà in VNCViewer dove inviare le sue finestre. Questa è una forme corta di DISPLAY=localhost:0.0. Il nome host, se escluso, si presume che sia localhost. E il .0 alla fine si riferisce al numero dello schermo, che è anche predefinito a zero. Dai un'occhiata al x documentazione per maggiori dettagli .

E come hai anche notato nei commenti, nell'ambiente in cui X è in esecuzione (cioè DISPLAY è già impostato), potrebbe essere necessario eseguire xhost + per consentire ai programmi non lanciati da X per aprire Windows.

Per impostare una variabile di ambiente in PHP, usa qualcosa come:

putenv("DISPLAY=:0");
.

Prima del codice che avvia VNC.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top