Mouse USB "parou" após o Suspend? Como resolver no Ubuntu 25.10 (Acer Nitro & Outros)

Fala galera,

Quem usa notebooks, sabe que o gerenciamento de energia do Linux às vezes briga com o firmware da fabricante. O problema clássico: você suspende o notebook, ele volta, o mouse acende a luz, mas o cursor não se mexe. Só volta se tirar e colocar o cabo.

Depois de debugar o comportamento do kernel e do xHCI, cheguei a uma solução definitiva que faz um “re-plug lógico” via software.

O Problema

O controlador USB entra em estado D3 (power saving) e, ao retornar, o driver usbhid não consegue restabelecer o handshake de dados com o mouse, embora a porta forneça energia.

A Solução: Script de Re-inicialização via Systemd

Passo 1: O Script de Reset

Vamos criar um script que força a energia da porta para “sempre ligado” e reinicia o hub USB logicamente.

  1. No terminal, crie a pasta de scripts (se não tiver):

    mkdir -p ~/.scripts

  2. Crie o arquivo:

    nano ~/.scripts/fix-mouse-usb.sh

  3. Cole o conteúdo abaixo:

Bash

#!/bin/bash
# Aguarda o hardware estabilizar após o wake
sleep 2

# Força todos os controladores USB para o estado 'on'
for dev in /sys/bus/usb/devices/*/power/control; do
    echo "on" > "$dev" 2>/dev/null
done

# O Pulo do Gato: Re-plug lógico no hub 1-1
# Isso força o kernel a redescobrir os dispositivos sem tocar no cabo
if [ -f /sys/bus/usb/devices/1-1/authorized ]; then
    echo 0 > /sys/bus/usb/devices/1-1/authorized
    sleep 0.5
    echo 1 > /sys/bus/usb/devices/1-1/authorized
fi

# Reinicia o driver HID para garantir o funcionamento do cursor
/usr/sbin/modprobe -r usbhid && /usr/sbin/modprobe usbhid

  1. Dê permissão de execução:

    chmod +x ~/.scripts/fix-mouse-usb.sh

Passo 2: O Gatilho do Systemd

Agora, vamos fazer o Ubuntu rodar esse script automaticamente toda vez que você abrir a tampa do note ou acordá-lo.

  1. Crie o arquivo de serviço (como root):

    sudo nano /etc/systemd/system/fix-mouse-resume.service

  2. Cole a configuração:

Code snippet

[Unit]
Description=Fix USB Mouse on Resume
After=suspend.target hibernate.target

[Service]
Type=oneshot
ExecStart=/home/SEU_USUARIO/.scripts/fix-mouse-usb.sh
RemainAfterExit=yes

[Install]
WantedBy=suspend.target hibernate.target

Nota: Substitua SEU_USUARIO pelo seu nome de usuário no caminho acima!

  1. Ative o serviço:

    Bash

    sudo systemctl daemon-reload
    sudo systemctl enable fix-mouse-resume.service
    
    

:light_bulb: Dicas Extras

  • Identificando sua porta: No tutorial usei o hub 1-1. Se o seu mouse estiver em outra porta, use o comando lsusb -t para ver onde ele está pendurado e ajuste o script se necessário.

  • Log de Debug: Se quiser saber se o script rodou mesmo, você pode ver os logs com: journalctl -u fix-mouse-resume.service.

  • Segurança: Colocar o script na sua HOME facilita a edição, mas garanta que o arquivo tenha permissões 755 para que o sistema (root) consiga executá-lo sem erros.

Espero que ajude quem estiver passando por esse estresse!