Как отключить USB-питание моей мыши, когда я подвожу ноутбук?

19

Свет СИД моей мыши действует мне на нервы во время сна. Я обычно закрываю тетрадь вечером и звоню в Ubuntu pm-suspend. В любом случае, USB-штекер все еще подан на питание. Я мог бы даже зарядить свой смартфон. Это плохо для меня по двум причинам. Я должен отключить мышь, и аккумуляторная батарея ноутбука работает меньше. Есть ли способ автоматического отключения моего USB-устройства или всех USB-устройств, когда ноутбук переходит в режим ожидания?

Как это настроить?

РЕДАКТИРОВАТЬ: В соответствии с просьбой в комментариях, я добавляю эту информацию: я использую Lenovo G550.

РЕДАКТИРОВАТЬ: В соответствии с просьбой здесь мой вывод lsusb

Bus 002 Device 019: ID 1058:25a3 Western Digital Technologies, Inc. 
Bus 002 Device 017: ID 1b1a:7001  
Bus 002 Device 009: ID 2109:2812 VIA Labs, Inc. VL812 Hub
Bus 002 Device 008: ID 2109:2812 VIA Labs, Inc. VL812 Hub
Bus 002 Device 003: ID 0402:5608 ALi Corp. 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 006: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

РЕДАКТИРОВАТЬ: Я думаю, что эта информация также приводит к ответу.

root@localhost:/sys/bus/usb/devices# ls -al
insgesamt 0
drwxr-xr-x 2 root root 0 Okt  6 10:56 .
drwxr-xr-x 4 root root 0 Okt  6 10:56 ..
lrwxrwxrwx 1 root root 0 Okt  6 10:56 1-0:1.0 -> ../../../devices/pci0000:00/0000:00:1a.7/usb1/1-0:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-0:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-0:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-3 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-3
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-3:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-3/2-3:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-3:1.1 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-3/2-3:1.1
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5.1 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.1
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5.1:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.1/2-5.1:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5.1.2 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.1/2-5.1.2
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5.1.2:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.1/2-5.1.2/2-5.1.2:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5.1.2:1.1 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.1/2-5.1.2/2-5.1.2:1.1
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5.2 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.2
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5.2:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.2/2-5.2:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 3-0:1.0 -> ../../../devices/pci0000:00/0000:00:1a.0/usb3/3-0:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 4-0:1.0 -> ../../../devices/pci0000:00/0000:00:1a.1/usb4/4-0:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 5-0:1.0 -> ../../../devices/pci0000:00/0000:00:1a.2/usb5/5-0:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 6-0:1.0 -> ../../../devices/pci0000:00/0000:00:1d.0/usb6/6-0:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 6-1 -> ../../../devices/pci0000:00/0000:00:1d.0/usb6/6-1
lrwxrwxrwx 1 root root 0 Okt  6 10:56 6-1:1.0 -> ../../../devices/pci0000:00/0000:00:1d.0/usb6/6-1/6-1:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 6-1:1.1 -> ../../../devices/pci0000:00/0000:00:1d.0/usb6/6-1/6-1:1.1
lrwxrwxrwx 1 root root 0 Okt  6 10:56 6-1:1.2 -> ../../../devices/pci0000:00/0000:00:1d.0/usb6/6-1/6-1:1.2
lrwxrwxrwx 1 root root 0 Okt  6 10:56 7-0:1.0 -> ../../../devices/pci0000:00/0000:00:1d.1/usb7/7-0:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 8-0:1.0 -> ../../../devices/pci0000:00/0000:00:1d.2/usb8/8-0:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 usb1 -> ../../../devices/pci0000:00/0000:00:1a.7/usb1
lrwxrwxrwx 1 root root 0 Okt  6 10:56 usb2 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2
lrwxrwxrwx 1 root root 0 Okt  6 10:56 usb3 -> ../../../devices/pci0000:00/0000:00:1a.0/usb3
lrwxrwxrwx 1 root root 0 Okt  6 10:56 usb4 -> ../../../devices/pci0000:00/0000:00:1a.1/usb4
lrwxrwxrwx 1 root root 0 Okt  6 10:56 usb5 -> ../../../devices/pci0000:00/0000:00:1a.2/usb5
lrwxrwxrwx 1 root root 0 Okt  6 10:56 usb6 -> ../../../devices/pci0000:00/0000:00:1d.0/usb6
lrwxrwxrwx 1 root root 0 Okt  6 10:56 usb7 -> ../../../devices/pci0000:00/0000:00:1d.1/usb7
lrwxrwxrwx 1 root root 0 Okt  6 10:56 usb8 -> ../../../devices/pci0000:00/0000:00:1d.2/usb8

РЕДАКТИРОВАТЬ:

tokam@localhost:~$ lsusb -t
/:  Bus 08.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/:  Bus 07.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
    |__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 1: Dev 2, If 1, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 1: Dev 2, If 2, Class=Human Interface Device, Driver=usbhid, 12M
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M
    |__ Port 3: Dev 3, If 0, Class=Video, Driver=uvcvideo, 480M
    |__ Port 3: Dev 3, If 1, Class=Video, Driver=uvcvideo, 480M
    |__ Port 5: Dev 51, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 1: Dev 52, If 0, Class=Hub, Driver=hub/4p, 480M
            |__ Port 2: Dev 54, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
            |__ Port 2: Dev 54, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
        |__ Port 2: Dev 53, If 0, Class=Mass Storage, Driver=usb-storage, 480M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M
tokam
источник
8
Я не думаю, что эта функция заряда сна связана с Ubuntu. Windows и Ubuntu делают это для меня на моем ноутбуке. Вместо этого в BIOS должна быть настройка для отключения питания портов USB во время сна.
Странник
1
Вы уверены? Google показал мне некоторую информацию по ключевому слову "usb suspend ubuntu". Но я еще не уверен на 100%, как это сделать правильно. hamwaves.com/usb.autosuspend/en askubuntu.com/questions/80638/…
токам
1
Ну, вы можете отключить их, но это пока Ubuntu работает. Если вы хотите, чтобы скрипты запускались до того, как ноутбук перестал спать, чтобы приостановить порты, это возможно, но будет проще, по крайней мере, проверить настройки BIOS для этой опции.
Странник
1
Мой BIOS, к сожалению, не поддерживает такую ​​опцию.
Токам
1
@tokam, не могли бы вы отредактировать вопрос и добавить марку и модель ноутбука? Также не могли бы вы подтвердить, что это не общий порт питания USB, как описано здесь: dell.com/support/article/ro/ro/robsdt1/SLN155147/EN (значок молнии)
user.dz

Ответы:

4

Текущий камень преткновения с OP-ссылками, последующими комментариями и предлагаемыми ответами - статический идентификатор продукта, 1b1a:7001но номера шин и устройств постоянно меняются.

Решение

Создайте скрипт (любое имя) в каталоге /etc/pm/sleep.d/и поместите в него следующее:

#!/bin/bash
ZeroBUS=$(lsusb | grep 1b1a:7001 | cut -c  5-7 )

# Strip leading zeros
BUS=$(echo $ZeroBUS | sed 's/^0*//')

# Build "usbX" usb number
USB=usb$BUS

case $1 in
     suspend|suspend_hybrid|hibernate)
     echo "Powering off: " $USB
        echo $USB | sudo tee /sys/bus/usb/drivers/usb/unbind
        ;;
     resume|thaw)
        # No need to do anything here, kernel unsuspends USB devices
        # Show how to power on for interest sake but since device is
        # powered off the usb number will be blank.
        echo "Powering on: " $USB
        echo $USB | sudo tee /sys/bus/usb/drivers/usb/bind
        ;;
esac

Пометьте файл как исполняемый файл, sudo chmod +x file_nameгде «file_name» - это выбранное вами имя.

Объяснение

Это решение отключает весь USB-концентратор, что в моем случае означало телефон, беспроводную мышь, беспроводную клавиатуру и т. Д. При вызове сценария из терминала требуется ввести пароль sudo. Надеемся, что при вызове из systemd права sudo передаются по наследству. Я не мог проверить это, хотя, потому что у меня нет проводной мыши. Следовательно, для полномочий sudo может потребоваться дополнительная доработка.

Когда BIOS обеспечивает постоянное питание 5 В, питание не отключается физически, а устройства на шине должны отключаться. В моем случае беспроводная клавиатура и мышь перестали работать, и пришлось вернуться к клавиатуре ноутбука и сенсорной панели, чтобы снова включить питание.

Вы можете проверить это вручную, вызвав скрипт и передав параметры «suspend». Передача параметра «резюме» ничего не дает, потому что устройство выключено, у него нет идентификатора устройства для его включения.


Более простое решение отключить все порты USB

Недавно я столкнулся с проблемой, когда неизвестный порт препятствовал зависанию ноутбука. Я нашел это решение (кредит в коде), которое я изменил.

Создайте файл, /lib/systemd/system-sleep/custom-xhci_hcdиспользуя sudoполномочия и вставьте этот код:

#!/bin/bash

# Original script was using /bin/sh but shellcheck reporting warnings.

# NAME: custom-xhci_hcd
# PATH: /lib/systemd/system-sleep
# CALL: Called from SystemD automatically
# DESC: Suspend broken for USB3.0 as of Oct 25/2018 various kernels all at once

# DATE: Oct 28 2018.

# NOTE: From comment #61 at: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/522998

TMPLIST=/tmp/xhci-dev-list

# Original script was: case "${1}" in hibernate|suspend)

