Aufmacher

Zaubern mit Xnee

Bildschirmaktionen aufzeichnen

01.09.2007 Xnee, Gnee, Cnee und Pnee – die merkwürdig klingenden Tools erwecken den Desktop wie von Geisterhand zum Leben.

Screen Recorder erfreuen spätestens seit dem Beryl/Compiz-Boom auch unter Linux viele Anwender. Es gibt aber noch einen anderen Weg, um die Ereignisse auf dem Desktop zu konservieren — und ihn geht Xnee [1]: Die Software zeichnet Mausklicks und -bewegungen sowie Tastaturanschläge auf. Spielen Sie die aufgezeichnete Datei später auf einem anderen Rechner ab, wiederholt Xnee alle Schritte. Voraussetzung ist, dass die Software auf beiden Rechnern läuft.

Neben dem recht lustigen Effekt des "Geister-Desktops" gibt es auch ein paar nützliche Anwendungsszenarien für Xnee. Tut Muttis Linux-Rechner mal nicht das, was er soll, schicken Sie eine schlanke Xnee-Datei, die alles wieder repariert. Oder Sie demonstrieren Mutti ganz plastisch, wie ein bestimmtes Programm funktioniert – live, ohne anwesend zu sein. Starten Sie mehrere Instanzen von Xnee, simulieren Sie einen gut ausgelasteten Rechner und testen so die Grenzen eines Systems. Ein mit Xnee arbeitendes Makro nimmt Ihnen Schritte ab, die Sie immer wieder manuell erledigen – etwa E-Mails abrufen oder sich per SSH an einem Server anmelden.

Was sich Xnee nennt, besteht eigentlich aus mehreren Werkzeugen. Die Software zerfällt in die drei Komponenten Gnee, Pnee und Cnee, die sich alle auf die Bibliothek Libxnee stützen. Bei Gnee handelt es sich um eine Gnome-GUI für Xnee (Abbildung 1), dank Pnee läuft die Software im Gnome-Panel und Cnee nennt sich schließlich das Kommandozeilen-Programm. Wir zeigen erst, wie die GUI funktioniert und wechseln dann mit Cnee auf die Konsole, Pnee lief im Test allerdings nicht.

Abbildung 1

Abbildung 1: Dank Gnee lässt sich Xnee auch über eine grafische Oberfläche steuern, die jedoch noch einige Schwächen zeigt.

Die Geister die ich rief

Natürlich könnten Sie auch Xnee selbst über ein Makro installieren lassen, das hieße aber, sich am eigenen Schopf aus dem Sumpf zu ziehen. Sie legen also selbst Hand an. Als Nutzer von Ubuntu "Feisty Fawn" oder OpenSuse 10.2 finden Sie auch über den Paketmanager eine Xnee-Version, allerdings raten wir von der Installation der schon betagten Version 1 ab. Den Quellcode der Version 3.01 finden Sie auf der Heft-CD.

Als Nutzer von Ubuntu brauchen Sie die Pakete build-essential, libxtst-dev, libxcb1, libxcb-xtest0, gtk2.0-dev, libpanel-applet2-dev sowie checkinstall. Entpacken Sie die Quellcode-Datei, wechseln Sie in das neue Unterverzeichnis und geben Sie ./configure ein. Tritt beim Konfigurieren ein Fehler auf, gibt die Textausgabe einen Hinweis darauf, welches Paket noch fehlt. Im Erfolgsfall erscheint der in Abbildung 2 gezeigte Text.

Abbildung 2

Abbildung 2: Dieser Text erscheint in der Konsole, wenn Configure alle Pakete findet, um Xnee erfolgreich zu kompilieren.

Nutzer von Open Suse 10.2 gehen nach dem selben Muster vor, hier heißen die vorher zu installierenden Pakete gnome-panel-devel, gnome-panel und checkinstall. Um die Entwickler-Werkzeuge einzuspielen, wählen Sie über das Filter-Menü links oben in YaSTs Software-Installations-Rubrik den Punkt Schemata | Grundlegende Entwicklung (Abbildung 3). Anwender von Suse Linux 10.1 installieren auf dem selben Weg Selektionen | C/C++ Compiler und Werkzeuge und dann die Pakete gnome-panel, gnome-panel-devel sowie checkinstall.

