Просыпайтесь от ожидания с помощью беспроводной USB-клавиатуры или мыши (для любого дистрибутива Linux)

18

Я искал часы, а может и больше, и нашел решение. Я хочу поделиться этим со всеми. Таким образом, будет проще найти эту проблему, чтобы быстрее найти решение. Итак, как сказано в названии, ниже приведено решение.

Павлос Теодору
источник

Ответы:

26

хит в терминале:

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 и мышь, чтобы выйти из режима ожидания.

Я надеюсь, что это работает для всех вас. Это руководство было сделано после тестирования всех других возможных решений в Интернете.

Павлос Теодору
источник
6
Если вы хотите выяснить, какое устройство является каким, вы можете найти /sys/bus/usb/devices/<device id>/productтекстовое описание.
ntc2
Я включил все устройства в " grep . /sys/bus/usb/devices/*/power/wakeup", но все еще не работал. Возможно, это связано с тем, что клавиатура и мышь подключены косвенно - беспроводным способом к ключу, который находится на экране? Экран подключен через USB к ноутбуку.
Алик Эльзин-килака
1
как сказал @ ntc2, используйте это, чтобы увидеть описание каждого: grep . /sys/bus/usb/devices/*/productпомогло мне понять, на что я смотрю
Бен Ицхаки
Если это по-прежнему не работает, убедитесь, что ваше устройство (клавиатура / мышь) по-прежнему имеет питание, когда компьютер находится в спящем режиме. Если на вашем устройстве нет светодиода, вы можете использовать USB-монитор мощности (он может найти их около 10 долларов в Интернете), чтобы проверить питание USB-порта.
Джей Смит
Постоянная часть этого вопроса больше не работает по крайней мере с Ubuntu 18.04. Дополнение ( askubuntu.com/a/874701/516072 ) к этому ответу, предоставленное pavlos-theodorou, помогло для постоянной части в Ubuntu 18.04
Laurens
10

В дополнение к моему руководству, приведенному выше, я хочу добавить эту информацию, поскольку недавно я обнаружил, что некоторые беспроводные 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для выхода и перезагрузки.

Павлос Теодору
источник
4
Лучше включить это в свой первый ответ.
ntc2
1
это две разные вещи. 1-й ответ на проблему пробуждения. второй больше похож на «Как создать правило для выполнения без загрузки», и это просто «дополнительный», так как не все знают, как это сделать, и нет простого любительского руководства для этого.
Павлос Теодору
2

Ответ Павлоса Теодору очень полезен. Я хотел бы добавить, что вы можете найти USB-устройство, к которому подключается ваша мышь / клавиатура при загрузке, пару раз пропустив dmesg через grep , затем один раз egrep и, наконец, используя tail, чтобы убедиться, что оно было самым последним. запись.

Используя этот метод, вам не нужно включать Wake on ВСЕХ 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. Мой сценарий заключается в следующем, снова подставляются вашей клавиатуры / мыши verbage из 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, если кажется, работает каждый раз.

jcn1
источник
1

Ни один из вышеупомянутых ответов не помог мне. Вот почему я размещаю здесь свой собственный.

Включение / отключение пробуждения от приостановки для USB-устройств

Протестировано в KDE neon 5.16.2, на основе Ubuntu 18.04, но должно работать в любом дистрибутиве.


1. Показать список USB-устройств, чтобы определить, какое из них вы хотите включить / отключить:

grep . /sys/bus/usb/devices/*/product

вы должны получить что-то вроде этого:

/ sys / bus / usb / devices / 3-3 / product: Cord Optical Mouse
/sys/bus/usb/devices/3-4.3/product:802.11n адаптер WLAN
/sys/bus/usb/devices/3-4.4/product:USB Receiver
/sys/bus/usb/devices/3-4/product:USB2.0 Hub
/sys/bus/usb/devices/4-4/product:USB3.0 Hub
/ sys / bus / usb / devices / usb1 / product: EHCI Host Controller
/ sys / bus / usb / devices / usb2 / product: EHCI Host Controller
/ sys / bus / usb / devices / usb3 / product: Хост-контроллер xHCI
/ sys / bus / usb / devices / usb4 / product: xHCI Host Controller


2. Проверьте состояние активации всех USB-устройств:

grep. / SYS / автобус / USB / устройство / * / мощность / будильник

