【问题标题】:PHP shell_exec won't work with gnomePHP shell_exec 不适用于 gnome
【发布时间】:2016-03-08 08:49:57
【问题描述】:

在运行alert 9 的终端窗口中,我会弹出一个提示9

但是,在 shell_exec 中运行 alert 9 没有任何效果。


我应该注意什么?

顺便提一下:其他与 GUI 交互的命令都不起作用。我正在使用 gnome 3.16.3


更新

我的具体目标是使用 gnome 环境运行 xdotool 命令。 (xdotool key ctrl+shift+u)

【问题讨论】:

  • @SteJ 你的意思是$DISPLAY
  • 哎呀!是的,我确实是说$DISPLAY -- 抱歉
  • 我建议 PHP 不知道您的 X11 环境。尝试在脚本中设置 $DISPLAY 环境变量?
  • 这听起来像是一个可能的解决方案。如何正确部署此方法?
  • 根据@Halayem Anis 的回答更新赏金描述:答案不一定要使用具体命令alert 9

标签: php bash gnome shell-exec


【解决方案1】:

我相信 PHP 正在启动一个不知道您的 X11 环境的 shell,您需要设置 $DISPLAY 环境变量。尝试对您的 shell_exec 进行以下修改:

shell_exec("DISPLAY=\":0\" alert 9");

【讨论】:

  • 很好的答案。但是,运行此命令也不会从 shell_exec 中产生任何结果。通过 gnome-terminal btw 手动执行时,它可以工作。
  • 您的 PHP 脚本是否以与您登录并启动 X 的用户相同的用户身份运行?您的 X 会话将只授权给您的用户;您可以使用xauth 命令来授权其他用户和主机,但这可能是一个真正的痛苦开始工作。你有没有从 shell_exec 返回任何错误?
  • 我绝对没有输出,没有错误。如果我从 shell_exec 询问 whoami,我是 www-data。但是,我可以使用 sudo -u myuser whoami ( -> myuser ) 切换到我的用户,这是可行的方法吗?
  • 是的,wwwdata 将无法访问您的 X 服务器。我通常不建议在 php 脚本中使用 sudo 命令,因为这是一个等待发生的漏洞,但如果该脚本仅适用于您并且不会公开提供,那么它至少会证明这确实是问题。最终的答案是将 www-data 添加到您的 xauth 中;我已经有很长时间没有这样做了,所以我对细节有点模糊。 Manpage is here
  • 另一种测试这个理论的方法是以 www-data 身份登录到您的 x 会话 但不建议这样做 - www-data 通常配置为没有专门的密码以防止用户以此用户身份登录。
【解决方案2】:

alert 不是标准命令,至少在 RedHatSolarisAIX 上是这样,所以你必须在你的质疑它是专有命令/程序

您的alert 脚本/程序不考虑刷新标准或文件输出中的文本数据,因此您不能使用管道 | 进行任何重定向,或重定向 >,最后,php函数shell_exec()可以捕获任何东西

也许您可以重定向图形数据(我不确定),但通常它由图形服务器使用

【讨论】:

  • 谢谢,您的信息很有价值。请查看我对这个问题的更新。
【解决方案3】:

alert 不是命令,而是notify-send 的别名。别名仅在交互式 shell 中加载,因此测试 shel_exec 不是最佳选择。

这 2 个命令可以很好地与 php-cli 配合使用:

$ php -r "shell_exec('notify-send 9');"
$ php -r "shell_exec('xdotool key ctrl+shift+u');"

第一个在通知区域弹出9,最后一个输出下划线'u'。

带有 mod_php 的 Apache 是一个守护进程,init 的子进程,它对 xserver 一无所知。例如,如果您从终端 within xserver(如 $ php -S 0:8080)运行 php 内置 Web 服务器,它会按预期工作。

【讨论】:

  • 它们都在 gnome 环境中的终端内工作得很好。但是,从 LAMP 中,它们仍然无法与 GUI 交互。
  • 如果 LAMP 是带有 mod_php 的 apache,它是一个守护进程,init 的子进程,它对 xserver 一无所知。例如,如果您从终端 within xserver(如 $ php -S 0:8080)运行 php 内置 Web 服务器,它将按预期工作。
猜你喜欢
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-31
  • 2019-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多