GNU/Linux >> Tutoriales Linux >  >> Linux

¿Es posible que un proceso daemon (es decir, en segundo plano) busque pulsaciones de teclas desde un teclado USB?

Lo más probable es que los dispositivos obtengan un archivo en 09 llamado 12 donde N son los diversos dispositivos como mouse, teclado, conector, botones de encendido, etc.

06

debería darte una pista.

Mira también:

16

Donde 25 el valor es la ruta bajo 31 .

Puede probar por ej.

23

Para implementar, use ioctl y verifique dispositivos + monitor.

EDICIÓN 2:

ESTÁ BIEN. Estoy ampliando esta respuesta basándome en la suposición 44 se utiliza.

Una forma podría ser:

  1. En el ciclo de inicio, todos los 52 archivos encontrados en 62 . Usa 77 para solicitar bits de evento:

    37

    luego comprueba si 85 -bit está establecido.

  2. IFF configurado y luego verifique las claves:

    45

    P.ej. si las teclas numéricas son interesantes, compruebe si los bits para 95 - 103 y 117 a 126 .

  3. Las claves IFF encontradas luego comienzan a monitorear el archivo de eventos en el hilo.

  4. Volver a 1.

De esta manera, debería poder monitorear todos los dispositivos que cumplan con los criterios deseados. No solo puedes buscar 131 como p. el botón de encendido tendrá este bit establecido, pero obviamente no tendrá 145 etc. establecido.

He visto falsos positivos para claves exóticas, pero para claves normales esto debería ser suficiente. No hay daño directo en el monitoreo, p. archivo de eventos para el botón de encendido o un conector, pero esos no emitirán los eventos en cuestión (también conocido como código incorrecto).

Más en detalle a continuación.

EDICIÓN 1:

Con respecto a "Explica la última afirmación..." . Pasando por la tierra de stackoverflow aquí... pero:

Una muestra rápida y sucia en C. Tendrá que implementar varios códigos para verificar que realmente obtenga el dispositivo correcto, traduzca el tipo de evento, el código y el valor. Por lo general, tecla abajo, tecla arriba, repetición de tecla, código de tecla, etc.

No tengo tiempo (y aquí es demasiado) para agregar el resto.

Echa un vistazo a 150 , programas como 161 , código del kernel, etc. para códigos de mapeo. P.ej. 170

De todos modos:

Ejecutar como por ejemplo:

54

Código:

66

EDICIÓN 2 (continuación):

Tenga en cuenta que si observa 182 tienes una letra al principio de cada línea. Aquí 193 significa mapa de bits. Eso es por ejemplo:

78

Cada uno de esos bits corresponde a una propiedad del dispositivo. Que por medio de mapa de bits, 1 indica que una propiedad está presente, como se define en 206 . :

85

Echa un vistazo a 210 en el árbol de fuentes del kernel. Un montón de buen código allí. (Por ejemplo, las propiedades de los dispositivos son producidas por esta función).

Cada uno de estos mapas de propiedades se puede obtener mediante 220 . Por ejemplo, si desea verificar qué propiedades LED están disponibles, diga:

95

Mira la definición de 232 en 244 por cómo 253 están definidos.

Para comprobar el estado de los LED, diga:

102

Si bit 1 en 269 son 1, entonces el bloqueo numérico está encendido. Si el bit 2 es 1, el bloqueo de mayúsculas está encendido, etc.

272 tiene varias definiciones.

Notas sobre el control de eventos:

El pseudocódigo para monitorear podría ser algo en la dirección de:

110

Algunos documentos relacionados:

  1. 285 , especialmente nota sección 5.
  2. 299 , descripción de varios eventos, etc. Tome nota de lo que se menciona en p. 303 sobre 312
  3. 320 ... lee el resto si quieres.

Puede hacerlo fácilmente haciendo referencia a 336 . Estos aparecen como enlaces simbólicos a los que puede desreferenciar usando 347 para determinar el dispositivo de bloque asociado. Sin embargo, estos enlaces son creados por 358 que podría no estar presente en su entorno integrado.

O... mira el 367 después de conectar el dispositivo USB. Debería darte el 378 nodo.


Linux
  1. Linux:¿es posible falsificar una ruta específica para un proceso?

  2. ¿Comprobar el proceso si se está ejecutando lo mismo?

  3. Cree un USB de arranque desde Linux:¡lo más fácil posible!

  4. Cómo ejecutar el proceso Rsync en segundo plano

  5. ¿Cómo configurar la afinidad de la CPU para un proceso de C o C++ en Linux?

8 comandos de Linux para una gestión de procesos eficaz

Cómo instalar RHEL 8 desde USB

Instalar Linux Mint desde USB

Comandos para la Gestión de Procesos en Linux

Ejecutar script PHP desde la línea de comando como proceso en segundo plano

¿Es posible falsificar una ruta específica para un proceso?