Simular pulsación de tecla en una aplicación de consola Linux C

2 minutos de lectura

avatar de usuario
Baversjo

¿Hay alguna forma de simular una pulsación de tecla en Linux usando C?

En mi situación específica, estoy en Ubuntu 9.04 y necesito una aplicación simple que invoque presionar el botón “pausa” cuando se inicie. Eso obtendría un iframe en Firefox para actualizar usando Javascript.

Supongo que te refieres a la “aplicación X11”: no está del todo claro en tu descripción lo que planeas hacer. El siguiente fragmento de código enviará el código clave de “pausa” a la aplicación que actualmente tiene el foco de entrada del teclado en X11 usando la extensión XTest; por lo que he leído, esta es la forma más compatible de “falsificar” los eventos del teclado. Vea si puede aplicar esto a su escenario (no hay verificación de error sobre si XOpenDisplay tuvo éxito, para hacerlo más simple).

#include <X11/Xlib.h>
#include <X11/keysym.h>
#include <X11/extensions/XTest.h>
...
Display *display;
unsigned int keycode;
display = XOpenDisplay(NULL);
...
keycode = XKeysymToKeycode(display, XK_Pause);
XTestFakeKeyEvent(display, keycode, True, 0);
XTestFakeKeyEvent(display, keycode, False, 0);
XFlush(display);

Deberá vincular con -lX11 -lXtst.

Obviamente, Firefox necesitaría tener el foco en ese momento.

Sin embargo, tengo curiosidad por saber cuál es la tarea más grande que está tratando de lograr; sospecho que debería haber una solución más elegante que falsificar los eventos de pulsación de tecla.

  • comentario adicional sobre mi propio caso de uso para el código anterior: tuve un truco de fin de semana impulsado por OpenCV que me permitió falsificar las pulsaciones de teclas de flecha moviendo la cabeza frente a la cámara web (para poder desplazarme por las publicaciones /. y comer un sándwich en al mismo tiempo 🙂

    – Andrés Y.

    11 de agosto de 2009 a las 20:04

  • Quiero usar un Griffin Powermate para recargar un iframe 🙂

    – Baversjö

    11 de agosto de 2009 a las 20:45

  • Ah, entonces es más o menos el mismo uso que mi caso 🙂

    – Andrés Y.

    11 de agosto de 2009 a las 20:51

avatar de usuario
miguel galaxia

Hay una biblioteca programable llamada ‘xdotool’:

sudo apt-get install libxdo-dev libxdo2

prueba de gato.c

#include <stdio.h>
#include <stdlib.h>
#include <xdo.h>
#include <unistd.h>
int main() {
    xdo_t * x = xdo_new(":0.0");

    while(1) {
        printf("simulating Shift_L keypress\n");
        xdo_keysequence(x, CURRENTWINDOW, "Shift_L", 0);
        sleep(5);
    }

        return 0; 
}

Corre así:

gcc prueba.c -lxdo -o prueba

  • ¿Tienes el enlace para la documentación? No puedo encontrar nada para la parte programática de xdotool.

    – Shambhav Gautam

    2 de agosto de 2021 a las 12:18

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad