繁体   English   中英

通过PHP启动tightvnc查看器

[英]starting tightvnc viewer via php

我正在尝试使用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,则可能需要设置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的代码之前。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM