Quero fazer com que as configurações do xinput para meu mouse USB persistam depois que ele for desligado e ligado novamente. Como posso monitorar esse evento?
Isso não funciona, pois nunca desconecto o receptor USB: Como fazer com que as configurações do xinput persistam após os dispositivos serem desconectados, reconectados e após desligamento, reinicialização, etc.?
Pelo que entendi, o udev pode ser usado para aplicativos de detecção de HW, mas não parece ser capaz de detectar mudanças de estado no dispositivo, como um Logitech Unifying Receiver.
Acho que a chave para resolver isso é rastrear eventos no receptor e escrever um script para executar o comando xinput. Alguém saberia como posso detectar esse evento? É claro que Solaar é capaz de detectar isso, mas isso não significa que seja simples para um usuário não especialista em Linux.
Obrigado!
Responder1
Resolvi esse problema com base em uma sugestão que veio de outro post no Unix Stack Exchange.
Resumindo, executo um script de shell em segundo plano que faz um loop a cada 2 segundos procurando por uma alteração no mouse; quando encontra, ele executa novamente o comando xinput.
A solução original (e mais simples) está postada aqui:
https://unix.stackexchange.com/questions/332573/how-to-make-xinput-commands-permanent/340594#340594
Aqui está o script em que executo ~/.xinitrc
:
# Map mouse button 8 (top right) to button 2 (top left) and vice versa, run when changes to the mouse occur
while true; do
NEW_MOUSEID=$(xinput | grep "Expert Mouse" | grep -o -E '[0-9]+' | head -n 1)
if [ "$MOUSEID" != "$NEW_MOUSEID" ]; then
MOUSEID=$NEW_MOUSEID
if [ "$MOUSEID" != "" ]; then
xinput --set-button-map $MOUSEID 1 8 3 4 5 6 7 2 9 10 11 12
fi
fi
sleep 2
done &
Estrutura básica:
- Observe as alterações no ID do USB do xinput a cada 2 segundos
- Se o ID do mouse estiver em branco, ele não está conectado, não execute o xinput (você receberá um erro se fizer isso)
- A análise do
xinput
comando apenas retorna o ID do dispositivo USB do mouse "Expert Mouse", ex: "14"
Observe que a resposta original sugere monitorar alterações lsusb
e executar novamente o comando, o que funciona da mesma forma.