Avvio del visualizzatore TightVnc tramite PHP
-
21-12-2019 - |
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?
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.