Frage

Ich versuche, vncviewer auf Raspberry Pi mit PHP zu starten, wobei RPi der Client ist und auf meinem VNC-Server MS Windows läuft.

In PHP verwende ich dieses Skript, um den vncviewer zu starten

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

Es funktioniert, wenn ich das Shell-Skript nur von RPi aus ausführe, aber wenn ich es von PHP aus versuche, erhalte ich diese Fehlermeldung:

Error: Can't open display:

Gibt es eine Problemumgehung für diesen Fehler?

War es hilfreich?

Lösung

Wenn Sie X11 verwenden, müssen Sie wahrscheinlich Ihre festlegen DISPLAY Variable.

X11-Clients (Programme), die Fenster auf einem X11-Server öffnen (anzeigen) müssen, verwenden diese Variable, um zu bestimmen, wo der Client den Server finden soll.Hier wird das Client/Server-Modell verwendet, da die Server Bietet Fensteranzeigefunktionen für Klient.

X bietet die Möglichkeit, Fenster auf Remote-Servern in einem Netzwerk anzuzeigen. In 99,9 % der Fälle werden Sie jedoch Dinge auf dem Hauptbildschirm des Computers anzeigen, auf dem das Programm ausgeführt wird. DISPLAY=localhost:0.0.

Der Haken ist, dass if DISPLAY Ist nicht eingestellt ist, weiß ein Programm nicht, wo es seine Fenster öffnen soll, selbst wenn auf demselben Rechner ein X-Server läuft.Und wenn Programme ausgeführt werden cron oder die Systemstartskripte oder eigentlich alles, was nicht von X selbst gestartet wurde (einschließlich eines PHP-Skripts, das von Ihrem Webserver ausgeführt wird), haben sie normalerweise nicht DISPLAY auf irgendetwas einstellen.

Also ..Wie Sie in den Kommentaren bemerkt haben, Einstellung DISPLAY=:0 teilt vncviewer mit, wohin seine Fenster gesendet werden sollen.Dies ist eine Kurzform von DISPLAY=localhost:0.0.Wenn der Hostname ausgeschlossen ist, wird davon ausgegangen, dass er „localhost“ ist.Und das .0 am Ende bezieht sich auf die Bildschirmnummer, die standardmäßig ebenfalls Null ist.Besuche die Weitere Informationen finden Sie in der X-Dokumentation.

Und wie Sie auch in den Kommentaren bemerkt haben, ist in der Umgebung, in der X ausgeführt wird (d. h. DISPLAY bereits festgelegt ist), müssen Sie möglicherweise ausführen xhost + um Programmen, die nicht von X gestartet wurden, das Öffnen von Fenstern zu ermöglichen.

Um eine Umgebungsvariable in PHP festzulegen, verwenden Sie etwas wie:

putenv("DISPLAY=:0");

vor dem Code, der VNC startet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top