如何从网站使用 PHP 启动 GUI 程序

如何从网站使用 PHP 启动 GUI 程序

我的公司有一些运行的 Ubuntu 12.04,没有连接显示器,并且位于不同的防火墙后面。

该服务器上本地网站的访问者应该能够启动一个像Teamviewer那里一样的 GUI 程序,以便为我(或其他支持管理员)提供图形访问。

我想我必须以某种方式为 PHP 用户 www-data 提供 sudo 访问权限,才能通过gksu.

我必须如何配置sudoers才能实现这一目标?

我如何从该服务器上运行的 PHP 脚本中调用它?

当然,我自己可以轻松地通过 ssh 登录或通过管道将 X 会话连接到我的计算机,但我需要这样的 Teamviewer 登录,因为这是通过所有服务器上不同防火墙的最简单方法。

答案1

免责声明:我对 Teamviewer 产品一无所知,但是,我会将其视为您想要运行的任何旧 x-windows 应用程序。

如果您只想启动 GUI 应用程序,请考虑使用.xinitrc或 (在某些桌面环境中)~/.config/autostart/

但是...看起来您想以交互方式启动该程序?也就是说,您希望根据请求运行它,并且它需要从您的桌面环境运行。

首先——我不建议您实际上通过 sudoers 向您的 www-data 用户授予任何特殊权限,特别是如果您将此用户用于具有面向公众的服务的网络服务器。

我建议创建一个用户“sysadmin”或类似的用户,并赋予他们适当的权限。

然后让 PHP 脚本执行一些影响很小的操作,例如在 /tmp/ 中放置一个标志文件并让另一个用户对该文件进行操作。

所以我有这个 PHP 脚本:

<?php
   // Trigger for the team view launcher.
   file_put_contents("/tmp/teamviewflag","1");
?>

然后我会有一个 cron 作业,例如:

* * * * * /home/sysadmin/.jobs/teamstarter.sh

(警告:此脚本每分钟仅运行一次。因此您最多必须等待一分钟。您可以让此脚本循环运行。)

然后我就有了/home/sysadmin/.jobs/teamstarter.sh

#!/bin/bash
if [ -f /tmp/teamviewflag ]
  then
    env DISPLAY=:1 XAUTHORITY=/home/sysadmin/.Xauthority /path/to/teamviewer
    rm /tmp/teamviewflag
fi

这将使其根据 PHP 脚本的需要运行。您可能需要打磨掉一些粗糙的边缘:

  • 每次运行 PHP 脚本时都会运行 teamviewer。
  • bash 脚本的第 4 行假设您知道该DISPLAY数字。
  • 您可能还希望有一种“锁定文件”,上面写着“嘿团队查看器正在运行”,并根据该文件是否存在来运行您的脚本。并且有一项工作是在 teamviewer 完成后跟进并清理锁定文件。

以下是上述脚本循环运行的示例:

#!/bin/bash
while :
do
  if [ -f /tmp/teamviewflag ]
    then
      env DISPLAY=:1 XAUTHORITY=/home/sysadmin/.Xauthority /path/to/teamviewer
      rm /tmp/teamviewflag
  fi
  # Sleep for a half second.
  usleep 500000  
done

您可以“很好地”运行它(因此它具有较低的调度优先级),例如:

nice -n 19 /home/sysadmin/.jobs/teamstarter.sh

如果你想在启动时启动它,你可以将它放在 cron 选项卡上,如下所示:

@reboot /home/sysadmin/.jobs/teamstarter.sh

相关内容