Senden von Tastenanschlägen an ein X-Fenster

Ich experimentiere derzeit mit xdotool, um Schlüssel an einen Prozess zu senden (ich verstehe, dass dies möglicherweise nicht für alle Prozesse funktioniert, für die _NET_WM_PID nicht festgelegt ist). Ich habe Probleme beim Senden von Tastenanschlägen an andere Fenster als den Fokus. Es funktioniert, wenn Sie Tastatureingaben an die sendenCURRENTWINDOW. Unten ist das Snippet, mit dem ich die Funktionalität von xdotool getestet habe.

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;
}

Zusätzlich zum Testen der Funktionalität von xdotool habe ich mich mit dem Quellcode von xdotool befasst. Interessanterweise habe ich festgestellt, dass sie Xtest verwenden, um Tastatureingaben an das fokussierte Fenster zu senden (CURRENTWINDOW) und X11XSendEvent für andere Fenster. Ich habe mich an xdotool gewandt, weil ich XSendEvent nicht zum Laufen bringen konnte und Xtest keine Schlüssel an andere Fenster als das fokussierte Fenster senden kann.

Benutze ich das xdotool nicht richtig? Funktioniert xdotool nicht mit allen * nix-Betriebssystemen mit X11?

[Ich starte dies unter Ubuntu 13.04.]

BEARBEITEN

Es sieht also so aus, als würde das funktionieren, aber nicht für alle gefundenen Fenster. Zum Beispiel funktioniert es für Firefox, aber nicht für gedit und gnome-terminal, obwohl es gedit und gnome-terminal anhand seiner pid gefunden hat. Es verhält sich anders, wenn ich verwendet habeCURRENTWINDOW.

Es wäre also großartig, wenn jemand erklären könnte, warum dies so ist. Wie hängt es mit dem Force Send Flag in einem XEvent zusammen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage