PHP/Ubuntu - QxcbConnection:无法连接到显示中止

Roh*_*ood 6 php linux apache bash ubuntu

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

PHP代码

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

现在,如果我从终端运行PHP文件,上面的代码工作正常 - 但只有当我以root用户身份运行它时.不用说,如果我直接执行bash文件,它也会运行.

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

QXcbConnection: Could not connect to display
Aborted
Run Code Online (Sandbox Code Playgroud)

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

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

Roh*_*ood 4

好吧,我终于成功解决了。

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

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

export DISPLAY=':0.0'
Run Code Online (Sandbox Code Playgroud)

请注意,在终端中设置变量并运行脚本不起作用。该行需要位于脚本内部。

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

  • 现在:“QXcbConnection:无法连接显示:0.0”或“0.0”(如果省略该列) (5认同)