результат должен быть примерно таким:

/ SYS / автобус / USB / устройство / 1-1 / мощность / будильник: отключено
/ SYS / автобус / USB / устройство / 2-1 / мощность / будильник: отключено
/ SYS / автобус / USB / устройство / 3-11 / мощность / будильник: отключено
/ SYS / автобус / USB / устройство / 3-3 / мощность / будильник: включено
/sys/bus/usb/devices/3-4.4/power/wakeup:disabled
/ SYS / автобус / USB / устройство / 3-4 / мощность / пробуждение: отключено
/ SYS / автобус / USB / устройство / 4-4 / мощность / будильник: отключено
/ SYS / автобус / USB / устройство / usb1 / мощность / будильник: отключено
/ SYS / автобус / USB / устройство / usb2 / мощность / будильник: отключено
/ SYS / автобус / USB / устройство / USB3 / мощность / будильник: отключено
/ SYS / автобус / USB / устройство / USB4 / мощность / будильник: отключено

В моем случае активация активируется только для USB-устройства 3-3, которое, согласно предыдущему списку, называется «Cord Optical Mouse».

Я хочу включить пробуждение от приостановки только для беспроводной клавиатуры и отключить его для остальных. USB-приемник клавиатуры подключен к концентратору и соответствует 3-4.4 в предыдущем списке («USB-приемник»).


3. Создайте скрипт, который выполняет работу:

Чтобы иметь права root:

sudo su

Затем мы создаем файл для скрипта (файл может называться «usbwakeup» или любой другой описательный файл):

nano /etc/init.d/usbwakeup 

Содержимое файла. Просто адаптируйте его под свои потребности, изменив раздел «СКРИПТ-ДЕЙСТВИЯ» (мне нравится добавлять комментарии к сценариям, чтобы узнать, что они на самом деле делают, если я когда-нибудь снова их открою):

#! / bin / bash
#
#######################
# ОБЩАЯ ИНФОРМАЦИЯ #
#######################
#
# - Этот скрипт включает / отключает пробуждение от приостановки # для USB-устройств.
#
# - Сценарию нужны разрешения на выполнение.
#
# - чтобы этот скрипт выполнялся при запуске системы, должен быть
# символическая ссылка на него в /etc/rc3.d/ с приоритетом S01
# (например: /etc/rc3.d/S01usbwakeup)
#
###########################
# СВЯЗАННЫЕ ПОЛЕЗНЫЕ КОМАНДЫ #
###########################
#
# - Определить USB-устройства:
# grep. / SYS / автобус / USB / устройства / * / продукт
#
# - Проверьте состояние «пробуждения от приостановки» USB-устройств:
# grep. / SYS / автобус / USB / устройство / * / мощность / будильник
#
#
##################
# СЦЕНАРИЙ ДЕЙСТВИЙ #
##################
#
# Отключает пробуждение от приостановки для оптической мыши
эхо отключено> / sys / bus / usb / devices / 3-3 / power / wakeup
#
# Позволяет проснуться от приостановки для беспроводной клавиатуры
что я подключил к USB 3.0 HUB через порт USB № 4
эхо включено> /sys/bus/usb/devices/3-4.4/power/wakeup


4. Дайте ему разрешение на исполнение:

chmod +x /etc/init.d/usbwakeup


5. Создайте символическую ссылку в /etc/rc3.d/ для запуска при загрузке:

sudo ln -s /etc/init.d/usbwakeup /etc/rc3.d/S01usbwakeup


При перезагрузке системы все должно работать как указано в скрипте. Изменения будут постоянными, так как они будут выполняться при каждой загрузке системы.

Источники консультировались (кроме этого поста):

https://ubuntuforums.org/showthread.php?t=2388336

https://www.thomasmonaco.com/prevent-usb-devices-waking-ubuntu-sleep/

/unix/83748/the-rc0-d-rc1-d-directories-in-etc

Хуан Гомес Каррильо
источник
Я только что нашел и интересный пост, где объясняется, как создать простой графический интерфейс для той же цели. Я не тестировал его, но, возможно, он мог бы помочь кому-то, пытающемуся сделать это графически и с легкостью одним щелчком мыши включить / отключить: bernaerts-nicolas.fr/linux/74-ubuntu/220-ubuntu-resume-usb- спрятал
Хуан Гомес Каррильо