一、问题现象

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)同理可复用。

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