Como inserir eventos de mouse sintéticos na fila de entrada do X11

Eu tenho um dispositivo incorporado rodando Linux / X11 que está conectado a um dispositivo que fornece eventos de toque através de uma conexão USB. Este dispositivo não é reconhecido como qualquer forma de entrada padrão de ponteiro / mouse. O que estou tentando fazer é encontrar uma maneira de "injetar" eventos de mouse no X11 quando o dispositivo externo relatar um evento.

Fazer isso removeria a necessidade de meu aplicativo (escrito em C usando Gtk +) para falsas pressões de mouse com chamadas Gtk +.

Se isso puder ser feito, meu aplicativo Gtk + não precisaria saber ou se preocupar com o dispositivo que gera os eventos de toque. Ele apenas apareceria no aplicativo como eventos de mouse padrão.

Alguém sabe como inserir eventos de mouse sintéticos no X11?

Agora eu estou fazendo o seguinte que funciona, mas não é o ideal.

GtkWidget *btnSpin;     /* sample button */

gboolean buttonPress_cb( void *btn );
gboolean buttonDePress_cb( void *btn );


/*  make this call after the device library calls the TouchEvent_cb() callback
    and the application has determined which, if any, button was touched

    In this example we are assuming btnSpin was touched.

    This function will, in 5ms, begin the process of causing the button to do it's 
    normal animation ( button in, button out effects ) and then send the actual
    button_clicked event to the button.
*/
g_timeout_add(5, (GSourceFunc) buttonPress_cb, (void *)btnSpin);


/*  this callback is fired 5ms after the g_timeout_add() function above.
    It first sets the button state to ACTIVE to begin the animation cycle (pressed look)
    And then 250ms later calls buttonDePress_cb which will make the button look un-pressed
    and then send the button_clicked event.
*/    
gboolean buttonPress_cb( void *btn )
{

    gtk_widget_set_state((GtkWidget *)btn, GTK_STATE_ACTIVE);
    g_timeout_add(250, (GSourceFunc) buttonDePress_cb, btn);


    return( FALSE );
}

/*  Sets button state back to NORMAL ( not pressed look )
    and sends the button_clicked event so that the registered signal handler for the
    button can be activated
*/
gboolean buttonDePress_cb( void *btn )
{

    gtk_widget_set_state( btn, GTK_STATE_NORMAL);
    gtk_button_clicked( GTK_BUTTON( btn ));

    return( FALSE );
}