Как правильно настроить WakeOnUSB?

13

Как правильно настроить Wake-On-USB на 10.04 или 10.10 Ubuntu (2.6.36 и выше, если необходимо)? (Wake-on-USB - это когда компьютер спит и, например, событие USB Keyboard пробуждает аппарат!) Это ноутбук Acer Aspire Timeline X 1830T . Я не знаю, каким образом ядро ​​Linux поддерживает контроллеры.

Есть разные способы решения этой проблемы, например / proc / acpi / wakeup ... или UDEV ... или что-то с HAL?

/proc/acpi/wakeup показывает каждое устройство в S4, но мне нужен S3.

Device S-state Status Sysfs node
P0P2 S4 *disabled
PEGP S4 *disabled
P0P1 S0 *disabled pci:0000:00:1e.0
EHC1 S4 *disabled pci:0000:00:1d.0
USB1 S4 *enabled
USB2 S4 *disabled
USB3 S4 *disabled
USB4 S4 *disabled
EHC2 S4 *disabled pci:0000:00:1a.0
USB5 S4 *disabled
USB6 S4 *disabled
USB7 S4 *disabled
HDEF S0 *disabled pci:0000:00:1b.0
RP01 S5 *disabled pci:0000:00:1c.0
PXSX S5 *disabled pci:0000:01:00.0
RP02 S0 *disabled pci:0000:00:1c.1
PXSX S5 *disabled pci:0000:02:00.0
RP03 S0 *disabled
PXSX S5 *disabled
RP04 S0 *disabled
PXSX S5 *disabled
RP05 S0 *disabled
PXSX S5 *disabled
RP07 S0 *disabled
PXSX S5 *disabled
RP08 S0 *disabled
PXSX S5 *disabled
GLAN S0 *disabled
PEG3 S4 *disabled
PEG5 S4 *disabled
PEG6 S4 *disabled
SLPB S3 *enabled
  • S4, который называется Suspend-To-Disk afaik ... тоже не работает, если я подключаю USB1 к таблице пробуждения. Он просто устанавливает флаг S4.
  • я могу получить порты USB в S3?

Я хочу запустить машину из Suspend-To-Ram (S3, ACPI standard), если нажата клавиша на моей внешней клавиатуре . Он просыпается, только если нажата клавиша на внутренней клавиатуре ноутбука ... из Suspend To Ram. Кажется, если я подключаю USB-мышь, USB-порт даже не работает. У меня нет опции BIOS, чтобы изменить это.

Дополнительная конкретная информация об устройстве:

usb-devices
T: Bus=01 Lev=02 Prnt=02 Port=01 Cnt=01 Dev#= 13 Spd=1.5 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=04d9 ProdID=1603 Rev=03.10
S: Manufacturer=
S: Product=USB Keyboard
C: #Ifs= 2 Cfg#= 1 Atr=a0 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=01 Driver=usbhid
I: If#= 1 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid

root@underwater-laptop:/# lsusb
[...]
Bus 001 Device 013: ID 04d9:1603 Holtek Semiconductor, Inc.
Bus 001 Device 004: ID 0bda:0138 Realtek Semiconductor Corp.
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
[...]

Если это не работает, я должен правильно объяснить, почему :( - но я думаю, что это внутреннее ядро ​​очень сложно исследовать. Любые подсказки для хорошей информации здесь? Я надеюсь, что это возможно ... Я просто ищу любое решение ,

редактировать: это, проснувшись по USB, работает на Windows!

Большое спасибо, Мариус

wishi
источник
1
Если, как вы говорите, у вас нет опции BIOS для передачи сигналов от внешних USB-портов, и если внешние USB-устройства даже не имеют питания (имеет смысл для ноутбуков с батарейным питанием) - как же тогда это должно работать? У Ubuntu нет магии, чтобы сделать это.
Таккат
Это работает на Windws. Так что я предполагаю, что есть возможность передать конкретные флаги HW. ;) У меня есть менталитет Top Gun, когда дело доходит до аппаратного обеспечения и Linux: каждый может летать на транспортном самолете и запускать Windows. Но только несколько человек могут летать на боевых самолетах и ​​запускать Linux;)
wishi
О да, Top Gun: любой может разбить Windows, но разбить Linux - очень сложная работа ;-). Если функция пробуждения по локальной сети работает с Windows, ваше USB-устройство, безусловно, работает (возможно, в режиме энергосбережения).
Таккат

Ответы:

4

Кажется, что-то может быть не так с таблицей ACPI системы, поскольку ни одно из устройств USB * не связано с шиной PCI.

На моем ноутбуке, когда я подключаю USB-клавиатуру, я вижу путь pci 0000: 00: 1d.0 в dmesgвыводе:

input: ... as /devices/pci0000:00/0000:00:1d.0/usb6/6-2/6-2.3/6-2.3:1.0/input/input14

Оттуда я могу найти имя устройства ACPI /proc/acpi/wakeupи включить его, чтобы включить:

USB0  S3 enabled  pci:000:00:1d.0

Я бы предположил, что, поскольку в вашей системе отсутствует привязка шины PCI к устройству ACPI, получить его не получится. Возможно, вам придется начать отладку DSDT, чтобы получить гораздо больше. http://acpi.sourceforge.net/dsdt/index.php

Кис Кук
источник
1

Я нашел на Ubuntu Lucid 10.04.3 с 2.6.32-37, что использование /proc/acpi/wakeupбесполезно. Кажется, /sysэто единственное, что имеет значение.

Мой usb-wakeupскрипт, связанный ниже, обходит /sysдерево в обратном порядке, чтобы включить только устройства usbhid, такие как клавиатура и мышь. Это также включает их родительские концентраторы и контроллеры. Это то, что мне понадобилось, чтобы заставить его работать. Правило udev запускает скрипт при загрузке и при подключении любого устройства usbhid.

Скрипт udev требует, чтобы скрипт был включен /usr/local/sbin, и убедитесь, что скрипт выполняется chmod 755 /usr/local/sbin/usb-wakeup.

Натан Греннан
источник
1

Используйте lsusb, чтобы получить идентификатор продукта и поставщика вашего USB-устройства:

Bus 004 Device 002: ID 0458:002e KYE Systems Corp. (Mouse Systems)

В моем случае это мышь с идентификатором 0458: 002e, тогда вы создаете новое правило udev:

sudo nano /etc/udev/rules.d/90-keyboardwakeup.rules

Вставьте этот код и замените idVendor и idProduct правильными идентификаторами из lsusb

SUBSYSTEM=="usb", ATTRS{idVendor}=="0458", ATTRS{idProduct}=="002e" RUN+="/bin/sh -c 'echo enabled > /sys$env{DEVPATH}/../power/wakeup'"

Перезагрузитесь и проверьте. Протестировано 11.04 и 12.04 (может работать и на более низких версиях). Я нашел ответ в этом форуме пост (ответ от ederopaa )

dafyk
источник
1
Добро пожаловать в Спросите Ubuntu! Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить сюда основные части ответа и предоставить ссылку для справки.
Элия ​​Каган