Как использовать нажатие клавиши, чтобы разбудить приостановленный ноутбук при использовании KVM-переключателя?
Я использую беспроводную клавиатуру Logitech с приемником Logitech Unifying, подключенным к KVM-переключателю. Я создал ярлык systemd suspend для приостановки ноутбука, Lenovo IdeaPad. Крышка ноутбука всегда закрыта. Я не могу вывести Lenovo из режима ожидания, если не подниму крышку ноутбука. Когда крышка поднята, ноутбук просыпается. Я хочу иметь возможность разбудить ноутбук, не поднимая крышку. Я не уверен, как это сделать.
Я попробовал две вещи, но ни одна из них не сработала. Сначала я включил файл пробуждения для приемника Logitech Unifying (proc / acpi / wakeup). Он действительно разбудил ноутбук, когда я использовал клавиатуру. Проблема заключалась в том, что ноутбук проснулся в течение пяти минут без какого-либо участия от меня. Нет активности с клавиатуры или чего-либо еще. Во-вторых, я попробовал исправление, описанное в разделе Как заставить беспроводную USB-клавиатуру вывести Ubuntu 13.10 из режима ожидания? Та же проблема, что и у первого - ноутбук просыпается в непредсказуемое время, казалось бы, сам по себе.
Когда я смотрю на устройства, использующие lsinput, я вижу клавиатуру Logitech. Дается физический адрес usb-0000:00:14.0-3.1.1:1. Когда я смотрю на proc/acpi/wakeup, я вижу pci:0000:00:14.0. Расширения 3.1.1 нет. Если я посмотрю на /sys/bus/usb/devices/1-3.1.1, то увижу, что это Logitech Unifying Receiver.
Вот результат системного журнала cat во время события пробуждения:
Как собрать все это вместе, чтобы разбудить с помощью ввода с клавиатуры, но подавить другие события пробуждения?
Спустя несколько дней я обнаружил это: "Взаимодействие со встроенным контроллером. Здесь действительно трудно диагностировать проблемы. Встроенный контроллер (EC) содержит собственный код для управления периферийными устройствами". С https://wiki.ubuntu.com/Kernel/Reference/ACPITricksAndTips
Достаточно сказать, что это выглядит довольно сложно и, вероятно, характерно для моего Lenovo.
2 ответа
От: USB ИК дистанционное включение из режима ожидания
У меня была та же проблема, и я также был озадачен тем, что мои USB не отображаются в /proc/acpi/wakeup. Однако, в конце концов, несмотря на то, что многие решения предлагали это, мне не нужно было включать USB в ACPI.
Вместо этого было достаточно включить пробуждение через USB-порт, к которому было подключено мое ИК-устройство.
Найдите идентификатор вашего устройства:
$ lsusb
Шина 002 Устройство 002: ID 8087:8001 Intel Corp.
Шина 002 Устройство 001: ID 1d6b:0002 Корневой концентратор Linux Foundation 2.0
Шина 001 Устройство 002: ID 8087:8009 Intel Corp.
Шина 001 Устройство 001: ID 1d6b:0002 Корневой концентратор Linux Foundation 2.0
Шина 004 Устройство 001: ID 1d6b:0003 Корневой концентратор Linux Foundation 3.0
Автобус 003 Устройство 003: ID 13ba:0018 PCPlay Штрих-код PCP-BCG4209
Шина 003 Устройство 002: ID 1934:5168 Feature Integration Technology Inc. (Fintek) F71610A или F71612A Потребительский инфракрасный приемник / приемопередатчик
Шина 003 Устройство 001: ID 1d6b:0002 Корневой концентратор Linux Foundation 2.0
В приведенном выше примере мой идентификатор устройства 5168.
Grep / sys / bus / usb, чтобы найти порт, к которому подключено ваше устройство:
$ grep 5168 /sys/bus/usb/devices/*/idProduct
/ Системы / шины / USB / устройства /3-13/idProduct:5168
Это означает, что мое устройство подключено к шине 3, порт 13.
Убедитесь, что порт правильный:
$lsusb -t
/: Шина 04.Порт 1: Dev 1, Class = root_hub, Driver = xhci_hcd / 6p, 5000M
/: Шина 03.Порт 1: Dev 1, Class = root_hub, Driver = xhci_hcd / 14p, 480M
| __ Порт 13: Dev 2, если 0, класс = класс конкретного поставщика, драйвер = mceusb, 12M
| __ Порт 14: Dev 3, если 0, класс = устройство интерфейса пользователя, драйвер =usbhid, 1,5M
| __ Порт 14: Dev 3, If 1, Class= Устройство интерфейса пользователя, Driver =usbhid, 1.5M
/: Шина 02.Порт 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M |__ Порт 1: Dev 2, If 0, Class = Hub, Driver = hub / 8p, 480M
/: Шина 01. Порт 1: Dev 1, Class = root_hub, Driver = ehci-pci / 2p, 480M
| __ Порт 1: Dev 2, если 0, класс = концентратор, драйвер = концентратор /6p, 480M
Шина 3, порт 13 соответствует шине / порту, возвращаемому grep (3-13)
Проверьте, включен ли режим пробуждения:
$ cat /sys/bus/usb/devices/3-13/power/wakeup
отключен
Включить пробуждение по порту:
$ sudo sh -c 'echo "enabled" > /sys/bus/usb/devices/3-13/power/wakeup'
Проверьте, включен ли режим пробуждения:
$ cat /sys/bus/usb/devices/3-13/power/wakeup
включен
Протестируйте свое устройство, оно будит систему?
Сделайте это изменение постоянным при перезагрузке:
$ sudo nano /etc/rc.local
Добавьте следующие строки после комментариев и перед "выходом 0"
# Enable Wake on IR for USB bus 3 port 13.
echo enabled > /sys/bus/usb/devices/3-13/power/wakeup
Теперь с радостью разбудите ваш компьютер с USB-устройства.
Ограничения
Одна из проблем этого подхода заключается в том, что если в порт USB подключено ИК-устройство, то включение этого порта специально не помогает.
В этом посте есть способ включить любой ИК-порт на основе подключенного к нему устройства с помощью правила Udev.
Рекомендации
Kodi, MCE Remote и Ubuntu
Пробуждение от приостановки с помощью клавиатуры или мыши
Включение ИК-устройств с помощью правила Udev
Оригинальный ответ ниже
Этот вопрос имеет три ответа, которые могут вам помочь: проснуться от приостановки с помощью беспроводной USB-клавиатуры или мыши (для любого дистрибутива Linux)
Ответ 1 (15 голосов)
хит в терминале:
grep . /sys/bus/usb/devices/*/power/wakeup
Результатом для меня было выяснить, что все USB были отключены. Итак, введите:
1.
sudo su
теперь у нас есть права root.
2. У меня есть 8 портов USB (вы делаете это для столько портов, сколько у вас есть), поэтому:
echo enabled > /sys/bus/usb/devices/usb1/power/wakeup
echo enabled > /sys/bus/usb/devices/usb2/power/wakeup
echo enabled > /sys/bus/usb/devices/usb3/power/wakeup
echo enabled > /sys/bus/usb/devices/usb4/power/wakeup
echo enabled > /sys/bus/usb/devices/usb5/power/wakeup
echo enabled > /sys/bus/usb/devices/usb6/power/wakeup
echo enabled > /sys/bus/usb/devices/usb7/power/wakeup
echo enabled > /sys/bus/usb/devices/usb8/power/wakeup
Идите и проверьте это. Теперь вы можете проснуться с любой беспроводной или проводной USB-клавиатуры и мыши.
Итак, причина, по которой мы должны включить их все, заключается в том, что на следующем шаге мы запишем это в rc.local для выполнения команды после каждой перезагрузки, а после перезагрузки некоторые дистрибутивы Linux (может быть, все) меняют порты USB. Нам не нужно беспокоиться о том, что что-то пойдет не так, включив их все, так как Linux находится в режиме ожидания или гибернации, он не может использовать Wi-Fi для загрузки чего-либо, поэтому он не проснется, если мы не разбудим его специально,
Следующий шаг:
3.
sudo nano /etc/rc.local
и мы вставляем туда все, начиная с шага 2. (конечно, до выхода 0).
Вот и все. Отныне мы можем использовать наши беспроводные USB и мышь, чтобы выйти из режима ожидания.
Я надеюсь, что это работает для всех вас. Это руководство было сделано после тестирования всех других возможных решений в Интернете.
Ответ 2 (7 голосов)
В дополнение к моему руководству, приведенному выше, я хочу добавить эту информацию, поскольку недавно я обнаружил, что некоторые беспроводные USB-устройства после выхода из спящего режима возвращаются обратно для отключения. Я повторяю, только некоторые устройства USB делают это, не все. Вот почему я не добавил это небольшое руководство к своему руководству.
Итак, вы сделали, как я указывал выше, и ваш компьютер успешно проснулся, но в тот же день внезапно он не проснулся снова.
Решение:
Откройте терминал и выполните:
lsusb
В информации об идентификаторе устройства клавиатуры 4 первые цифры - это идентификатор производителя, а 4 следующие цифры - это идентификатор продукта (см. Скриншот).
Далее делаем:
sudo nano /etc/udev/rules.d/10-wakeup.rules
Где "пробуждение" введите желаемое имя скрипта. Число 10 является приоритетом, если у вас есть много других правил udev, чем меньше число, которое будет выполняться "правилом" перед остальными.
Скопируйте, вставьте его и замените идентификатор поставщика и идентификатор продукта на собственный идентификатор поставщика беспроводной клавиатуры и идентификатор продукта.
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="062a", ATTRS{idProduct}=="4101" RUN+="/bin/sh -c 'echo enabled > /sys/bus/usb/devices/usb8/power/wakeup'"
* usb8 для меня - моя беспроводная клавиатура (вы также можете видеть это на скриншоте (шина 008)), замените ее на свою.
Ctrl + O для сохранения, Ctrl + X для выхода и перезагрузки.
Ответ 3
Ответ Павлоса Теодору очень полезен. Я хотел бы добавить, что вы можете найти USB-устройство, к которому подключается ваша мышь / клавиатура при загрузке, пару раз пропустив dmesg через grep, затем один раз egrep и, наконец, используя tail, чтобы убедиться, что оно было самым последним. запись.
Используя этот метод, вам не нужно включать пробуждение на ВСЕХ USB-портах.
Я поместил следующее в мой файл /etc/rc.local, и он каждый раз находит мой приемник logitech, даже если он перемещается с одного порта USB на другой. Просто замените имя вашей клавиатуры или мыши на dmesg вместо "Logitech K270"
KB="$(dmesg | grep "Logitech K270 as" | grep -o -P "usb.{0,5}" | egrep -o ".{0,3}$" | tail -1)"
echo enabled > /sys/bus/usb/devices/${KB}/power/wakeup
Это работает при загрузке, но, похоже, не работает при пробуждении из режима ожидания, поэтому мне пришлось поместить файл скрипта в /lib/systemd/system-sleep/. Создайте его, установите его как глобально исполняемый и дайте ему имя, которое начинается с двузначного числа от 00 до 99. Мой сценарий выглядит следующим образом, снова подставьте пустую клавиатуру / мышь из dmesg:
#!/bin/sh
# Action script to enable wake after suspend by keyboard or mouse
if [ $1 = post ]
then
KB="$(dmesg | grep "Logitech K270 as" | grep -o -P "usb.{0,5}" | egrep -o ".{0,3}$" | tail -1)"
echo enabled > /sys/bus/usb/devices/${KB}/power/wakeup
fi
if [ $1 = pre ]
then
KB="$(dmesg | grep "Logitech K270 as" | grep -o -P "usb.{0,5}" | egrep -o ".{0,3}$" | tail -1)"
echo enabled > /sys/bus/usb/devices/${KB}/power/wakeup
fi
По какой-то причине я не могу объяснить, что оператор "post" sleep, если работает, работает только при каждом следующем пробуждении... но оператор "pre" sleep, если кажется, работает каждый раз.
По состоянию на 10 сентября 2021 г. перевод включенного состояния в постоянное не работает для некоторых устройств в Ubuntu 18+.
Фантастический ответ Pavlos Theodorou, также ответ 2 здесь , решил проблему. Ссылка на пост здесь .