栗子派昇腾310B开发板套件Atlas 200I DK A2 HDMI 接非1920x1080分辨率显示器画面显示不全排查与解决
一、问题现象
1. 开发板连接 1600×900 显示器后,桌面壁纸、界面内容显示不全(被裁切,四周或某一侧缺一条)。
2. 系统「显示设置」里,分辨率下拉框只有1920×1080一个选项,无法选择其他分辨率。
3. 开机瞬间显示器可能弹出「Input Signal Out of Range」(输入信号超出范围)提示。
二、原因分析
1. 开发板通过HDMI接口连接显示器,未能读取到显示器的EDID信息(xrandr中显示为0mm x 0mm)。
2. 系统因此只提供了一个保底的 1920×1080 模式;该分辨率高于显示器物理分辨率,导致画面被裁切。
3. 系统图形化分辨率配置只有1920x1080模式,只能通过命令行添加自定义显示模式来解决。
三、解决方案(推荐:脚本一键配置)
使用配套脚本 set_show_rate.sh,可一步完成「立即切换 + 开机持久化」,无需手工敲命令。
3.1 操作步骤
1. 将脚本set_show_rate.sh拷贝到开发板(任意目录,例如/home/HwHiAiUser/)。
2. 在开发板本机的图形桌面上打开终端(切勿通过 SSH 远程执行,原因见第六节)。
3. 输入命令su切换到 root 用户(注意:不要加 -)。
4. 执行脚本,参数为想要设置的分辨率(刷新率固定 60Hz):
bash set_show_rate.sh 1600x900
1. 看到「全部完成 ✔」即配置成功,画面会立即变为 1600×900。
2. 输入命令reboot重启开发板,验证分辨率自动保持。
3. 重启后在图形终端执行xrandr --query | head -4,确认输出中有1600x900且带*号。
3.2 常用用法
bash set_show_rate.sh 1920x1080 # 切换到 1920×1080(其他分辨率同理,如 1366x768)
bash set_show_rate.sh --list # 查看当前显示接口、可选分辨率与驱动信息
bash set_show_rate.sh --revert # 撤销脚本的全部改动,恢复系统默认
四、脚本自动完成的配置(原理说明)
脚本内部会自动完成以下 6 件事:
1. 自动探测已连接的显示接口(VGA-1 / HDMI-1 等),无需人工填写。
2. 若驱动自带目标分辨率则直接使用;否则调用cvt自动计算 Modeline 并创建自定义模式。
3. 通过xrandr三条命令立即切换分辨率,当场生效。
4. 写入/usr/local/bin/fix-res.sh:开机自动执行的分辨率设置脚本(内部会等待 X 服务就绪)。
5. 写入/etc/X11/xorg.conf.d/10-monitor.conf:让 X 启动即为目标分辨率,避免开机瞬间先输出 1080p 而触发显示器「输入信号超出范围」提示。
6. 为桌面登录用户写入~/.config/autostart/fix-res.desktop自启项,作为双保险。
五、附:不使用脚本的手动方案
5.1 立即切换分辨率(三条命令依次执行)
xrandr --newmode "1600x900_60" 118.25 1600 1696 1856 2112 900 903 908 934 -hsync +vsync
xrandr --addmode VGA-1 1600x900_60
xrandr --output VGA-1 --mode 1600x900_60
5.2 配置持久化
写入脚本文件,再由自启调用:
sudo cat > /usr/local/bin/fix-res.sh <<'EOF'
#!/bin/bash
xrandr --newmode "1600x900_60" 118.25 1600 1696 1856 2112 900 903 908 934 -hsync +vsync
xrandr --addmode VGA-1 1600x900_60
xrandr --output VGA-1 --mode 1600x900_60
EOF
sudo chmod +x /usr/local/bin/fix-res.sh
mkdir -p ~/.config/autostart
cat > ~/.config/autostart/fix-res.desktop <<'EOF'
[Desktop Entry]
Type=Application
Name=FixResolution
Exec=/usr/local/bin/fix-res.sh
EOF
六、注意事项
1. 必须在开发板「本机图形桌面」的终端里执行,不要通过 SSH 远程执行。
○ 若通过 SSH(尤其带 X11 转发)执行,DISPLAY会变成localhost:10.0这类值,实际操作的是你本地 PC 的显示服务,会报「Configure crtc 0 failed」,属于无效操作。
2. 必须使用 root 权限执行(脚本需写入/usr/local/bin与/etc/X11目录)。
○ 若以普通用户执行,分辨率可以临时切换,但会提示「已跳过持久化配置」,重启后失效。
3. 切换用户请用 su,不要用 su -。
○ su -属于登录式切换,会清空DISPLAY环境变量,导致无法操作显示服务。
4. 脚本若从 Windows 拷贝而来,可能带有\r换行符,导致报错$'\r': command not found,执行一次修复:
sed -i 's/\r$//' set_show_rate.sh
1. 显示接口名以脚本--list的输出为准;脚本会自动识别,通常无需人工指定。
七、常见问题(FAQ)
7.1 报错 Configure crtc 0 failed,且接口名为 default、刷新率为 0.00
● 原因:当前连接的是虚拟显示或 SSH X11 转发端的显示,不是开发板本地屏幕。
● 解决:改用开发板本机图形终端执行;或显式指定显示:
bash set_show_rate.sh -d :0 1600x900
7.2 重启后分辨率又变回 1920×1080
● 原因:自启文件写到了错误的用户目录(桌面会话并非以该用户运行)。
● 解决:确认桌面登录用户,脚本已自动对常见用户各写一份自启项;如仍失效可执行--revert后重新运行。可用以下命令确认桌面登录用户:
ps -eo user=,pid=,comm= | grep -Ei "lxqt|panel|pcmanfm|openbox"
7.3 提示 cvt: command not found
● 解决:安装 xrandr 工具包:
sudo apt install x11-xserver-utils
7.4 切换后画面整体偏移(某一侧被裁掉一条)
● 解决:优先使用显示器菜单里的「自动调整 / Auto-Adjust」;仍不行则用软件平移画面:
xrandr --output VGA-1 --transform 1,0,-20,0,1,-12
● 数值按实际裁切量调整;方向相反时去掉负号;恢复用--transform 1,0,0,0,1,0。
7.5 开机时显示器仍短暂提示 Input Signal Out of Range
● 说明:该提示出现在 X 服务启动前的一瞬间,属瞬时现象,不影响使用;/etc/X11/xorg.conf.d/10-monitor.conf已尽量缩短该过程。
7.6 如何完全恢复系统默认?
bash set_show_rate.sh --revert
总结
昇腾 310B(davinci-mini)开发板走 HDMI接口时读不到 EDID,是导致分辨率只剩 1080p、画面被裁切的直接原因。核心解法是用 cvt/固定 Modeline 自定义分辨率 + xrandr 三连命令即时生效 + 三处开机持久化兜底。本方案已在 1600×900 显示器上实测通过,其他分辨率(如 1366×768、1920×1080)同理可复用。
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐


所有评论(0)