Remote Keyboard/Mouse-Steuerung für Clients von Steuerkonsole¶
Aufgabenstellung¶
Hinzufügen der Möglichkeit Eingaben (Tastatur, Maus) an alle Clients gleichzeitig zu senden für den Pool Video Switch.
Generelle Idee: Das bestehende Grundmodul des PVS soll um Komponenten erweitert werden, die es ermöglichen auf einem oder mehreren Maschinen gleichzeitig von der PVS-Steuerkonsole aus Tastatureingaben abzusetzen (in einem weiteren Schritt wäre das auch für die Maus zu untersuchen). Damit soll es z.B. möglich sein, Tastendrücke wie ALT-DRUCK-B an eine Reihe von Maschinen zu schicken. Dieses kann je nach Tastenkombination etwas komplexer sein, da diese geeignet für die Steuerkonsole und die Clients angepasst/ausgewertet werden müssen.
Hierzu ist zu analysieren, wie sich dieses umsetzen lässt, da bestimmte Vorgänge, wie ALT-SYSRQ-B, Adminrechte benötigen.
Stand der Dinge¶
Das Steuermodul pvsmgr (bzw. pvsmgrtouch) sind in der Lage, Eingabeevents (Mausbewegungen, drei Maustasten, Tastendrücke) abzufangen und an den ausgewählten bzw. an alle Clients zu senden.
Dazu sind zwei Steuerbuttons in die Thumbnail- bzw. Closeupframes eingefügt. Einer aktiviert die Weitergabe von Eingabeereignissen, und der zweite gibt an, dass Ereignisse an alle Clients gesendet werden sollen. Die Ereignisse werden in einer Struktur verpackt:
+===16===+===16===+======32======+ (bits) | Type | Code | Value | +================================+
und Base64-kodiert über das normale PVS-Protokoll gesendet (als PVSCOMMAND-Paket mit Namen INPUTEVENT).
Die Position des Mauszeigers wird alle 100ms (im Code konfigurierbar) und unmittelbar vor Maustasten- oder Tastaturereignissen in absoluten Koordinaten übertragen.
Sonderereignisse (Neustart, Kill X-Server, ...) werden durch 5 Sekunden langes Drücken der Menü-Taste aktiviert (in diesem Fall wird kein Tastendruck an den Client gesendet, dies erfolgt erst bei loslassen der Taste innerhalb weniger als 5 Sekunden). Dann erscheint ein Popup-Menü, das alle dem System bekannten Sonderereignisse anbietet.
Architektur¶
Warum kein DBus-Service?
Die Verbindung zwischen pvs-Client und pvsprivinputd muss eigentlich nur eine Anforderung erfüllen: Der pvsprivinputd muss erkennen können, von welchem Prozess und Benutzer er aufgerufen wird. Das wird von DBus zwar prinzipiell geleistet, allerdings ist diese Funktionalität über QtDBus nicht zugänglich. Da pvsprivinputd auch nur eine einzige Funktion hat ("führe diese Sonderfunktion aus") und sowieso systemspezifisch ist, fiel die Entscheidung, ihn direkt über UNIX-Sockets anzubinden.
Was kann es?¶
- Senden von Tastatur- und Mausevents an einen oder alle Clients aus der Steuerkonsole heraus.
Clientseitig werden verschiedene Keymaps unterstützt. Die Software versucht nach dem Prinzip "Best Effort", die Tastendrücke so umzusetzen, wie sie auf dem Server ausgeführt werden. Problematisch ist dies vor Allem an Systemen, wo die Benutzerkeymap nur der physikalischen Tastatur zugeordnet ist, aber nicht dem CoreKeyboard (z.B. Ubuntu 10.04, wenn keine /etc/X11/xorg.conf verwendet wird), da dann nur das Absetzen von Tasten, die auch in der englischen Tastatur vorhanden sind, möglich ist.
- Senden von "Special" Events:
- Harmloser Test:
"Say Hello" - Gibt im Log des
pvsprivinputddiepid,uidundgiddes aufrufendenpvs-Daemons aus.
- Neustarten:
sendet
SIGINTan/sbin/init
- X-Server töten:
findet mit Hilfe von ConsoleKit (http://consolekit.freedesktop.org) den X-Server, der für den aufrufenden Benutzer zuständig ist, heraus und sendet
SIGTERMan diesen.
- Magic-SysRq:
Grundsätzlich können alle Funktionen aufgerufen werden (pvsprivinputd schreibt ein beliebiges Byte in
/proc/sysrq-trigger), aber nur die Funktionen in dieser Liste werden angeboten (mit Ausnahme vonh,g,v,x).
- Harmloser Test:
Erweiterungen¶
Die Behandlung von Eingabeereignissen ist erweiterbar. Siehe hierzu die angehängte API-Dokumentation in pvsinput-apidox.tar.bz2
Weitere Doku¶
Weitere Dokumentation findet sich in der Beschreibung der Bachlorarbeit (http://www.ks.uni-freiburg.de/php_arbeitdet.php?id=189) ...