@
richiewu 抱歉回复这么晚
我的修复方案是这个
第 1 步:创建新的 cmdline 内容(去掉冗余,加入 acpi_osi 伪装)
sudo sh -c 'printf " rtc_cmos.use_acpi_alarm=1 resume=/dev/mapper/root resume_offset=21427144 quiet splash cryptdevice=PARTUUID=11b635b3-5873-4e5a-bd2f-fd5b18017601:root root=/dev/mapper/root zswap.enabled=0 rootflags=subvol=@ rw rootfstype=btrfs acpi_osi=! acpi_osi=\"Windows 2015\"\n" > /tmp/new_cmdline.bin && dd if=/dev/zero bs=1 count=1 >> /tmp/new_cmdline.bin 2>/dev/null && truncate -s 302 /tmp/new_cmdline.bin'
第 2 步:用 objcopy 替换 UKI 中的 .cmdline 段
sudo objcopy --update-section .cmdline=/tmp/new_cmdline.bin /boot/EFI/Linux/omarchy_linux.efi /tmp/omarchy_linux_fixed.efi && sudo cp /tmp/omarchy_linux_fixed.efi /boot/EFI/Linux/omarchy_linux.efi
重启后触摸板应该就正常了。
原理:删除 cmdline 末尾的 90 字节重复参数,腾出空间加入 `acpi_osi=! acpi_osi="Windows 2015"`,让 BIOS 以为启动的是 Windows 10 ,从而暴露被隐藏的触摸板 I2C 端点。
以下是我用于测试的不重启办法
sudo sh -c 'echo "Windows 2015" > /sys/module/acpi/parameters/osi'
然后检查状态:
cat /sys/bus/acpi/devices/PNP0C50:00/status
如果返回 `15`( 0xF )就说明被 BIOS 隐藏的触摸板已经暴露出来了。
我描述一下我的情况供你参考
我的设备是小新 PRO14IHU 2021 ,内核版本 Linux 7.0.9-arch2-1 ,最近一段时间出现的这个问题,之前是正常的。
最开始我以为是电源管理把触摸板设备挂起的问题,禁用了电源管理但是未修复,重启后还是会失效,失效前有一小段时间可用,具体时长不固定。
但是我驱动复位重新初始化触摸板设备能修复失效问题,猜测和 omarchy 自带的重置触摸板功能应该是相同的,不过我并未去查看 omarchy 对这块的处理是啥。
后续出现失效,我的触摸板从启动就失效,ACPI 中没有触摸板存在。
我就去找有没有人和我碰见一样的情况,毕竟之前正常的。我认为应该是更新导致的问题。
在 CachyOS 的 issue 中找到了#817 ,其中提到内核 7.0.0 移除了针对特定硬件的 ACPI DMI quirk ,I2C 触摸板会被隐藏。和我的症状相符 (PNP0C50:00 的 _STA 返回 0),BIOS 对 Windows 返回 0xF (设备存在),对 Linux 返回 0 (隐藏)。
https://github.com/CachyOS/linux-cachyos/issues/817希望我的办法能对你有用。
