Tastaturinput aus Script heraus oder Windowmaker Arbeitsfläche wechseln

Diesmal komplett: Hallo Liste, ich habe folgendes Problem: Ich möchte aus einem Script heraus eine Tastatureingabe simulieren, habe jedoch keine Idee, wie dieses zu realisiern ist. Konkret geht es um folgendes: Ich möchte mehrere Programm im WindowMaker auf verschiedenen Arbeitsflächen mit Hilfe eines Scripts starten. Die Programme gehören jedoch alle der selben Klasse an, so dass die Funktionen von Window Maker zur Zuordnung Programm-Arbeitsfläche _nicht_ funktionieren. Wenn ich die Programme jedoch aus einem xterm manuell starte und zwischendurch jeweils die Arbeitsfläche mit der Tastenkombination CTRL-ALT_Pfeil_nach_rechts wechsele, erhalte ich das gewünschte Ergebnis. Meine Idee ist es nun, ein Script zu erstellen, welches in der folgenden Art und Weise funktioniert: Starte_Programm_1 Simuliere_Tastendruck CTRL-ALT-Pfeil_rechts Starte_Programm_2 Simuliere_Tastendruck CTRL-ALT-Pfeil_rechts usw. Ich kann nun leider nichts darüber finden, wie der Teil Simuliere_Tastendruck CTRL-ALT-Pfeil_rechts zu realisieren ist. Biin für jegliche Anregungen, RTFM usw. dankbar. P.S. Wenn es unter WindowMaker einen Befehl zum wechseln der Arbeitsfläche gibt, der sich aus einem Script aufrufen lässt wäre mir natürlich genauso geholfen... Frank

Hallo Frank, zuerst mal, Fake Key Events sind maximal als bedingt sinnvoll zu bezeichnen. On Fri, Apr 02, 2004 at 12:59:23PM +0200, Frank Bertling wrote:
Ich möchte aus einem Script heraus eine Tastatureingabe simulieren, habe jedoch keine Idee, wie dieses zu realisiern ist.
ich hab dir hier mal ein Programm gebaut, dass als Argument das gewünschte Programm und evtl. eine Verzögerung haben will. Das Programm muss mit absolutem Pfad und die Verzögerung in Sekunden angegeben werden. Beispielaufruf: ./right `which xterm` // ----------------fake.c----------------------------------- // Kompilierung: // gcc -I/usr/X11R6/include -L/usr/X11R6/lib -o right fake.c -lX11 -lXtst #include <X11/extensions/XTest.h> #include <X11/keysym.h> #include <time.h> #include <stdio.h> #include <stdlib.h> #define EXEC int main (int argc, char *argv[]) { Display* disp = XOpenDisplay( NULL ); #ifdef EXEC if ((argc != 2) && (argc != 3)){ fprintf(stderr, " usage: %s <FileToExecute> [wait]\n", argv[0]); return -1; } if (argc == 3){ sleep(atoi(argv[2]); } #endif if( disp == NULL ){ fprintf(stderr, " could not open display\n"); return -1; } XTestFakeKeyEvent( disp, XKeysymToKeycode( disp, XK_Alt_L), True, CurrentTime ); XTestFakeKeyEvent( disp, XKeysymToKeycode( disp, XK_Control_L), True, CurrentTime ); XTestFakeKeyEvent( disp, XKeysymToKeycode( disp, XK_Right), True, CurrentTime ); XTestFakeKeyEvent( disp, XKeysymToKeycode( disp, XK_Right), False, CurrentTime ); XTestFakeKeyEvent( disp, XKeysymToKeycode( disp, XK_Control_L), False, CurrentTime ); XTestFakeKeyEvent( disp, XKeysymToKeycode( disp, XK_Alt_L), False, CurrentTime ); XCloseDisplay( disp ); #ifdef EXEC if ( execv(argv[1], NULL) < 0){ fprintf(stderr, " could not exec() %s \n", argv[1]); return -1; } #endif return 0; } Wenn Du nur das Display ändern und nicht gleich ein Programm übergeben willst ändere die Zeile "#define EXEC" in "//#define EXEC" Greetings Daniel -- <sonnny> hm ich weiss warum linux so stabil ist es liegt an den pinguienen, was nicht fliegen kann kann auch nicht abstürzen :)
participants (2)
-
Daniel Lord
-
Frank Bertling