Abbildung 3

Abbildung 3: Um die Entwicklerwerkzeuge für Open Suse zu installieren, wählen Sie unter YaST das Schema Grundlegende Entwicklung.

Wollen Sie die Software unter Mandriva 2007 nutzen, helfen folgende Pakete weiter: gcc, make und gnome-panel. Danach fügen Sie ein neues Repository hinzu, indem Sie als root auf der Konsole die folgende Zeile eingeben:

$ urpmi.addmedia main ftp://ftp.informatik.hu-berlin.de/pub/Mirrors/ftp.mandrake.com/Mandrakelinux/official/2007.0/i586/media/main/release with media_info/hdlist.cz

Das dauert eine Weile, da Mandriva nun eine 30 MByte große Software-Liste von einem FTP-Server herunterlädt und einliest. Installieren Sie dann über den Paketmanager libxtst6-devel, libgtk+2.0_0-devel, libpanel-applet-2_0-devel und rpm-build. Auch das braucht Zeit: Die Installation der einzelnen Pakete zieht einen Rattenschwanz an Abhängigkeiten nach sich. Fehlt abschließend nur noch das Paket checkinstall von der Heft-CD. Sie installieren es – mit Root-Rechten – über urpmi checkinstall.

Nach der Konfiguration folgt auf allen Systemen der Befehl make, um die Quellen zu kompilieren. Läuft dieser Prozess erfolgreich durch, geben Sie als rootcheckinstall ein. Das installiert die Software nicht nur systemweit ins Verzeichnis /usr/local, sondern baut auch gleich ein DEB- bzw. RPM-Paket. Bestätigen Sie dafür einfach alle Fragen der Software mit [Eingabe]. Suse-Anwender müssen das Paket noch installieren, was über rpm -Uhv /usr/src/packages/RPMS/i386/Xnee-3.01-1.i386.rpm klappt – auch dafür brauchen Sie wieder administrative Rechte. Bei Mandriva heißt der Pfad zum RPM /usr/src/rpm/RPMS/i386/Xnee-3.01.rpm.

Lauschangriff

Xnee schneidet im wesentlichen die Kommunikation zwischen X-Server und X-Client mit. Es speichert die numerischen Daten in einer Datei, die es später wieder abspielt. Es gibt vier verschiedene Datentypen, die Server und Client austauschen: Anfragen ("Requests"), Antworten ("Replies"), Ereignisse ("Events") und Fehler ("Errors"). Mehr zum System lesen Sie unter anderem bei Wikipedia [2].

Xnee erkennt vom User generierte Ereignisse, wie das Drücken und Loslassen einer Taste ("KeyPress"). Es zeichnet aber auch Anfragen und Antworten auf, von denen der Anwender nichts mitbekommt ("VisibilityNotify"). Das X-Protokoll verarbeitet sie benutzerunabhängig. Anders als bei Screencasts liegen die von Xnee produzierten Dateien im KByte-Bereich, lassen sich also locker per E-Mail versenden.

Damit Xnee korrekt arbeitet, müssen Sie vorher noch die Record-Erweiterung für Ihren X-Server aktivieren. Dazu öffnen Sie mit Root-Rechten die Datei /etc/X11/xorg.conf und ergänzen den Bereich Section "Module" um die Zeile Load "record". Anschließend starten Sie den X-Server neu. Unter Open Suse 10.2, Suse Linux 10.1 und Mandriva 2007 beenden Sie ihn mit Root-Rechten und durch die Eingabe von init 3 und starten ihn über startx neu. Unter Ubuntu funktioniert dasselbe über sudo /etc/init.d/gdm stop und anschließend sudo /etc/init.d/gdm start.

Geisterstunde

