Wysyłanie naciśnięć klawiszy do okna X.

Obecnie eksperymentuję z xdotool, aby wysłać klucze do procesu (rozumiem, że może nie działać dla wszystkich procesów, które nie ustawiają _NET_WM_PID). Mam problem z wysyłaniem naciśnięć klawiszy do innych okien z fokusa. Działa, jeśli wysyłasz naciśnięcia klawiszy doCURRENTWINDOW. Poniżej znajduje się fragment, którego użyłem do testowania funkcjonalności xdotool.

extern "C"{
  #include <xdo.h>
}
//extern "C" xdo_window_search
#include <iostream>
#include <string.h>

using namespace std;

int main(){
    xdo_t* p_xdo = xdo_new(NULL);

    // Allocate memory for search query.
    xdo_search_t s;
    // Clear the allocated memory.
    memset(&s, 0, sizeof(xdo_search_t));
    // Set the search query.
    s.pid = 1916;
    s.max_depth = -1;
    s.searchmask = SEARCH_PID;
    s.require = xdo_search::SEARCH_ANY;
    // Allocate memory for output
    Window* windows;
    int no_windows;
    xdo_window_search(p_xdo,&s,&windows,&no_windows);
    cout << no_windows << endl;
    // Prints all windows' names with matching criteria
    for( int i=0;i<no_windows;i++ ){
        unsigned char * name;
        int size;
        int type;
        xdo_get_window_name(p_xdo,windows[i],&name,&size,&type);
        cout << i << ":" << name << endl;
    }
    for( int i=0;i<no_windows;i++ ){
        xdo_type(p_xdo,windows[i],"Hello World",0);
    }
    //xdo_type(p_xdo,CURRENTWINDOW,"Hello World",0); // This does work.
    return 0;
}

Oprócz testowania funkcjonalności xdotool, przejrzałem kod źródłowy xdotool. Co ciekawe, odkryłem, że używają Xtest do wysyłania naciśnięć klawiszy do skupionego okna (CURRENTWINDOW) i X11XSendEvent dla innych okien. Zwróciłem się do xdotool, ponieważ nie mogłem uruchomić XSendEvent i Xtest nie może wysyłać kluczy do innych okien niż okno zogniskowane.

Czy nie używam poprawnie xdotool? Czy xdotool nie działa ze wszystkimi systemami operacyjnymi * nix z X11?

[Używam tego na Ubuntu 13.04.]

EDYTOWAĆ

Wygląda na to, że działa, ale nie dla wszystkich znalezionych okien. Na przykład działa dla firefox, ale nie dla gedit i gnome-terminal, chociaż znalazł gedit i gnome-terminal przez jego pid. Zachowuje się inaczej, gdybym użyłCURRENTWINDOW.

Więc byłoby wspaniale, gdyby ktoś mógł to wyjaśnić. Czy jest to związane z flagą wysyłania siły w XEvent?

questionAnswers(1)

yourAnswerToTheQuestion