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

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:

  1. 编辑配置文件:
    sudo nano /etc/gdm3/custom.conf
  2. 找到配置项#WaylandEnable=false,删除行首的#注释符,保存退出
  3. 重启显示服务生效:
    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:21:49