Bevor Sie richtig loslegen, erlauben Sie sich noch einen ersten kleinen Spaß und sehen Sie Cnee bei der Arbeit zu. Der folgende Befehl zeigt Ihnen, wie das X-Protokoll Ihre Mausbewegungen sieht. Geben Sie ihn auf der Kommandozeile ein und schauen Sie dem Protokoll bei der Arbeit zu.

$ cnee --record --mouse --events-to-record 1000

Nun erscheinen Zahlenkolonnen auf die Konsole, sobald Sie die Maus bewegen. Nach 1000 Events hört der Spuk wieder auf, und Sie können sich der Xnee-GUI Gnee zuwenden. Dazu rufen Sie eine Konsole auf und geben gnee ein.

Die grafische Oberfläche bringt mehrere Reiter mit, um die Software zu konfigurieren. Leider fehlt jedwede Art von Dokumentation. Momentan erscheint die GUI noch nicht besonders ausgereift, was sich unter anderem an der bruchstückhaften Übersetzung der Menüpunkte zeigt. Insbesondere stört, dass sich Veränderungen nicht speichern lassen. Mitunter verabschiedet sich Gnee auch grußlos.

Betrachten Sie die vier Register (Abbildung 1). Aktivieren Sie Verbose logging unter General Settings, dokumentiert das Programm seine Aktionen sehr ausführlich in der Konsole. Kreuzen Sie Seconds an, wartet Gnee die angegebene Zahl an Sekunden, bevor es aufzeichnet. Das sorgt nebenbei dafür, dass die Software das erste Loslassen der Maustaste beim Klick auf Aufnahme ignoriert.

Nun wechseln Sie in den Reiter Record Settings. Ein Display tragen Sie ein, wenn Sie Aktionen auf einem anderen Display aufzeichnen. Die Eingabe lautet dann etwa :0.1, Standard ist Display :0.0. Offensichtlich akzeptiert Gnee keine neuen Speicherorte für seine temporären Session-Dateien (mit der Dateiendung XNS), also lassen Sie /tmp als Zielverzeichnis stehen.

Die Option Recording Limit setzt eine Grenze für die Länge der Aufnahme. Diese definieren Sie über die Zahl der Ereignisse (Events to record), etwa Mausklicks und Bewegungen, die Menge an Daten (Data to record) oder die verbrauchte Zeit (Time (secs)). Setzen Sie Events to record auf -1, zeichnet Gnee so lange auf, bis Sie [Strg]+[C] oder einen festgelegten Abbruch-Code drücken.

Ganz im unteren Bereich sehen Sie die beiden Felder Exclude und Include. Sie verschieben hier per Mausklick sämtliche X-Server-Befehle von der linken auf die rechte Seite (Abbildung 4) – per Doppelklick oder über die Pfeile. Allerdings lassen sich die X-Protokoll-Befehle nur einzeln verpflanzen, was das Ganze zu einer unnötig zeitaufwendigen Angelegenheit macht. Diese Ereignisse schneidet Gnee dann mit und spielt sie später wieder ab.

Abbildung 4

Abbildung 4: In Gnees Register Record Settings legen Sie fest, welche Typen von X-Befehlen das Tool aufzeichnen soll. Eine etwas mühsame Arbeit…

Im Reiter Replay Settings nehmen Sie keine Modifikationen vor. Über Replay with speed ändern Sie bei Bedarf die Abspielgeschwindigkeit der Aufnahme. Die Thresholds belassen Sie auf dem Vorgabewert: Sie sorgen dafür, dass Xnee die Geschwindigkeit beim Abspielen innerhalb eines bestimmten Schwellwerts synchronisiert. Dafür zeichnet die Software zwar mehr benutzerunabhängige Daten des X-Protokolls auf, reagiert dann aber flexibler auf Verzögerungen beim Abspielen. Wenn sich Xnee sklavisch an den vorgegebenen Zeitplan hält, scheitert das Abspielen womöglich, falls ein Programm langsamer startet oder der Browser eine Seite nur sehr gemächlich lädt. Mit Synchronisierung wartet die Software, bis ein bestimmtes Ereignis eintritt, und fährt erst dann mit dem Ablauf fort.

