Pregunta

Estoy intentando iniciar vncviewer en Raspberry Pi usando PHP, donde RPi es el cliente y mi servidor VNC ejecuta MS Windows.

En PHP estoy usando este script para iniciar vncviewer

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

Funciona cuando solo ejecuto el script de shell desde RPi, pero cuando lo intento desde PHP aparece este error:

Error: Can't open display:

¿Existe alguna solución para este error?

¿Fue útil?

Solución

Si estás usando X11, probablemente necesites configurar tu DISPLAY variable.

Los clientes (programas) X11 que necesitan abrir ventanas en un servidor (pantalla) X11 usan esta variable para determinar dónde el cliente debe encontrar el servidor.El modelo cliente/servidor se utiliza aquí porque el servidor proporciona capacidades de visualización de ventanas al cliente.

X incluye la capacidad de mostrar ventanas en servidores remotos a través de una red, aunque el 99,9% de las veces mostrarás cosas en la pantalla principal de la máquina que ejecuta el programa, por lo que normalmente, DISPLAY=localhost:0.0.

El problema es que si DISPLAY es no configurado, un programa no sabe dónde abrir sus ventanas, incluso si hay un servidor X ejecutándose en la misma máquina.Y cuando los programas son ejecutados por cron o los scripts de inicio del sistema o, de hecho, cualquier cosa que no haya sido iniciada por el propio X (incluido un script PHP ejecutado por su servidor web), generalmente no tienen DISPLAY establecido en cualquier cosa.

Entonces ..como notaste en los comentarios, configurando DISPLAY=:0 le dirá a vncviewer dónde enviar sus ventanas.Esta es una forma abreviada de DISPLAY=localhost:0.0.Se supone que el nombre de host, si se excluye, es localhost.Y el .0 al final se refiere al número de pantalla, que también por defecto es cero.Revisar la X documentación para más detalles.

Y como también ha notado en los comentarios, en el entorno donde se ejecuta X (es decir, DISPLAY ya está configurado), es posible que necesites ejecutar xhost + para permitir que los programas no iniciados por X abran ventanas.

Para configurar una variable de entorno en PHP, use algo como:

putenv("DISPLAY=:0");

antes del código que inicia VNC.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top