Como interceptar todas as teclas digitadas

6

Primeiro de tudo, eu não espero que algo como isto já exista, mas estou interessado em saber como algo assim seria realizado.

Eu quero um programa que possa ser executado em segundo plano que intercepte TODOS os pressionamentos de tecla digitados (suponho que o X esteja em execução e talvez até mesmo que o Unity também esteja sendo executado), processe esses pressionamentos de tecla e envie as teclas pressionadas para ser tratado como normal.

Meu objetivo final é criar uma espécie de mapeamento de teclas que imite mais de perto o comportamento de atalhos do OS X. Isso é muito difícil com uma instalação padrão do Ubuntu, já que coisas como ctrl + c parecem estar definidas, ao passo que, para imitar o comportamento do OS X, ele precisaria ser cmd + c. De qualquer forma, estou menos interessado em discutir o porquê e mais interessado em discutir o como. Eu não sou adverso para escrever um daemon em Python, C ou qualquer outra coisa que possa ser necessária (eu também estou um pouco confortável com as APIs padrão do UNIX). Eu sou, no entanto, completamente ignorante sobre por onde começar algo assim.

Quando os pressionamentos de tecla são interceptados e processados, ele deve ser capaz de enviá-los de volta ao SO seguindo a mesma interface com a qual os traçados foram originalmente enviados. Talvez isso tenha que ser um patch para o próprio X? Ou algo poderia ser colocado entre o teclado e o X?

    
por gregghz 13.12.2011 / 02:02

2 respostas

3

Para mostrar eventos de teclados, mas também outros dispositivos de entrada, há também evtest .
Não pode criar keypresses em si, mas veja abaixo.

Ele mostra eventos em um nível inferior a xev , por exemplo.

Além disso, mostra quais eventos podem ser criados pelo dispositivo.

Por acaso, event4 refere-se ao meu teclado principal.

Então eu crio o exemplo de saída abaixo com o comando

sudo evtest /dev/input/event4

e pressionando a B :

[ ... ]
Event: time 1429316964.681508, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70004
Event: time 1429316964.681508, type 1 (EV_KEY), code 30 (KEY_A), value 1
Event: time 1429316964.681508, -------------- SYN_REPORT ------------
aEvent: time 1429316964.761540, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70004
Event: time 1429316964.761540, type 1 (EV_KEY), code 30 (KEY_A), value 0
Event: time 1429316964.761540, -------------- SYN_REPORT ------------
Event: time 1429316965.385461, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e1
Event: time 1429316965.385461, type 1 (EV_KEY), code 42 (KEY_LEFTSHIFT), value 1
Event: time 1429316965.385461, -------------- SYN_REPORT ------------
Event: time 1429316965.577461, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70005
Event: time 1429316965.577461, type 1 (EV_KEY), code 48 (KEY_B), value 1
Event: time 1429316965.577461, -------------- SYN_REPORT ------------
BEvent: time 1429316965.641460, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70005
Event: time 1429316965.641460, type 1 (EV_KEY), code 48 (KEY_B), value 0
Event: time 1429316965.641460, -------------- SYN_REPORT ------------
Event: time 1429316965.713470, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e1
Event: time 1429316965.713470, type 1 (EV_KEY), code 42 (KEY_LEFTSHIFT), value 0
[ ... ]


(Para encontrar o número correto do evento (como meu event4), você pode ver cat /proc/bus/input/devices . O Name pode não se referir a um teclado, mas procure a entrada Handlers contendo sysrq kbd e leds . Ou apenas experimente todos.)


Os eventos Keypress não podem ser criados por evdev , mas há uma implementação de um remapeamento de chave usando evdev que pode criar novos eventos,
Parece corresponder ao que você está procurando:

Modificador At Home by Evdev ( ahm or at-home-modifier-evdev ):

  

Permite, por exemplo, "tecla de função dupla Espaço / Shift". Quando você pressiona o   Espaço chave sozinho, é um espaço; mas quando você pressiona com outra tecla,   é uma mudança. Por exemplo, space + x = X, grosso modo.

     

Quaisquer pares de chaves são possíveis. Por exemplo, você pode transformar seu Alt esquerdo   em BS / Alt, além de Espaço / Shift. Neste exemplo, Space   seguido por LAlt envia Shift + BS, LAlt seguido por Space faz Alt +   Espaço e Espaço + LAlt + x e LAlt + Espaço + x é Alt + Shift + x.

     

É um fork do driver "evdev" Xorg [...]

Ele não pretende ser uma implementação limpa, mas isso não impede que você aprenda com isso.

    
por Volker Siegel 18.04.2015 / 02:34
2

Sim, existe um keylogger para o Ubuntu ...

Você pode baixá-lo aqui

Ou você o instala via apt-get

Ative os repositórios do universo e execute o seguinte no terminal

sudo aptitude update
sudo aptitude install lkl

Para executar, digite o seguinte no terminal

lkl -l -k us_km -o log.file

para ver resultados

tail log.file

    
por Ringtail 01.03.2012 / 17:30