Nun ist es Zeit für einen Testlauf: Klicken Sie auf den Knopf mit der Beschriftung Aufnahme oder Record. Haben Sie unter Seconds einen Wert angegeben, zählt ein Countdown in der Konsole bis 0, dann beginnt die Aufnahme. Wechseln Sie zum Testen in das Startmenü und rufen Sie ein Programm auf – etwa einen Texteditor – und schreiben Sie ein paar Sätze. Verändern Sie die Schrift noch etwas und wechseln Sie dann zur Konsole, über die Sie Gnee gestartet haben. Hier drücken Sie [Alt]+[C], um die Aufzeichnung zu beenden. Berücksichtigen Sie bei Ihren Aufzeichnungen, dass Gnee Ihre Schritte später einfach wiederholt. Sudoku lässt sich mit Gnee zum Beispiel schlecht spielen – mit jedem neuen Aufruf verändert sich die Anordnung der Zahlen (Abbildung 5), so dass ein Makro die falschen Werte eintragen würde.

Abbildung 5

Abbildung 5: Mäßig intelligent: Xnee wiederholt stupide alle gezeigten Schritte – leider ändern sich die Zahlenvorgaben nach jedem Neustart von Sudoku.

Zum Abspielen rufen Sie die Software erneut in der Kommandozeile auf und klicken dann auf Wiedergabe. Nun sollte Gnee die eben von Ihnen vorgegebene Bewegung wiederholen. Tut es das nicht, müssen Sie einen neuen Start wagen. Das ist in Gnee sehr mühsam, weil Sie wieder im Reiter Record setting die Recordables hin- und her schieben – natürlich einzeln.

Cnee auf der Konsole

Einfacher als die GUI funktioniert die Software tatsächlich über die Konsole – und das nicht nur, weil es eine etwa 50-seitige englischsprachige Anleitung gibt, die Sie auf der Heft-CD finden. Über den Befehl

$ cnee --record --keyboard --mouse --events-to-record -1 --stop-key 9 --out-file test1.xnl

starten Sie ohne große Verrenkungen Ihre erste Aufzeichnung. Drücken Sie [Eingabe], zeichnet Cnee (--record) Mausbewegungen (--mouse) und Keyboard-Anschläge (--keyboard) auf. Das Tool hört damit erst auf (--events-to-record -1), wenn der Nutzer [Q] (--stop-key q) drückt. Alle Aktionen speichert Cnee in einer Datei namens test1.xnl im aktuellen Verzeichnis.

Zum Abspielen der Session bemühen Sie erneut die Konsole:

$ cnee --replay -f test1.xnl --time 3 --recall-window-position

Die Software wartet erstmal drei Sekunden (--time 3) und startet dann mit dem Abspielen der Datei (--replay -f test1.xnl), wobei sie das Fenster wieder dort öffnet, wo es zuvor war (--recall-window-position). Apropos Fenster: Trifft Xnee auf einen Desktop mit anderen Abmessungen – etwa 800x600 Pixel – passt es die abzuspielende Datei laut Handbuch automatisch an die neue Auflösung an. Das funktionierte im Test allerdings nicht zuverlässig. Probieren Sie am besten aus, ob Ihr Makro auch unabhängig von der Auflösung funktioniert, und benutzen Sie möglichst keine Startmenüs, um Programme aufzurufen, sondern [Alt]+[F2] und andere Tastenkürzel oder Kommandozeilen-Befehle.

Synchrone Schlangen bilden

Gnee listet im Bereich Recordables des Registers Record Settings sämtliche X-Befehle auf, die es aufzeichnen kann. Diese lassen sich auch händisch an Cnee anhängen, um eine synchrone Übertragung der Daten zu erreichen. Gemäß Handbuch, startet der folgende Befehl eine Session mit Synchronisation:

$ cnee --record --keyboard --mouse --events-to-record -1 --stop-key 9 --out-file test2.xnl --delivered-event-range Expose,MapRequest,LeaveNotify,EnterNotify

Vom ersten Aufruf unterscheidet sich dieser durch die angehängte Zeile --delivered-event-range und die dann folgenden Kommandos. Eine Liste der möglichen X-Protokoll-Parameter und ihrer Bedeutung finden Sie unter [3] und [4]. Für das Abspielen brauchen Sie keine besonderen Befehle, es funktioniert wie oben beschrieben.

Mein erstes Makro

Makros kennen Sie sicherlich von OpenOffice: Sie klicken auf Extras | Makros aufzeichnen, und die Software zeichnet alle Schritte auf. Drücken Sie dann eine bestimmte Tastenkombination, spult das Makro sämtliche Schritte automatisch ab.

Sie können auch mit Xnee Makros erzeugen und diese dann beim Start per Knopfdruck aufrufen. Dazu erzeugen Sie zunächst ein Shell-Skript, das eine gerade erstellte Xnee-Aufnahme mit dem Namen mein_xnee.xnl aufruft, die im Home-Verzeichnis /home/user liegt.

#!/bin/sh
cnee --replay --file /home/user/mein_xnee.xnl &

Sie speichern das Skript zum Beispiel unter dem Namen makro.sh im Home-Verzeichnis ab und machen es über chmod u+x makro.sh ausführbar.

Als Gnome-Nutzer drücken Sie nun [Alt]+[F2] und geben gconf-editor ein. Unter apps | metacity | global_keybindings klicken Sie im rechten Bereich doppelt auf run_command_1 und tragen in die leere Zeile des sich öffnenden Fensters <Alt>m ein (Abbildung 6). Dann wechseln Sie im linken Fenster zu keybinding_commands. Ein Doppelklick auf command_1 öffnet wieder ein Fenster, in die Zeile gehört der Pfad zu Ihrem Xnee-Makro, im Beispiel /home/user/makro.sh. Drücken Sie nun [Alt]+[M], rollt das Xnee-Makro an.

Abbildung 6

Abbildung 6: Über den GConf-Editor legen Sie unter Gnome Tastaturkürzel fest, um ein Xnee-Makro zu starten, sobald Sie [Alt]+ [M] drücken.

Fazit

Wie der Zauberlehrling den Besen in Goethes gleichnamigen Gedicht lassen Sie dank Xnee Maus und Tastatur von Zauberhand tanzen. Auch ohne besondere Agenda macht es Spaß, mit dem Programm zu spielen, wobei die GUI Gnee noch nicht wirklich für den Praxiseinsatz taugt. Aber Vorsicht: Lassen Sie den Beelzebub unüberlegt irgendwelche Menüs bedienen und Programme starten, wächst Ihnen der Zauber womöglich über den Kopf – Tests helfen.

Glossar

X-Server und X-Client

Das X-Window-System ist ein Client-Server-System. Gewöhnlich laufen Server und Client auf demselben Rechner und kommunizieren über das so genannte X-Protokoll. Der Server bietet Dienste an, der Client nimmt sie in Anspruch. Der Server zeichnet dabei nicht nur Grafiken, sondern nimmt auch die Eingaben von Maus und Keyboard entgegen. Anwendungen, die diese Eingabegeräte nutzen wollen, melden sich als Clients ebenfalls beim X-Server an. X-Clients laufen auch auf entfernten Rechnern im Netzwerk.

Infos

[1] GNU-Projekt Xnee: http://www.gnu.org/software/xnee/

[2] Wikipedia zum Protokoll des X Window Systems: http://Protokollhttp://en.wikipedia.org/wiki/X_Window_System_core_protocol

[3] Befehle des X-Protokolls im Detail: http://python-xlib.sourceforge.net/doc/html/python-xlib_13.html

[4] Weitere Details zum X-Protokoll: http://www.catb.org/~esr/writings/taouu/html/ch03s07.html

Tip a friend    Druckansicht beenden Bookmark and Share
Kommentare