Número do log de ocorrências do teclado

4

Como posso registrar um hit do teclado via shell script? Meu objetivo é registrar o número de acessos ao teclado de uma sessão de login no meu sistema Ubuntu.

Nota: não desejo registrar as teclas pressionadas, apenas o número de ocorrências. Então, no final, diz:

94853 hits today.
    
por Shlomo 20.11.2012 / 16:26

2 respostas

6

Monitoramento na sessão X11 (área de trabalho gráfica) somente

Em você está usando a camada XInput (você provavelmente está, se você está rodando um X moderno) então xinput test «keyboard-id» (do pacote xinput no Debian) dará eventos de press release e pey. Você pode obter o ID do teclado executando xinput list . Você também pode usar o nome.

xinput test 'AT Translated Set 2 keyboard' | grep -c 'key press'

Observe que quando você canaliza xinput , ele tem um buffer razoavelmente grande. Então você pode perder algumas teclas digitadas, infelizmente. Você poderia usar a API do XI2 diretamente para evitar isso, mas isso não é fácil do shell.

Você pode facilmente iniciar seu script como um dos scripts de login em seu ambiente de área de trabalho ou do seu arquivo .xsession , dependendo. O xinput deve sair quando você sair, porque perderá sua conexão X11. Por isso, é muito fácil rastrear quando sua sessão começa e termina.

Monitorando todo o sistema (todas as sessões, mesmo modo de texto)

Alternativamente, se você quiser monitorar as teclas all no sistema, não apenas aquelas na sua sessão X11, você pode usar o input-events (parte do pacote input-utils no Debian, em menos). Isso deve ser executado como root. Use lsinputs para encontrar o dispositivo de entrada correto (que é 0 no meu sistema) e, em seguida:

input-events 0 | grep -c 'EV_KEY.*pressed'

Se você seguir esse caminho, terá que descobrir quando suas sessões começam e terminam de alguma forma (por exemplo, a sugestão de dbus de peterph).

    
por 20.11.2012 / 17:46
3

Como o Derobert mencionou, xinput pode ser usado ( xinput --test-xi2 deve funcionar - você precisaria contar as linhas contendo RawKeyPress ). No entanto, você precisaria executar o seu script assim que sua sessão fosse iniciada e parar assim que terminasse - então você provavelmente também gostaria de assistir a uma sessão de dbus.

Além disso, você sentiria falta de qualquer coisa digitada em consoles virtuais - pois, infelizmente, você precisaria escrever um módulo do kernel, que exportaria suas estatísticas em algum lugar em /proc ou /sys - mas incluiria bastante muito tudo o que entra no computador.

    
por 20.11.2012 / 17:56