在Linux系统中,唤醒挂起(suspend)状态的设备通常通过以下方式触发:
1. 电源按钮
大多数Linux发行版默认配置为通过短按电源按钮唤醒系统。这是硬件级别的ACPI事件,由内核的电源管理子系统处理。部分设备可能需要BIOS/UEFI中开启相关功能(如"S3睡眠"支持)。
2. 键盘/鼠标输入
USB或PS/2接口的键盘/鼠标活动可以触发唤醒,需内核启用`CONFIG_PM_WAKUP_VIA_KEYBOARD`等选项。可通过`cat /proc/acpi/wakeup`查看可用设备,使用`echo DEVICE > /proc/acpi/wakeup`动态启用(如`echo XHC > /proc/acpi/wakeup`启用USB控制器)。
3. 外部设备事件
网卡(WOL)、蓝牙设备或特定PCIe设备可能支持唤醒。例如通过`ethtool`启用网卡WOL功能:
bash
sudo ethtool -s eth0 wol g
4. RTC定时唤醒
使用实时时钟(RTC)设置唤醒时间:
bash
sudo rtcwake -m mem -s 3600 # 1小时后唤醒
需内核支持`CONFIG_RTC_DRV_CMOS`等驱动。
5. Lid开关(笔记本)
翻盖笔记本的屏幕开合传感器触发唤醒,依赖ACPI事件处理和`/etc/systemd/logind.conf`配置项:
HandleLidSwitch=suspend
扩展知识:
ACPI状态差异:S3(挂起到内存)最常用,S4(挂起到磁盘)对应休眠模式,唤醒机制可能不同。
调试工具:
- 使用`dmesg | grep -i "acpi\|wakeup"`查看唤醒源日志
- `systemctl status sleep.target`检查挂起/恢复服务状态
硬件限制:部分老旧硬件或特定固件可能导致唤醒失效,需更新内核或BIOS。
自定义脚本:可通过`/usr/lib/systemd/system-sleep/`添加挂起/恢复时的自定义脚本。
若唤醒失败,建议检查内核参数(如`acpi_sleep=nonvs`等)、禁用快速启动选项,或排查硬件兼容性问题。