故障现象
ThinkPad P50老古董安装Ubuntu24.04后,有几个现象:
- 通过poweroff关机电脑,系统关闭屏幕变黑,主板不会断电,键盘背光还是亮着的,此时无论怎么按电源键都无法重新启动电脑,只有扣电池,重新拔插电源线后才能启动电脑。
- 通过reboot重启系统,情况和1完全一样。
- 通过电源图标点击“挂起”,电脑会息屏休眠,但是休眠后现象和1完全一样,也需要扣电池、重新拔插电源线后才能启动电脑。
原因分析
出现这个问题的原因是默认情况下,许多固件会假定系统是 Windows,并据此做出一些假设。
解决办法
操作步骤
- 打开终端。
- 输入 sudo gedit /etc/default/grub
打开文件如下:sudo gedit /etc/default/grub
# If you change this file, run 'update-grub' afterwards to update # /boot/grub/grub.cfg. # For full documentation of the options in this file, see: # info -f grub -n 'Simple configuration' GRUB_DEFAULT=0 GRUB_TIMEOUT_STYLE=hidden GRUB_TIMEOUT=0 GRUB_DISTRIBUTOR=`( . /etc/os-release; echo ${NAME:-Ubuntu} ) 2>/dev/null || echo Ubuntu` GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_osi=! pci=noaer" GRUB_CMDLINE_LINUX="" # If your computer has multiple operating systems installed, then you # probably want to run os-prober. However, if your computer is a host # for guest OSes installed via LVM or raw disk devices, running # os-prober can cause damage to those guest OSes as it mounts # filesystems to look for things. #GRUB_DISABLE_OS_PROBER=false # Uncomment to enable BadRAM filtering, modify to suit your needs # This works with Linux (no patch required) and with any kernel that obtains # the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...) #GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef" # Uncomment to disable graphical terminal #GRUB_TERMINAL=console # The resolution used on graphical terminal # note that you can use only modes which your graphic card supports via VBE # you can see them in real GRUB with the command `vbeinfo' #GRUB_GFXMODE=640x480 # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux #GRUB_DISABLE_LINUX_UUID=true # Uncomment to disable generation of recovery mode menu entries #GRUB_DISABLE_RECOVERY="true" # Uncomment to get a beep at grub start #GRUB_INIT_TUNE="480 440 1"
- 在 GRUB_CMDLINE_LINUX_DEFAULT 行中添加 acpi_osi=!。
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_osi=! pci=noaer"
- 保存文件并关闭编辑器。
- 更新 GRUB 配置:sudo update-grub。
- 重启计算机。
详细解释
- ACPI:这是一个标准,用于在操作系统和底层硬件之间进行通信,特别是在电源管理和热插拔设备方面。
- OSI (Operating System Identifier):ACPI 规范中的一个特性,允许固件根据操作系统类型调整其行为。默认情况下,许多固件会假定系统是 Windows,并据此做出一些假设。
- acpi_osi=!:当使用这个参数时,它告诉固件不要假设任何特定的操作系统类型。这意味着固件不应该应用任何针对特定操作系统的优化或行为。
- pci=noaer: 是另一个常用的参数,用于禁用 PCI 错误恢复,有时也能帮助解决某些硬件兼容性问题。
使用场景
- 解决兼容性问题:
当 Linux 与某些硬件不兼容时,特别是与 ACPI 相关的问题,使用 acpi_osi=! 可以帮助解决这些问题。
例如,有些电脑在 Linux 下无法正确唤醒,这可能是由于固件为 Windows 做了特定的优化,而这些优化对 Linux 不适用。 - 避免特定行为:
有些固件可能会为 Windows 应用一些特殊的电源管理策略,这些策略可能会干扰 Linux 的电源管理。