¿Existe una API de bajo nivel de Python multiplataforma para capturar o generar eventos de teclado?

Estoy tratando de escribir un progtwig de Python multiplataforma que se ejecute en segundo plano, supervise todos los eventos de teclado y cuando ve algunos accesos directos específicos, genera uno o más eventos de teclado propios. Por ejemplo, esto podría ser útil para que Ctrl- @ se asigne a “my.email@address”, de modo que cada vez que un progtwig me pide mi dirección de correo electrónico, solo necesito escribir Ctrl- @.

Sé que tales progtwigs ya existen, y estoy reinventando la rueda … pero mi objective es simplemente aprender más sobre las API de teclado de bajo nivel. Además, la respuesta a esta pregunta podría ser útil para otros progtwigdores, por ejemplo, si desean iniciar una conexión SSH que requiere una contraseña, sin usar pexpect.

Gracias por tu ayuda.

Nota: hay una pregunta similar, pero está limitada a la plataforma Windows y no requiere python. Estoy buscando un api de python multiplataforma. También hay otras preguntas relacionadas con los eventos de teclado, pero aparentemente no están interesados ​​en los eventos de teclado de todo el sistema, solo en los atajos de teclado específicos de la aplicación.

Edición: probablemente debería agregar un descargo de responsabilidad aquí: no quiero escribir un keylogger. Si necesitara un keylogger, podría descargar uno de la web de todos modos. 😉

No hay tal API. Mi solución fue escribir un módulo de ayuda que usaría una ayuda diferente según el valor de os.name .

En Windows, usa las extensiones de Win32 .

En Linux, las cosas son un poco más complejas ya que los sistemas operativos reales protegen a sus usuarios contra los keyloggers [*]. Entonces, aquí necesitará un proceso raíz que vigile uno de [] los manejadores en /dev/input/ . Su mejor apuesta probablemente esté buscando una entrada debajo de /dev/input/by-path/ que contenga las cadenas "kbd" o "keyboard" . Eso debería funcionar en la mayoría de los casos.

[*]: Dios mío, ni siquiera mi escáner de virus / troyanos se quejará cuando inicie un progtwig Python que se engancha a los eventos del teclado …

Como el tipo que escribió el puerto de linux pykeylogger original, puedo decir que realmente no hay uno multiplataforma. Esencialmente, reescribí la API de pyhook para que los eventos del teclado se capturaran desde el propio xserver, usando la extensión de grabación. Por supuesto, esto supone que la extensión de registro está ahí, cargada en el servidor x.

A partir de ahí, es básicamente detectar si estás en Windows o Linux, y luego cargar el módulo correcto para el sistema operativo. Todo lo demás debe ser idéntico.

Eche un vistazo a la fuente de pykeylogger, en pyxhook.py para la clase y la implementación. De lo contrario, simplemente cargue ese módulo, o Pyhook en su lugar, dependiendo del sistema operativo.

He hecho algunas pruebas en Ubuntu 9.10. Pykeylogger no parece estar funcionando. He intentado cambiar el /etc/X11/xorg.conf para permitir que se cargue el módulo, pero en esa versión específica de ubuntu no hay xorg.conf. Por lo tanto, en mi opinión, ¡pykelogger NO está trabajando en ubuntu 9.10!

Las bibliotecas de interfaz de usuario multiplataforma como Tkinter o wxPython tienen API para eventos de teclado. Usando estos podría asignar «CTRL» + «@» a una acción.

En Linux, es posible que desee echar un vistazo a pykeylogger . Por alguna extraña razón, leer desde / dev / input / …. no siempre funciona cuando X se está ejecutando. Por ejemplo, no funciona en ubuntu 8.10. Pykeylogger usa xlib, que funciona exactamente cuando la otra manera no lo hace. Todavía estoy investigando esto, así que si encuentras una forma más sencilla de hacerlo, por favor, dímelo.

Bajo Linux es posible hacer esto fácilmente con Xlib. Vea esta página para más detalles:

http://www.larsen-b.com/Article/184.html