Question

J'essaie de démarrer vncviewer sur Raspberry Pi en utilisant PHP, où RPi est le client et mon serveur VNC exécute MS Windows.

En PHP, j'utilise ce script pour démarrer vncviewer

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

Cela fonctionne lorsque j'exécute uniquement le script shell depuis RPi, mais lorsque je l'essaye depuis PHP, j'obtiens cette erreur :

Error: Can't open display:

Existe-t-il une solution de contournement pour cette erreur ?

Était-ce utile?

La solution

Si vous utilisez X11, vous devrez probablement configurer votre DISPLAY variable.

Les clients (programmes) X11 qui doivent ouvrir des fenêtres sur un serveur X11 (affichage) utilisent cette variable pour déterminer où le client doit trouver le serveur.Le modèle client/serveur est utilisé ici car le serveur fournit des capacités d'affichage de fenêtre au client.

X inclut la possibilité d'afficher des fenêtres sur des serveurs distants sur un réseau, bien que 99,9 % du temps, vous afficherez des éléments sur l'écran principal de la machine exécutant le programme, donc généralement, DISPLAY=localhost:0.0.

Le problème, c'est que si DISPLAY est pas défini, un programme ne sait pas où ouvrir ses fenêtres, même s'il y a un serveur X en cours d'exécution sur la même machine.Et quand les programmes sont gérés par cron ou les scripts de démarrage du système ou en fait tout ce qui n'a pas été lancé par X lui-même (y compris un script PHP exécuté par votre serveur Web), ils n'ont généralement pas DISPLAY réglé sur n'importe quoi.

Donc ..comme vous l'avez noté dans les commentaires, en définissant DISPLAY=:0 dira à vncviewer où envoyer ses fenêtres.Ceci est une forme abrégée de DISPLAY=localhost:0.0.Le nom d'hôte, s'il est exclu, est supposé être localhost.Et le .0 à la fin fait référence au numéro d'écran, qui est également zéro par défaut.Vérifiez Documentation X pour plus de détails.

Et comme vous l'avez également noté dans les commentaires, dans l'environnement dans lequel X s'exécute (c'est-à-dire DISPLAY est déjà défini), vous devrez peut-être exécuter xhost + pour permettre aux programmes non lancés par X d'ouvrir des fenêtres.

Pour définir une variable d'environnement en PHP, utilisez quelque chose comme :

putenv("DISPLAY=:0");

avant le code qui lance VNC.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top