通过 php 启动ightvnc查看器
-
21-12-2019 - |
题
我正在尝试使用 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 的代码之前。