Sem fornecer a saída de xinput list
em seu sistema, ninguém pode oferecer uma resposta que você possa usar diretamente. Isso porque xinput
pode mostrar dispositivos diferentes dos ilustrados em .
Por exemplo, aqui está a saída no OSX:
$ xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ xquartz virtual pointer id=6 [slave pointer (2)]
⎜ ↳ pen id=8 [slave pointer (2)]
⎜ ↳ cursor id=9 [slave pointer (2)]
⎜ ↳ eraser id=10 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ xquartz virtual keyboard id=7 [slave keyboard (3)]
e aqui está a saída no meu Debian / testing:
$ xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ VMware VMware Virtual USB Mouse id=7 [slave pointer (2)]
⎜ ↳ VirtualPS/2 VMware VMMouse id=9 [slave pointer (2)]
⎜ ↳ VirtualPS/2 VMware VMMouse id=10 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=8 [slave keyboard (3)]
para que, em um sistema, haja possivelmente um id para escolher (ponteiro virtual xquartz), enquanto em outro há três possibilidades. Se você ler estes, você verá que os exemplos citados aqui não são planejados:
- Como posso alterar o mapeamento de teclado do mouse
- ' xinput list 'mostra o mesmo dispositivo duas vezes & IDs de dispositivo mudam: como usar 'set-prop' em um script?
Dada a variação (e vaga documentação para xinput
), você provavelmente não pode automatizar a parte sobre como obter o ID do dispositivo de mouse.
Suponha que você escolha um identificador utilizável e, para fins de discussão, chame isso de "12". Um script pode ler a saída de
xinput get-button-map 12
em uma matriz. Algumas linguagens de script fornecem matrizes, por exemplo, bash
. Mas existem várias armadilhas:
- no meu sistema OSX, que retorna uma lista "1 2 3", enquanto no sistema Debian que retorna uma lista "1 2 3 4 5 6 7 8 9 10 11 12".
- você precisa adivinhar se os botões extras significam algo e
- até mesmo a atribuição de três números de botão pode não ser a óbvia esquerda / meio / direita.
Em seguida, o script para alternar as chaves precisa salvar seu estado em algum lugar, por exemplo, um arquivo em seu diretório pessoal. Um script para gerenciar isso teria que
- inicialize o arquivo com os botões atuais
- atualize-o de acordo com o seu esquema de alternar botões (com 3 existem "3!" arranjos possíveis)
Supondo que você tenha a configuração (e interpretação) mais simples, poderia fazer algo assim em um script:
#!/bin/sh
id=$1
cfg=$HOME/.mousebuttons
[ -f "$cfg" ] || xinput get-button-map $id | awk ' { printf "normal: %s\n", $0; }' >$cfg
mode=$(awk '{print $1;}' <$cfg)
# read and toggle
list=$(awk '{printf "%d %d %d\n", $3, $2, $4; }' <$cfg)
if [ "x$mode" = "xnormal" ]
then
mode=reverse
else
mode=normal
fi
# update the configuration
echo "$mode $list" | awk '{ printf "%s %d %d %d\n", $1, $2, $3, $4; }' >$cfg
xinput set-button-map $id $list
# show result
xinput get-button-map $id
O script aceita um parâmetro (o identificador do dispositivo de mouse). Para o exemplo dado (e nomear o script "toggle-buttons", tornando-o executável e colocando-o em seu $PATH
):
toggle-buttons 12
deve fazer o trabalho.