[hardware development] 关于联想小新pro14 屏幕只能选60hz的情况解决方案参考
Tofloor
poster avatar
166******12
deepin
2025-08-09 00:59
Author

小新pro14 2023锐龙版之前用各种发行部都无法开启120hz也包括deepin各个版本直到25,期间我在

Ubuntu论坛发现个方法在Ubuntu24和25上成功开启120hz,接下来说下我的根据https://forum.ubuntu.com.cn/viewtopic.php?t=494268这个帖子的方法在deepin25成功开启120hz的方法

首先

需要安装edid-decode这个软件包,但是deepin源里没有,需要手动去https://packages.debian.org/sid/edid-decode页面底下下amd64的deb然后安装,我是直接deepin双击安装的,没用命令行并且安装期间没有报错正常成功安装。

接下来检查显示器的edid数据

edid-decode < /sys/class/drm/card0-eDP-1/edid 而card0-eDP-1这个根据自己机型,我在Ubuntu上是card1-eDP-1,但是到了deepin就变成card0-eDP-1了(也可以用ls /sys/class/drm/ 这个命令去看)一个个试能出数据就行。

看最后的部分有没有这么一段代码:

Block 1, DisplayID Extension Block:
  Version: 1.3
  Extension Count: 0
  Display Product Type: Extension Section
  Video Timing Modes Type 1 - Detailed Timings Data Block:
    DTD:  2880x1800  120.000207 Hz  16:10   228.720 kHz    695.310000 MHz (aspect 16:10, no 3D stereo)
               Hfront   48 Hsync  32 Hback   80 Hpol N
               Vfront    3 Vsync   6 Vback   97 Vpol N
  Checksum: 0xf0 (should be 0xf8)
Checksum: 0x98

看DTD开头那行,表示这段是针对2880x1800分辨率下120hz刷新率的设置,但后面的checksum校验码错了,所以linux认为这段是无效数据,忽略了这段,导致没有120hz的选项。

当确认是edid数据的问题后,就可以手动修复了。先确认edid原始数据是不是这样,一个字符都不能错。这个原始数据会显示在上面edid-decode命令执行后的最开处

00 ff ff ff ff ff ff 00 0e 6f 16 14 00 00 00 00
00 20 01 04 b5 1e 13 78 03 21 15 a8 53 49 9c 25
0f 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 ce 87 40 a0 b0 08 6a 70 30 20
36 00 2d bc 10 00 00 18 00 00 00 fd 00 28 78 e5
e5 46 01 0a 20 20 20 20 20 20 00 00 00 fe 00 43
53 4f 54 20 54 33 0a 20 20 20 20 20 00 00 00 fe
00 4d 4e 45 30 30 37 5a 41 31 2d 35 0a 20 01 af

70 13 79 00 00 03 01 14 9a 0f 01 05 3f 0b 9f 00
2f 00 1f 00 07 07 69 00 02 00 05 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 f0 98

(小新pro14 同款LCD ips屏的可以参考这个edid数据,应该好几代用的这个屏幕)如果有任何不一致,不要继续再执行下面的命令,完全一致的话,就可以动手修正checksum,生成新的edid数据了。card0-eDP-1根据自己的情况写

xxd -p /sys/class/drm/card0-eDP-1/edid | sed -E 's/f098$/f890/g' | xxd -p -r > edid_new.bin

为防万一,再用edid-decode检查一下生成的edid_new.bin文件,确认一下是不是修正了checksum的错误代码:

edid-decode < edid_new.bin

如果没问题,把生成的edid_new.bin文件复制到/lib/firmware目录下面代码(因为deepin25引入了磐石系统的“只读保护”导致cp命令会报错无法写入,需要执行sudo deepin-immutable-writable enable -d /usr来解除保护,并且reboot重启系统接着执行cp命令,重新启用保护就sudo deepin-immutable-writable disable)

sudo cp edid_new.bin /lib/firmware/

然后让内核启动时使用这个edid数据。

编辑/etc/default/grub文件,在GRUB_CMDLINE_LINUX那行后面加上drm.edid_firmware=eDP-1:edid_new.bin,改成这个样子代码:

GRUB_CMDLINE_LINUX="drm.edid_firmware=eDP-1:edid_new.bin"

如果不是card0-eDP-1,这里也别写eDP-1(前面的cardX的X可以不同),写实际的情况
也可以写在GRUB_CMDLINE_LINUX_DEFAULT里,但只会对每个内核的默认启动项有效

更新grub配置代码:

sudo update-grub

创建个可执行的/etc/initramfs-tools/hooks/edid脚本程序(可以用touch XXX创建,然后再编辑文件内容)内容如下代码:

#!/bin/sh
cp --parents /lib/firmware/edid_new.bin ${DESTDIR}

确保可执行权限代码:

sudo chmod 755 /etc/initramfs-tools/hooks/edid

然后更新initrd,如果只更新当前内核的,把后面的-k all去掉代码:

sudo update-initramfs -u -k all

该做的就做完了,可以重启看效果了 reboot,

重启后可以去显示设置里查看会多一个120hz的选项选上就行,之前的deepin23也可以用这个方法

主要内容参考摘自这个文章https://forum.ubuntu.com.cn/viewtopic.php?t=494268

Reply Favorite View the author
All Replies
忘怀
deepin
2025-08-09 01:33
#1

很好的文章

我有另外一种办法

就是通过

cvt 2880 1800 120生成一个modeline

sudo xrandr --newmode "amodename"(编个名称) 后面填入上面输出的结果(比如 421.20 3120 3128 3160 3250 2080 2114 2122 2160 -hsync -vsync)

sudo xrandr --addmode eDP-1(对应内屏,其他接口看实际情况) "amodename"(和上面编的名称一样)

sudo xrandr --output eDP-1(对应内屏) -mode "amodename"(和上面编的名称一样)

生效

Reply View the author
jjcui8595
deepin
Resources Team Moderator
2025-08-09 06:10
#2

大赞

Reply View the author