Ubuntu20.04 SSH执行xrandr报Can't open display问题求助
故障原因
Ubuntu 20.04 相比18.04新增了显示服务相关的安全限制,直接沿用旧命令会触发Can't open display错误,核心诱因有三点:
- 默认优先使用Wayland显示协议,xrandr仅兼容传统Xorg/Xwayland栈
- SSH登录会话默认不持有本地X服务的访问授权,仅配置
DISPLAY变量无法通过权限校验 - 桌面会话的DISPLAY编号动态分配,硬编码
:0/:1无法保证匹配到当前活跃会话
解决步骤
1. 切换默认显示服务为Xorg
Wayland环境下xrandr无法直接管理显示输出,先修改GDM配置禁用Wayland:
- 编辑配置文件:
sudo nano /etc/gdm3/custom.conf - 找到配置项
#WaylandEnable=false,删除行首的#注释符,保存退出 - 重启显示服务生效:
sudo systemctl restart gdm3
重启后在Ubuntu本地登录桌面账户,锁屏状态不影响后续操作。
2. 配置X会话访问权限与正确环境变量
SSH连接到Ubuntu后,不要硬编码DISPLAY值,通过以下命令自动获取当前活跃桌面会话的正确参数:
# 提取当前用户的本地桌面会话ID SESSION_ID=$(loginctl list-sessions | grep $(whoami) | grep tty | awk '{print $1}') # 导入会话对应的环境变量 export XDG_SESSION_ID=$SESSION_ID export DISPLAY=$(cat /proc/$(pgrep -x Xorg)/environ | tr '\0' '\n' | grep ^DISPLAY= | cut -d= -f2) # 自动匹配Xauthority文件路径,兼容Xorg和Xwayland场景 export XAUTHORITY=$(ls /run/user/$(id -u)/.mutter-Xwaylandauth.* 2>/dev/null || echo /run/user/$(id -u)/xauthority)
3. 验证功能
环境变量加载完成后执行xrandr,如果正常输出所有显示接口的分辨率、连接状态信息,说明配置生效,即可正常执行显示调整指令。
一键执行命令
可以直接在Windows端SSH调用,不需要手动登录Ubuntu配置环境:
ssh <user>@<Ubuntu IP> "bash -c 'SESSION_ID=\$(loginctl list-sessions | grep \$(whoami) | grep tty | awk \"{print \\\$1}\"); export XDG_SESSION_ID=\$SESSION_ID; export DISPLAY=\$(cat /proc/\$(pgrep -x Xorg)/environ | tr \"\\0\" \"\\n\" | grep ^DISPLAY= | cut -d= -f2); export XAUTHORITY=\$(ls /run/user/\$(id -u)/.mutter-Xwaylandauth.* 2>/dev/null || echo /run/user/\$(id -u)/xauthority); xrandr --auto && xrandr --output HDMI-0 --off'"
注意事项
- 执行指令前必须保证Ubuntu端已经用对应账户登录到本地桌面,未进入桌面会话时不存在活跃X服务,xrandr无法运行
- 如果使用LightDM等其他显示管理器,不需要修改GDM配置,直接从第二步配置环境变量即可
内容的提问来源于stack exchange,提问作者klhiwe
相关产品推荐
相关产品推荐

