【问题标题】:PHP/Ubuntu - QxcbConnection: Could not connect to display abortedPHP/Ubuntu - QxcbConnection:无法连接到显示中止
【发布时间】:2017-11-26 23:49:01
【问题描述】:

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

PHP 代码

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

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

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

QXcbConnection: Could not connect to display
Aborted

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

我是 linux 新手,非常感谢任何帮助。

【问题讨论】:

    标签: php linux bash apache ubuntu


    【解决方案1】:

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

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

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

    export DISPLAY=':0.0'
    

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

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

    【讨论】:

    • 现在:QXcbConnection: Could not connect to display :0.00.0 如果省略列
    【解决方案2】:

    也许您可以在脚本顶部使用类似以下的内容:

    if [ "$(id -un)" != "rohan" ]; then
        exec sudo -u rohan $0 "$@"
    fi
    
    export XAUTHORITY=/home/rohan/.Xauthority
    export DISPLAY=:0
    

    【讨论】:

    • 感谢XAUTHORITY
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多