Você pode executar este script, após conectar ou desconectar o dispositivo usb, o código será executado:
while true; do state=$(lsusb) && sleep 2 && [[ $state != $(lsusb) ]] && echo "Change detected, replace echo with your command"; done
Usando o Linux Mint 18.1, eu remapeei algumas teclas do mouse e do teclado usando 'xinput' (comando abaixo). Quando eu desconectar o mouse e reconectá-lo, o comando xinput deve ser executado novamente manualmente.
Eu li que adicioná-los a ~/.xsessionrc
é a coisa certa a fazer. Como você pode ver, eu fiz isso. Eu também tentei ~/.xinputrc
. Ele será executado uma vez durante a inicialização, mas se eu desconectar e reconectar o mouse ou dormir no computador, preciso executar o comando xinput manualmente.
Alguém sabe o caminho certo para manter esses comandos sempre ativos? Por exemplo. Como posso fazê-los persistir através de um dispositivo desconectar / reconectar?
davidparks21@ghostmint ~ $ cat .xsessionrc
# Map mouse button 8 (top right) to button 2 (top left) and vice versa
xinput --set-button-map 10 1 8 3 4 5 6 7 2 9 10 11 12
# Fix numeric keypad for shift-home and shift-end
setxkbmap -option numpad:microsoft
Você pode executar este script, após conectar ou desconectar o dispositivo usb, o código será executado:
while true; do state=$(lsusb) && sleep 2 && [[ $state != $(lsusb) ]] && echo "Change detected, replace echo with your command"; done
Aqui está minha solução final, eu corrigi uma condição de corrida extremamente improvável e irrelevante na resposta de Nir. Também lidei com o fato de que não posso remapear as chaves quando o mouse está desconectado (nenhuma mensagem de erro enquanto está desconectado).
Eu adicionei a ~/.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 &
Eu usei o ID do mouse analisado no xinput como o gatilho em vez de lsusb
, mas tem o mesmo efeito.
Observe que os canais após o comando xinput apenas analisam o ID do mouse, o que pode mudar. Os IDs extras de mouse NOVO / VELHO eram uma anulação evasiva de qualquer possibilidade de uma condição de corrida.
Obrigado @Nir pela sugestão.
Carregar arquivos de configuração na inicialização depende do ambiente de área de trabalho que está sendo usado. Se você iniciou seu xserver digitando startx , isso normalmente indica que ele usará .xinitrc (armazenado em $ HOME).
Dentro de .xinitrc, você terá que carregar a configuração que possui os diferentes mapeamentos, ou seja, .xsessionrc
Então, a linha que você precisará é esta (em .xinitrc)
xrdb -merge ~/.xsessionrc
No entanto, se você estiver usando um gerenciador de login como o LightDM ou o GNOME, você terá que encontrar o mesmo equivalente
Para o que vale a pena:
Você pode usar o arquivo ~/.xsession
, em vez de ~/.xsessionrc
.
~/.xsessionrc
é específico do Debian, enquanto ~/.xsession
é semelhante ao UNIX e tem um comportamento semelhante em todas as distribuições.
Isso é o que funcionou no Ubuntu 16.04
Adicione os comandos ao final do arquivo .profile no diretório pessoal [~ / .profile]
Por exemplo:
$gedit ~/.profile
#the following command sets drag lock on.
xinput set-prop 12 291 1
Tags xorg xinput keyboard-shortcuts