0

I'm trying to start vncviewer on Raspberry Pi using PHP, where RPi is the client and my VNC server runs MS Windows.

In PHP I'm using this script to start the vncviewer

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

It works when I only run the shell script from RPi, but when try it from PHP I get this error:

Error: Can't open display:

Is there any workaround for this error ?

4

1 回答 1

0

如果您使用 X11,您可能需要设置DISPLAY变量。

需要在 X11 服务器(显示器)上打开窗口的 X11 客户端(程序)使用此变量来确定客户端应在何处找到服务器。此处使用客户端/服务器模型,因为服务器向客户端提供窗口显示功能。

X 包括通过网络在远程服务器上显示窗口的能力,尽管 99.9% 的时间您将在运行程序的机器上的主显示器上显示内容,所以通常,DISPLAY=localhost:0.0.

问题是如果DISPLAY没有设置,程序不知道在哪里打开它的窗口,即使在同一台机器上运行着 X 服务器。当程序由cron系统启动脚本或实际上不是由 X 本身启动的任何东西(包括由您的 Web 服务器运行的 PHP 脚本)运行时,它们通常没有DISPLAY设置任何内容。

所以..正如您在评论中指出的那样,设置DISPLAY=:0将告诉 vncviewer 将其窗口发送到哪里。这是DISPLAY=localhost:0.0. 如果排除主机名,则假定为 localhost。最后的.0是指屏幕编号,也默认为零。查看X 文档以获取更多详细信息

并且正如您在评论中所指出的,在 X 正在运行的环境中(即DISPLAY已经设置),您可能需要运行xhost +以允许不是由 X 启动的程序打开窗口。

要在 PHP 中设置环境变量,请使用以下内容:

putenv("DISPLAY=:0");

在启动 VNC 的代码之前。

于 2013-11-19T19:07:28.590 回答