Como desligar a alimentação USB do mouse quando suspendo o notebook?

19

A luz LED do meu mouse me dá nos nervos quando dorme. Normalmente, fecho meu notebook à noite e o Ubuntu liga pm-suspend. De qualquer forma, o plugue USB ainda é servido com energia. Eu poderia até carregar meu smartphone. Isso é ruim para mim por duas razões. Eu tenho que desconectar o mouse e a bateria do notebook [akku] dura menos. Existe uma maneira de desligar automaticamente meu dispositivo USB ou todos os dispositivos USB quando o notebook entra no modo de suspensão?

Como configurá-lo?

EDIT: Conforme solicitado nos comentários, adiciono esta informação: Estou usando um Lenovo G550.

EDIT: Como solicitado aqui minha saída 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

EDIT: Eu acho que esta informação também leva à resposta.

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

EDITAR:

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
fonte
8
Eu não acho que esse recurso de cobrança de sono tenha algo a ver com o Ubuntu. Windows e Ubuntu fazem isso por mim no meu laptop. Em vez disso, deve haver uma configuração no BIOS para desligar a energia das portas USB durante o sono.
TheWanderer
11
Você tem certeza? O Google me mostrou algumas informações para a palavra-chave "usb suspend ubuntu". Mas ainda não tenho 100% de certeza de como fazê-lo corretamente. hamwaves.com/usb.autosuspend/en askubuntu.com/questions/80638/…
tokam
11
Bem, você pode desativá-los, mas é enquanto o Ubuntu está em execução. Se você deseja criar scripts para executar antes que o laptop durma para suspender as portas, é possível, mas será mais fácil pelo menos verificar as configurações do BIOS para essa opção.
TheWanderer
11
Infelizmente, meu BIOS não suporta essa opção.
tokam 12/09/16
11
@tokam, você poderia editar a pergunta e adicionar a marca e o modelo do laptop? Além disso, você poderia confirmar que ele não é uma porta USB poder-share como explicado aqui: dell.com/support/article/ro/ro/robsdt1/SLN155147/EN (ícone de raio)
user.dz

Respostas:

4

O obstáculo atual com links OP, comentários de acompanhamento e respostas propostas é que o ID do produto é estático, 1b1a:7001mas os números de barramento e dispositivo continuam mudando.

A solução

Crie um script (qualquer nome que você queira) no diretório /etc/pm/sleep.d/e coloque o seguinte:

#!/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

Marque o arquivo como executável com sudo chmod +x file_nameonde "file_name" é o nome que você escolheu.

A explicação

Esta solução desliga todo o hub USB, o que, no meu caso, significava telefone, mouse sem fio, teclado sem fio, etc. Ao chamar o script a partir do terminal, é necessário digitar a senha do sudo. Esperançosamente, quando chamado de systemd, os poderes do sudo são herdados. No entanto, não pude testar isso porque não tenho um mouse com fio. Portanto, refinamentos adicionais podem ser necessários para os poderes do sudo.

A energia não é fisicamente cortada quando o BIOS fornece uma fonte de alimentação constante de 5V, mas os dispositivos no barramento são instruídos a se desligar. No meu caso, o teclado e o mouse sem fio pararam de funcionar e tiveram que recorrer ao teclado do laptop e ao touchpad para reativar a energia.

Você pode testar isso manualmente chamando o script e passando os parâmetros "suspend". Passar o parâmetro "resume" não faz nada porque o dispositivo está desligado, não possui um ID de dispositivo para ligá-lo novamente.


Solução mais fácil, desligue todas as portas USB

Recentemente, tive um problema em que uma porta desconhecida estava impedindo a suspensão do laptop. Encontrei esta solução (crédito em código) que modifiquei.

Crie o arquivo /lib/systemd/system-sleep/custom-xhci_hcdusando sudopowers e insira este código:

