我在我的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; www-data'用户(使用' whoami'进行验证),这就是为什么我的exec中有sudo的原因。我已经调整并修改了两个用户的权限无济于事。当我从终端运行php文件作为' www-data'用户,它不会抛出任何错误,但除了在脚本的开头和结尾显示随机回显标签以进行调试之外不会做任何事情。
我是一名Linux新手,所以非常感谢任何帮助。
答案 0 :(得分:4)
好的,我终于设法解决了。
问题不在于权限,而在于环境变量。
我必须在我的bash脚本中包含以下行
export DISPLAY=':0.0'
请注意,在终端中设置变量并运行脚本不起作用。该行必须在脚本中。
我认为这是因为如果您以非root用户身份运行脚本,则不会设置DISPLAY变量,这是Apache / PHP的情况,其中脚本作为' www-data&执行#39;用户。
答案 1 :(得分:2)
也许您可以在脚本顶部使用以下内容:
if [ "$(id -un)" != "rohan" ]; then
exec sudo -u rohan $0 "$@"
fi
export XAUTHORITY=/home/rohan/.Xauthority
export DISPLAY=:0