我在我的 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/