Вопрос или проблема
Это Gentoo Linux с OpenRC (позже обновленный до systemd), и ACPI + некоторые функции управления энергией в ядре для Intel. ACPId работает. Я могу перейти в режим сна с использованием следующей команды:
echo -n "mem" > /sys/power/state
Это работает, но мне нужно использовать кнопку питания, чтобы разбудить. Есть ли способ пробуждения от событий клавиатуры, таких как нажатие на пробел? Клавиатура — беспроводная USB-клавиатура. Я посмотрел на содержимое скрипта в /etc/acpi
, и там нет информации о том, как это сделать. Большинство информации, которую я нахожу, обычно предназначено для пользователей ноутбуков. Мне действительно нужно что-то вроде старого pm-utils
, чтобы добиться этого, и есть ли что-то плохое в том, чтобы просто использовать acpid?
cat /proc/acpi/wakeup
Устройство S-состояние Статус Sysfs узел
P0P2 S4 *отключено
P0P3 S4 *отключено pci:0000:00:06.0
P0P1 S4 *отключено pci:0000:00:1e.0
PS2K S4 *включено pnp:00:0b
EUSB S4 *включено pci:0000:00:1d.7
USBE S4 *включено pci:0000:00:1a.7
P0P4 S4 *отключено pci:0000:00:1c.0
P0P5 S4 *отключено
P0P6 S4 *отключено pci:0000:00:1c.2
P0P7 S4 *отключено
P0P8 S4 *отключено
P0P9 S4 *отключено
GBEC S4 *отключено
USB0 S4 *включено pci:0000:00:1d.0
USB1 S4 *включено pci:0000:00:1d.1
USB2 S4 *включено pci:0000:00:1d.2
USB3 S4 *отключено
USB4 S4 *включено pci:0000:00:1a.0
USB5 S4 *включено pci:0000:00:1a.1
USB6 S4 *включено pci:0000:00:1a.2
MBT4 S4 *отключено
Судя по всему, используемые параметры ядра (3.10.25-gentoo SMP, 64bit, IA32emul=off, no-multilib):
- CONFIG_HOTPLUG_CPU=y и по умолчанию cpu0_hotplug
- Переход в режим сна и режим ожидания Гибернации
- Поддержка отладки управления энергией
- Трассировка событий приостановки/возобновления
- Поддержка ACPI
- Поддержка управления энергией процессора
- Драйвер Cpuidle для процессоров Intel
- Поддержка systemd через опцию Gentoo в ядре была включена
Настройки BIOS довольно стандартные:
- Я включил дополнительные таблицы ACPI 2.0
- Не вижу никаких событий пробуждения для USB, но я пробовал события пробуждения от PCI/PCIe/PS2 и т.д., но на самом деле это беспроводная USB-клавиатура
- Материнская плата — старая школа winner Maximus Formula с Q6600 Core2quad
OpenRC был обновлен до systemd
, и ядро было переcompiled, чтобы поддерживать это. Конфигурация также была обновлена вот так. С systemd acpid не требуется во всех случаях. Например, не запуская, вы можете выполнить systemctl suspend
, и поведение остается… тем же, то есть пробуждение только от кнопки питания…
Вывод pstree
:
systemd
├─acpid -f
├─at-spi-bus-laun
│ ├─dbus-daemon --config-file=/etc/at-spi2/accessibility.conf --nofork--print-addres
│ └─2*[{at-spi-bus-laun}]
├─at-spi2-registr --use-gnome-session
│ └─{at-spi2-registr}
├─dbus-daemon --system --address=systemd: --nofork --nopidfile--systemd-activation
├─dbus-daemon --fork --print-pid 5 --print-address 7 --session
├─dbus-launch --sh-syntax --exit-with-session
├─dhcpcd -q --nobackground
├─login --
│ └─bash
│ └─startx /usr/bin/startx
│ └─xinit /etc/X11/xinit/xinitrc -- /etc/X11/xinit/xserverrc :0 -auth...
│ ├─X -nolisten tcp :0 -auth /home/user/.serverauth.3329
│ └─openbox --startup /usr/libexec/openbox-autostart OPENBOX
│ ├─firefox
│ │ ├─plugin-containe ...
│ │ │ └─6*[{plugin-containe}]
│ │ └─35*[{firefox}]
│ └─vlc
│ └─4*[{vlc}]
├─lxterminal
│ ├─bash
│ │ └─htop
│ ├─bash
│ │ └─su
│ │ └─bash
│ │ └─grc /usr/lib/python-exec/python2.7/grc tail -f ...
│ │ ├─grcat /usr/lib/python-exec/python2.7/grcat conf.log
│ │ └─tail -f /var/log/emerge.log
│ ├─bash
│ ├─gnome-pty-helpe
│ └─{lxterminal}
├─mount.ntfs /dev/sdb1 /mnt/div -o rw
├─roxterm
│ ├─bash
│ │ └─su
│ │ └─bash
│ │ └─pstree -a
│ ├─gnome-pty-helpe
│ └─{roxterm}
├─systemd --user
│ └─(sd-pam)
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─wbar --pos bot-right --taskbar --isize 24
└─xcompmgr -c -C -t-5 -l-5 -r4.2 -o.55
Это также часто является настройкой BIOS. Вы можете проверить это с помощью:
grep ^PWRB /proc/acpi/wakeup
и включить это с помощью
echo "PWRB" > /proc/acpi/wakeup
Это зависит в основном от используемого оборудования, а не от программного обеспечения.
Чтобы иметь возможность возобновляться от события клавиатуры на USB-клавиатуре
- BIOS должен поддерживать пробуждение от события USB. В вашем случае
USB0
и т.д. в/proc/acpi/wakeup
подтверждают поддержку. - Порты USB должны быть под напряжением во время сна. Это часто является настройкой BIOS или управляется перемычкой на материнской плате. Процедура обычно документирована в руководстве материнской платы.
- Клавиатура должна поддерживать отправку события, пока операционная система не работает. Особенно беспроводные клавиатуры могут не поддерживать это, в основном для экономии энергии и упрощения прошивки.
Поскольку ваш /proc/acpi/wakeup
показывает, что BIOS поддерживает пробуждение через USB из сна и даже гибернацию (S4
во втором столбце), и пробуждение включено для большинства USB-портов (третий столбец), существует высокая вероятность того, что ваша беспроводная клавиатура является виновницей, и ничто, что вы измените в ОС или в BIOS, не заставит пробуждение работать с ней.
Ответ или решение
Для того чтобы использовать клавиатуру для пробуждения системы из режима suspend-to-RAM (ожидания) в вашей конфигурации Gentoo Linux с ACPI, следует учитывать несколько важных факторов как аппаратного, так и программного характера.
1. Поддержка BIOS
Первым шагом является проверка настроек BIOS вашей материнской платы. В большинстве случаев, поддержка пробуждения через USB-устройства, такие как беспроводные клавиатуры, должна быть включена в настройках BIOS. Выполните следующие команды для проверки настроек:
grep ^PWRB /proc/acpi/wakeup
Если вызванный вывод показывает, что параметр пробуждения для PWRB
отключен, активируйте его с помощью команды:
echo "PWRB" > /proc/acpi/wakeup
2. Проверка состояния USB-портов
Ваша система может поддерживать пробуждение по USB, однако необходимо убедиться, что USB-порты остаются под питанием во время режима ожидания. Это также обычно контролируется в BIOS. Убедитесь, что следующие параметры установлены на "Enabled":
- USB Wake Support (Поддержка пробуждения USB)
- Wake on USB (Пробуждение по USB)
3. Возможности клавиатуры
Многие беспроводные клавиатуры не поддерживают пробуждение системы, если они не были специально спроектированы для этой функции. Вам стоит проверить спецификации вашей клавиатуры, чтобы выяснить, может ли она отправлять сигналы пробуждения, когда система находится в состоянии ожидания. В некоторых случаях старые или очень простые модели не поддерживают такую функциональность.
4. Настройка ACPI и pm-utils
Вы упоминали о проблемах с использованием ACPId для управления событиями пробуждения. Важно отметить, что ACPId и pm-utils могут работать вместе, но часто для задач управления питанием предпочтительно использовать только одну систему, чтобы избежать конфликтов.
Системные службы управления питанием, такие как systemd
и systemd-logind
, также могут быть настроены для работы с ACPI. Если вы переходите на systemd
, стоит продумать, насколько глубоко вам нужно интегрировать это в свою систему. К примеру, интерактивные команды для пробуждения могут быть настроены в конфигурационных файлах:
sudo systemctl enable sleep.target
sudo systemctl enable suspend.target
Эти команды активируют целевые настройки для управления спячкой и пробуждением, что может включать пробуждение от событий USB.
5. Проверка конфигурации
Вы также можете воспользоваться выводом команды /proc/acpi/wakeup
, чтобы удостовериться, что для большинства USB-портов включено их использование в режиме ожидания. Пример вывода показывает, что устройства USB, такие как USB0
, USB1
, USB2
, уже активированы.
Заключение
Таким образом, чтобы настроить пробуждение системы через клавиатуру, вам требуется согласованная работа аппаратных и программных компонентов. Если ваша беспроводная клавиатура не поддерживает эту функциональность, то, к сожалению, вам не удастся её реализовать, вне зависимости от настроек BIOS или операционной системы. Проведите дополнительное исследование вашей клавиатуры и убедитесь в исправности всех соответствующих настроек в BIOS и Linux.