#!/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
fonte
Posso testar o script de alguma forma antes de realmente suspender o notebook com um comando de eco não dinâmico?
214166 #
você conseguiu isolar com êxito o barramento e o dispositivo, o que também é mostrado no lsusb, mas como você apontou o diretório não existe, conforme mostrado na pergunta, os diretórios têm uma estrutura diferente de $ {BUS} - $ {DEVICE} , e eu não tenho certeza se ainda com saber qual é o caminho certo as obras de suspensão
tokam
Um teste no qual desconectei e reconectei o mouse ajudou a identificar a pasta. Mas veja a saída do próximo teste: Keine Berechtigung significa: sem permissão 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
tokam
O mouse possui um LED na parte externa e um laser na parte inferior. Com uma combinação de ambas as respostas, consegui desligar o laser do mouse, mas não o LED, o que adiciona luz ao meu ambiente de sono. Talvez não possamos desligar o LED pelo Kernel? Testei-o em um plugue USB isolado para o mouse.
tokam 16/10/16
@tokam Depois de muitas pesquisas e testes, finalmente consegui fazê-lo funcionar no meu sistema manualmente, mas não tenho o mouse para testá-lo. Espero que funcione!
WinEunuuchs2Unix
5

Encontre o número do barramento e do dispositivo do mouse emitindo o comando lsusb(com e sem o plug-in): você deseja aquele que só existe quando está conectado. Anote os números. No seu caso, eles parecem ser 6 e 6

emita o comando sudo cp /etc/pm/sleep.d/novatel_3g_suspend /etc/pm/sleep.d/mouse_suspend(temos que fazer isso porque geditnão temos mais a opção Salvar como quando iniciada como superusuário que posso encontrar.)

emita o comando gksu gedit /etc/pm/sleep.d/mouse_suspendAltere os números de barramento e dispositivo para coincidir com os que você anotou anteriormente. Salve o arquivo resultante. Será executado quando você suspender o seu laptop.

No seu caso, você deve alterar BUS = X e DEVICE = Y para os números de barramento e dispositivo que correspondem ao mouse em questão. Isso funcionará até que você mova o dispositivo para uma porta diferente. Nesse caso, você precisará localizar o dispositivo novamente e ajustar o arquivo de acordo.

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

Os comentários no arquivo (linhas começando com #) são irrelevantes e podem ser ignorados com segurança.

Nota: eu testei isso via Suspender em uma área de trabalho e funcionou como anunciado. Não tenho acesso ao mesmo hardware que você, mas tive que reiniciar o sistema através do botão liga / desliga, por isso estou certo de que isso funcionará para você.

Edite com base nos comentários e na expansão da pergunta:

Parece que esta é a informação que você precisa para prosseguir: Bus 006 Device 006: ID 046d:c52b Logitech, Inc. Unifying Receiver

Elder Geek
fonte
No meu geditUbuntu 16.04 vanilla upgrade a partir do 14.04, há uma Save asopção no Filemenu. Algo deve ter acontecido com sua configuração ??? PS boa resposta, vou tentar mais tarde.
WinEunuuchs2Unix 28/09
Também tenho o arquivo salvo, usando o Ubuntu Mate.
tokam 29/09/16
@ WinEunuuchs2Unix Interessante. Parece não existir em uma nova instalação. Talvez esta seja a base para uma nova pergunta ....
Elder Geek
@ElderGeek Uma atualização sobre Save Asse eu digitar geditrecebo o menu principal completo de "Edição de arquivo Exibir Ajuda dos Documentos das Ferramentas de Pesquisa", mas se eu digitar gksu gedita lista de menus não aparecerá. HTH.
WinEunuuchs2Unix 01/10/19
11
@tokam Você pode atualizar sua pergunta com a saída de lsusb -te lsusbcom todos os seus dispositivos conectados, como normalmente os usa no dia-a-dia. Isso pode nos ajudar a visualizar o hub e o que não.
WinEunuuchs2Unix 4/16/16