xinput
pode fazer o que você precisa, Lukasz. Você pode ter um one-liner (bem, não exatamente um one-liner, mas você pressionará ENTER apenas uma vez :-D) para isso, mas primeiro você deve fazer algum trabalho. Eu juro que é muito fácil, vou explicar a maioria das coisas aqui por uma questão de clareza.
Abra um terminal e digite:
xinput list
Você terá uma boa lista de ponteiros, botões do teclado, etc., como este trecho do meu:
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ USB+PS/2 Optical Mouse id=10 [slave pointer (2)]
⎜ ↳ PS/2 Mouse id=13 [slave pointer (2)]
⎜ ↳ AlpsPS/2 ALPS GlidePoint id=14 [slave pointer (2)]
Meu mouse USB está bem na segunda linha e você vê que seu ID é 10 . Localize o mouse na lista e anote seu ID, você precisará dele para o comando principal para o que você deseja.
Se você quiser verificar se recebeu o ID correto, execute xinput test <id>
. Se você mover o mouse, clicar nos botões, etc., deverá ver muitas linhas de informação no seu Terminal. Está listando tudo o que você faz com o mouse. Se nada acontecer, tente outro id da sua lista de ponteiros que faça sentido para você, você provavelmente escolheu o errado no início (isso realmente não deveria ser tão difícil).
Quando você finalmente encontrar o ID correto, execute este comando:
xinput test <id>|sed -une '/release/ { x
/^$/ s/^.*$/1/
G
h
s/^/ /
s/^ *\(......\)\n/ /p
x
s/\n.*$//
/^9*$/ s/^/0/
s/.9*$/x&/
h
s/^.*x//
y/0123456789/1234567890/
x
s/x.*$//
G
s/\n//
h
}'
Copie o acima como está e cole-o. Antes de você pressionar ENTER, substitua por
Alguns comentários importantes:
- Infelizmente, não sou muito bom console, shell, comandos, etc. certeza que alguém pode melhorar isso ou fornecer uma solução melhor. Há um inconveniente com minha solução: você realmente não tem resultados em real Tempo. Por alguma razão, parece estar em buffer, e você tem que gerar mais eventos do mouse para ler os mais velhos. Então, se você clicar e não é mostrado, mova o mouse bit e logo o último clique vai exposição. Desculpe por isso, mas eu tenho tentei algumas coisas, mas não sei como para resolver isso ainda. Espero que não seja isso ruim para você.
- Como você vê, qualquer o clique está sendo contado. No caso de você quer contar os cliques para apenas um dos botões, substitua 'release' por 'release 1', 'release 2', 'release 3 ', bem, você entendeu a ideia. Se vocês quer contar todos eles, mas com estatísticas separadas, execute o comando (com indicação correta do botão) em um terminal separado.
A abordagem que usei: xinput list <id>
faz o trabalho sujo, mostrando tudo o que acontece com o mouse. Então eu redireciono essa saída para sed
, que irá analisar apenas as linhas com eventos 'release'. Eu acho que não há problema em considerar que um evento 'release' encerra o 'processo de cliques' (botão para baixo e depois para cima). O script sed não apenas mostra as linhas com 'release', mas também as numera. Esse script foi copiado diretamente de info sed
(seção 4.7) e certamente poderia ser melhorado.