通过php启动tightvnc查看器

时间:2013-11-16 14:40:45

标签: php x11 vnc vnc-viewer

我正在尝试使用PHP在Raspberry Pi上启动vncviewer,其中RPi是客户端,而我的VNC服务器运行MS Windows。

在PHP中,我使用此脚本启动vncviewer

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

当我只从RPi运行shell脚本时它可以工作,但是当从PHP尝试它时我得到了这个错误:

Error: Can't open display:

此错误是否有解决方法?

1 个答案:

答案 0 :(得分:0)

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

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

X包括通过网络在远程服务器上显示窗口的功能,但99.9%的时间您将在运行该程序的计算机的主显示屏上显示内容,通常是DISPLAY=localhost:0.0。< / p>

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

所以..正如您在评论中所指出的那样,设置DISPLAY=:0将告诉vncviewer将窗口发送到何处。这是DISPLAY=localhost:0.0的缩写。主机名(如果已排除)将被假定为localhost。最后的.0指的是屏幕编号,默认为零。查看X documentation for more details

正如您在评论中所指出的那样,在运行X的环境中(即已设置DISPLAY),您可能需要运行xhost +以允许X未启动的程序打开窗户。

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

putenv("DISPLAY=:0");

在启动VNC的代码之前。