2012-09-01 19 views
6

Estoy escribiendo un programa de Linux en C, y necesito interceptar ciertos trazos del teclado.Cómo usar un evento de teclado en Linux usando el subsistema de entrada

Usando el subsistema de entrada (lectura/escritura/desarrollo/entrada/eventoX), puedo recibir un trazo del teclado (usando funciones de "lectura") o simular un trazo del teclado (usando la función "escritura").

Al usar la función "leer", puedo capturar los trazos del teclado del usuario, pero este evento se propaga y no sé cómo consumirlo.

+0

Demostración códigos: int devfd = abrir (dispositivo, ...);/* Abra el dispositivo kernel "/ dev/input/eventX". */ read (devfd, ...);/* Leer un evento de teclado. */ write (devfd, ...);/* Simular un evento de teclado. */ – zccoding

+2

No es necesario comentar su propia pregunta. Puede editar la pregunta para incluir más detalles y formatear la fuente. Asegúrese de que su fuente esté clara para quienes responderán. – bytebuster

Respuesta

5

De manera predeterminada, los eventos de entrada se transmiten a todas las aplicaciones y controladores de escucha. Sin embargo, es posible que una aplicación capture el dispositivo a través de la interfaz evdev; eche un vistazo a EVIOCGRABioctl(). Eso solo permitiría que esa aplicación específica reciba eventos de ese dispositivo en particular.

El problema con este enfoque es que no se puede realmente prevenir un evento específico se propaguen después de que se recibe - sólo se puede agarrar el dispositivo de antemano, que luego capturar todos los eventos. Por lo tanto, si desea filtro eventos de entrada, debe usar una solución alternativa.

La solución que he usado en mi propia evmapd demonio involucrado agarrar el dispositivo original y utilizando el subsistema de uinput para proporcionar otro dispositivo con todas las modificaciones que necesitaba, incluyendo teclas reasignadas y varios otros cambios ...

Cuestiones relacionadas