通过php启动tightvnc查看器

通过php启动tightvnc查看器,php,x11,vnc,vnc-viewer,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: 是否有解决此错误的方法?如果使用X1

我正在尝试使用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:

是否有解决此错误的方法?

如果使用X11,可能需要设置
显示变量

需要在X11服务器(显示器)上打开windows的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正在运行的环境中(即,
DISPLAY
已设置),您可能需要运行
xhost+
,以允许X未启动的程序打开windows

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

putenv("DISPLAY=:0");

在启动VNC的代码之前。

您在R-Pi上运行的是什么操作系统?如果您使用的是X11,PHP中的
DISPLAY
环境变量的值是多少?这似乎是一个X配置问题,与PHP、Pi或vnc查看器无关。首先,在弄清楚
DISPLAY
变量的原因后,您可能应该
manxhost
。我正在使用Raspbian for rpith,问题确实出在DISPLAY变量上<代码>xhost+;导出显示=:0;vncviewer
非常好。:-)我会把我的评论转换成答案,这样你就可以结束这个问题了。