我正在尝试使用 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归因
不隶属于 StackOverflow
scroll top