【问题标题】:starting tightvnc viewer via php通过php启动tightvnc查看器
【发布时间】:2013-11-20 03:12:55
【问题描述】:

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

这个错误有什么解决方法吗?

【问题讨论】:

  • 您在 R-Pi 上运行什么操作系统?如果您使用的是 X11,PHP 中 DISPLAY 环境变量的值是多少?这似乎是一个 X 配置问题,与 PHP、Pi 或 vnc-viewer 无关。在您弄清楚 DISPLAY 变量是什么之后,您可能应该首先使用 man xhost
  • 我正在使用 Raspbian 进行 RPI
  • 问题确实出在 DISPLAY 变量上。 xhost +; export DISPLAY=:0;vncviewer
  • 优秀。 :-) 我会将我的评论转换为答案,以便您关闭问题。

标签: php x11 vnc vnc-viewer


【解决方案1】:

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

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

X 包括通过网络在远程服务器上显示窗口的能力,尽管 99.9% 的时间您将在运行程序的机器上的主显示器上显示内容,因此通常是DISPLAY=localhost:0.0

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

所以 .. 正如您在 cmets 中所述,设置 DISPLAY=:0 将告诉 vncviewer 将其窗口发送到何处。这是DISPLAY=localhost:0.0 的简写形式。如果排除主机名,则假定为 localhost。而末尾的.0 指的是屏幕编号,也默认为零。查看X documentation for more details

正如您在 cmets 中也注意到的,在 X 正在运行的环境中(即 DISPLAY 已设置),您可能需要运行 xhost + 以允许不是由 X 启动的程序打开窗口。

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

putenv("DISPLAY=:0");

在启动 VNC 的代码之前。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 2014-10-04
    • 1970-01-01
    • 2018-07-20
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多