You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu(XAMPP环境)下通过PHP Exec调用xrandr实现屏幕旋转失败的问题排查

解决PHP exec调用xrandr失效的问题

这个问题我之前也碰到过!核心原因是XAMPP里的Apache服务运行的用户和你在终端操作的用户不是同一个,而且X11(Ubuntu的图形系统)默认只允许当前登录用户访问显示设备,所以PHP脚本调用xrandr的时候拿不到必要的权限和环境变量。下面是一步步的解决思路:

1. 先排查错误信息

首先别盲目试命令,先让PHP输出执行xrandr时的错误日志,这样能精准定位问题。把你的代码改成这样:

<?php
// 把错误输出重定向到标准输出,方便捕获
exec('xrandr --output HDMI-1 --rotate left 2>&1', $output, $returnCode);
echo "返回码: " . $returnCode . "<br>";
echo "输出信息:<br>";
foreach($output as $line) {
    echo $line . "<br>";
}
?>

访问这个PHP页面后,你大概率会看到类似Can't open display的错误,这就确认是X11权限的问题了。

2. 临时授权Apache用户访问X显示

Ubuntu里XAMPP的Apache通常以www-data或nobody用户运行,先确认一下:
在终端执行ps aux | grep apache,找到Apache进程对应的用户(比如第一列的用户名)。

假设是www-data,在终端执行以下命令,临时允许该用户访问当前的X显示:

xhost +local:www-data

之后再刷新PHP页面,应该就能看到xrandr生效了!不过这个设置是临时的,重启机器后会失效,接下来看永久解决方案。

3. 永久配置X11权限

方法一:在启动脚本中添加xhost授权

编辑用户的启动脚本(比如~/.bashrc或者~/.profile),添加一行:

xhost +local:www-data

这样每次登录系统时,都会自动授权www-data访问X显示。

方法二:给Apache设置环境变量

编辑XAMPP的Apache配置文件(通常在/opt/lampp/etc/httpd.conf),在文件末尾添加:

SetEnv DISPLAY :0
SetEnv XAUTHORITY /home/你的用户名/.Xauthority

注意把/home/你的用户名/.Xauthority换成你实际的用户路径,这个文件是X11的授权文件,需要确保Apache用户(www-data)有读取权限:

sudo chmod o+r /home/你的用户名/.Xauthority

重启Apache服务(sudo /opt/lampp/apachectl restart),之后PHP脚本就能稳定调用xrandr了。

4. 注意安全风险

如果上面的方法还是不行,有人会建议给www-data添加sudo权限执行xrandr,但非常不推荐——哪怕是离线应用,给Web服务器用户sudo权限都有极大的安全隐患。除非你完全确定没有任何外部访问的可能,否则尽量不用这个方案。如果真的要试,编辑sudoers文件:

sudo visudo

添加一行:

www-data ALL=(ALL) NOPASSWD: /usr/bin/xrandr

然后PHP里的命令改成sudo xrandr ...,但一定要谨慎!

内容的提问来源于stack exchange,提问作者JGUK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 11:47:28