Como tornar os comandos de xinput permanentes

2

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
    
por David Parks 24.12.2016 / 19:36

5 respostas

1

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
    
por 26.01.2017 / 16:35
1

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.

    
por 27.01.2017 / 18:16
-2

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

    
por 25.01.2017 / 12:59
-2

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.

    
por 25.01.2017 / 15:09
-2

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

    
por 21.12.2017 / 14:46