case $1/$2 in
  pre/*)
    echo "$0: Going to $2..."
    echo -n '' > $TMPLIST
          for i in `ls /sys/bus/pci/drivers/xhci_hcd/ | egrep '[0-9a-z]+\:[0-9a-z]+\:.*$'`; do
              # Unbind xhci_hcd for first device XXXX:XX:XX.X:
               echo -n "$i" | tee /sys/bus/pci/drivers/xhci_hcd/unbind
           echo "$i" >> $TMPLIST
          done
        ;;
  post/*)
    echo "$0: Waking up from $2..."
    for i in `cat $TMPLIST`; do
              # Bind xhci_hcd for first device XXXX:XX:XX.X:
              echo -n "$i" | tee /sys/bus/pci/drivers/xhci_hcd/bind
    done
    rm $TMPLIST
        ;;
esac
WinEunuuchs2Unix
источник
Могу ли я как-нибудь протестировать сценарий перед тем, как приостановить работу ноутбука с помощью не динамической команды echo?
Токам
вы смогли успешно изолировать шину и устройство, которое также показано в lsusb, но, как вы указали, каталог не существует, как показано в вопросе, каталоги имеют структуру, отличную от $ {BUS} - $ {DEVICE} и я не уверен, что если даже зная, какой из них правильный, то работает приостановка
токам
Тест, в котором я отключил и снова подключил мышь, помог определить папку. Но посмотрите на результаты следующего теста: Keine Berechtigung означает: нет прав root @ localhost: ~ # echo suspend> /sys/bus/usb/devices/2-5.1.2:1.1/power/level -bash: / sys /bus/usb/devices/2-5.1.2:1.1/power/level: Keine Berechtigung
токам
Мышь имеет светодиод снаружи и лазер внизу. Благодаря комбинации обоих ответов, я смог выключить лазер мыши, но не светодиод, который добавляет свет в мою спящую среду. Может быть, мы не можем выключить светодиод по ядру? Я тестировал его на изолированном USB-разъеме для мыши.
Токам
@tokam После долгих исследований и испытаний я наконец-то заставил его работать на моей системе вручную, но у меня не было мыши, чтобы протестировать его. Надеюсь, это работает!
WinEunuuchs2Unix
5

Найдите номер шины и устройства вашей мыши, выполнив команду lsusb(с подключенной и без нее), которую вы хотите, ту, которая есть только тогда, когда она подключена. Запишите цифры. В вашем случае они кажутся 6 и 6

выполните команду sudo cp /etc/pm/sleep.d/novatel_3g_suspend /etc/pm/sleep.d/mouse_suspend(мы должны сделать это, потому что geditбольше не имеет опции Сохранить как при запуске от имени суперпользователя, которую я могу найти.)

выполните команду gksu gedit /etc/pm/sleep.d/mouse_suspendИзмените номера шины и устройства, чтобы они соответствовали тем, которые вы заметили ранее. Сохраните полученный файл. Это будет выполнено, когда вы приостановите свой ноутбук.

В вашем случае вы должны изменить BUS = X и DEVICE = Y на номера шины и устройства, которые соответствуют рассматриваемой мыши. Это будет работать до тех пор, пока вы не переместите устройство на другой порт, и в этом случае вам придется снова найти устройство и соответствующим образом настроить файл.

BUS=X
DEVICE=Y

if [ ! -x /sys/bus/usb/devices/${BUS}-${DEVICE}/power/level ]; then
    exit 0
fi

case $1 in
     suspend|suspend_hybrid|hibernate)
    echo suspend > /sys/bus/usb/devices/${BUS}-${DEVICE}/power/level
        ;;
     resume|thaw)
    # No need to do anything here, kernel unsuspends USB devices
    :
        ;;
esac

Комментарии в файле (строки начинающиеся с #) неактуальны и могут быть безопасно проигнорированы.

Примечание: я проверил это через Suspend на рабочем столе, и оно работало так, как рекламируется. У меня нет доступа к тому же оборудованию, которое у вас есть, но мне пришлось возобновить работу системы через кнопку питания, поэтому я уверен, что это сработает для вас.

Редактировать на основе комментариев и расширения вопроса:

Похоже, что это информация, что вам нужно продолжить: Bus 006 Device 006: ID 046d:c52b Logitech, Inc. Unifying Receiver

Старейшина Гик
источник
В моем geditUbuntu 16.04 vanilla upgrade с 14.04 есть Save asопция под Fileменю. Что-то должно быть случилось с вашей конфигурацией ??? PS хороший ответ, попробую позже.
WinEunuuchs2Unix
У меня есть файл сохранить, как и с использованием Ubuntu Mate.
Токам
@ WinEunuuchs2Unix Интересно. Похоже, он не существует при новой установке. Возможно, это основа для нового вопроса ....
Старейшина Гик
@ElderGeek Обновление, Save Asесли я набираю, geditя получаю все верхнее меню «File Edit View Search Tools Tools Help», но если я gksu geditнабираю, список меню не появляется. НТН.
WinEunuuchs2Unix
1
@tokam Вы можете обновить свой вопрос с выходом из lsusb -tи lsusbсо всеми устройствами , подключенными как вы обычно используете им изо дня в день. Это может помочь нам визуализировать концентратор, а что нет.
WinEunuuchs2Unix