PHP/Ubuntu-QxcbConnection : Could not connect to display aborted

标签 php linux bash apache ubuntu

我在我的 apache/ubuntu 服务器上使用 php 脚本来调用 bash 脚本,该脚本触发应用程序将 python 脚本作为参数 (IDAPro)。

PHP代码

chdir('/var/www/dashboard/team/static/sql');
$output = exec('sudo -u rohan ./start.sh');

现在,如果我从终端运行 PHP 文件,上面的代码可以正常工作——但前提是我以根用户身份运行它。不用说,如果我直接执行 bash 文件,它也会运行。

但是当我在浏览器上运行 PHP 文件时,它不起作用并且我在 apache 错误日志中收到以下错误:

QXcbConnection: Could not connect to display
Aborted

我知道 Apache/php 作为“www-data”用户运行(使用“whoami”来验证),这就是为什么我在我的 exec 中有 sudo。我已经调整并修改了两个用户的权限,但无济于事。当我以“www-data”用户身份从终端运行 php 文件时,它没有抛出任何错误,但除了在脚本的开头和结尾显示随机回显标记 I 以对其进行调试外,它什么也没做。

我是一个 linux 新手,所以非常感谢任何帮助。

最佳答案

好吧,我终于设法解决了。

问题不在于权限,而在于环境变量。

我必须在我的 bash 脚本中包含以下行

export DISPLAY=':0.0'

请注意,在终端中设置变量并运行脚本是行不通的。该行需要在脚本内。

我假设这是因为如果您以 root 以外的任何用户身份运行脚本,则未设置 DISPLAY 变量,这是在以“www-data”用户身份执行脚本的 Apache/PHP 中发生的情况。

关于PHP/Ubuntu-QxcbConnection : Could not connect to display aborted,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44720732/

相关文章:

php - android 的 api 不工作

php - 使用 TbActiveForm 选择列表中的动态选项

Linux 在 linux 上配置 web 服务器端口

python - 可以(安全地)从 linux 上的自定义 python 安装中删除什么,以使其更小

linux - 如何编写脚本,以便将输出用作输入?

linux - 如何从命令行检查 Mercurial 标签是否已经存在?

Php - 连接到远程数据库非常慢

php - Upstart 的 Yii 控制台给我错误

linux - logrotate.conf 中 "daily"关键字的用途是什么

python - 将二进制字符串 (ASCII) 转换为二进制文件