KeyPassX autotyper

Erstellt am 06.11.2015

hotkey per entry

Wirklich sichere Passwörter müssen nicht umbedingt kompliziert sein. Was ihnen an Komplexität fehlt, muss man eben durch Länge wett machen. Dann tippt man sich allerdings einen Wolf. Abhilfe sollen Passwortmanager bringen in denen man seine ganzen Logins hinterlegt und mit einem Masterpasswort absichert. Solange das Masterpasswort sicher ist, sind es die Passwörter in der Datenbank des Passwortmanagers auch.

Unter Linux ist der quasi Standard für einen Passwordmanager das Programm KeePassX, welches auch Platformunabhängig auf vielen anderen Betriebssystemen läuft. Die Einrichtung ist sehr intuitiv, allerdings hat mich eine Sache gestört. Die autotype-Funktion erlaubt nur einen globalen Hotkey. Der gewünschte Eintrag wird dann über den Fensternamen heraus gesucht. Das funktioniert im Browser noch ganz gut, spätestens auf der Konsole gibt es nur einen Fensternamen für z.B. 20 verschiedene ssh-Verbindungen. Dann ploppt beim autotype-hotkey ein Fenster auf und man kann aus einer Liste wählen, welches Passwort denn nun eingegeben werden soll.

Das fand ich reichlich unpraktisch, also habe ich ein wenig recherchiert und heraus kam ein kleines Perl-Programm. Dieses Skript habe ich mit einem externen USB-Numpad gekoppelt, sodass jetzt jede Taste auf dem Numpad den autotype für genau ein Passwort auslöst.

So wird's eingerichtet

Zunächst mal ein wenig zur Funktionsweise: Über die Perl-Module File::KeePass und File::KeePass::Agent wird der Passwort-Vault geladen und die autotype-Funktion verwirklicht. Diese Module müsst ihr also bei euch installiert haben.
Das Perl-Skript lauscht selber nicht am USB-Port, sondern erhält seine Befehle durch eine named-pipe (/var/run/keypad.pipe). Dies soll es ermöglichen auch andere Eingabemethoden einfach zu verwirklichen. Vielleicht möchte man ja auch Sondertasten konfigurieren. Das geht mit einem Programm, das dafür gemacht ist deutlich besser, als wenn ich das ganze noch mal in Perl implementiert hätte.

Um also die Tastendrücke vom Numpad abzufangen empfehle ich das Programm actkbd. Damit kann man sich direkt auf ein Input-Device klinken und damit entsprechend auch nur von diesem die Tastendrücke erhalten. Andere programme, wie xkindkeys oder auch die hotkey-funktionen der diversen WindowManager sind aber genauso denkbar. Am Ende der Seite habe ich auch eine Beispielkonfiguration für actkbd verlinkt. Ein Beispieleintrag für die /etc/actkbd.conf könnte z.B. so aussehen:

28:::echo "enter" > /var/run/keypad.pipe

Es wird also einfach der String "enter" und ein Zeilenumbruch in die Pipe geschrieben. kpautotyper.pl nimmt diesen String, gleicht ihn mit einer kleinen Tabelle ab, die den String "enter" mit dem Passwort-Eintrag für z.B. das E-Mail-Postfach verknüpft. Schließlich wird das Passwort an die Applikation (also z.B. den Browser) gesendet. Damit ihr nicht ausversehen, wenn ihr die Kaffeetasse auf dem Numpad verschüttet, sämtliche Passwörter in irgendein aktives Fenster schreibt, habe ich noch eine kleine Sicherheitssperre eingebaut. Damit das Passwort auch tatsächlich eingegeben wird, müsst ihr gleichzeitig die linke Windows-Taste (Super-Key) drücken. Wenn ihr sie wieder loslasst, wird das Passwort eingegeben. Lasst ihr die Taste länger als 5 Sekunden gedrückt, wird die Eingabe abgebrochen.

Damit die Tastendrücke des Numpads nicht auch in der Anwendung landen, muss man das Numpad noch im X-Server deaktivieren. Das geht über den Befehl xinput recht einfach. Lasst euch zunächst alle Input-Geräte auflisten. Ein Numpad hat dabei in der Regel zwei Geräte verankert - einmal für NumLock ON und einmal für OFF.

xinput list
⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
...
⎣ Virtual core keyboard                   	id=3	[master keyboard (2)]
...
    ↳ ORTEK USB Keyboard Hub                  	id=15	[slave  keyboard (3)]
    ↳ ORTEK USB Keyboard Hub                  	id=16	[slave  keyboard (3)]

Beide IDs müssen jetzt deaktiviert werden:

xinput set-prop 15 "Device Enabled" 0
xinput set-prop 16 "Device Enabled" 0

Das könnt ihr z.B. zusammen mit dem kpautotyper.pl-Skript in den Autostart eures WindowManagers stecken.

Funktionsweise des kpautotyper.pl Das ganze hab ich hier auch nochmal grafisch dargestellt. Damit dürfte etwas klarer werden, wie das ganze Funktioniert:

Über /dev/input/by-id/usb-VENDOR-Keyboard_Hub-event-kbd wird das Numpad ausgelesen. Dies übernimmt im Normalfall der X-Server. Per xinput sagen wir ihm, er soll das Numpad ignorieren.

Stattdessen lassen wir das Programm actkbd auf dem Input-Device horchen. Dieses Programm setzt jeden Tastendruck in einen String auf der keypad.pipe um.

Schließlich nimmt kpautotyper.pl diesen String auf der anderen Seite entgegen und führt die Autotypesequenz aus.

Zusammen gefasst:

  1. Installiert die Perl-Module File::KeePass, File::KeePass::Agent und File::KeePass::Agent::unix. Das geht am einfachsten über
    cpan install File::KeePass::Agent::unix
    sollte es keine Pakete in eurer Distribution geben.
  2. Installiert das Programm zenity. Ist normal eh installiert. Das ist ein grafisches Dialog-Programm, ähnlich zu xmessage. Darüber wird das Masterpasswort für eure Passwort-Datenbank eingegeben. Somit muss keine aktive Konsole geöffnet werden, sondern das Perl-Skript kann im Hintergrund laufen.
  3. Erstellt die Pipe als root-Nutzer, so kann auch nur root hinein schreiben:
    mkfifo /var/run/keypad.pipe
  4. Installiert das Programm actkbd. Sucht im Device-Tree unter /dev/input/by-id/ euer Numpad heraus und startet actkbd -s um heraus zu finden, welche Keycodes ihr benötigt.
    actkbd -d /dev/input/by-id/usb-VENDOR-Keyboard... -s
  5. Erstellt nun die actkbd.conf. Folgende Zeile dient als Beispiel. Eine fertige Konfiguration findet ihr im kpautotyper.pl-Skript und am Ende dieser Seite.
    28:::echo "enter" > /var/run/keypad.pipe
  6. Deaktiviert das Numpad im X-Server:
    xinput list
    xinput set-prop <ID> "Device Enabled" 0
  7. Konfiguriert das kpautotyper.pl-Skript, entsprechend eures KeePassX Passwort-Vault. Dabei müssen sämtliche Titel der Passworteinträge eindeutig sein. Es dürfen nicht mehrere Einträge mit dem gleichen Titel existieren. Sonst kann keine Autotypesequenz gefunden werden. Ein Beispiel für obige "enter"-Taste:
    $lookup->{"enter"} = { 'title' => 'E-Mail' };
  8. Startet actkbd als Daemon und in einer Konsole auf eurer grafischen Oberfläche das kpautotyper.pl-Skript. Drückt die linke Windows-Taste und eine Taste auf dem Numpad. Windows-Taste wieder loslassen und das Passwort sollte eingegeben werden. Als Parameter erwartet das Skript den Speicherort eurer Passwortdatenbank.
    perl kpautotyper.pl /home/user/passdb.keepassx

Download

Numpad mit individueller Beschriftung Zu guter Letzt worauf ihr alle gewartet habt :D der Download-Link:

Als abschließendes Schmankerl noch ein Bild von meinem angepassten Numpad. Habe kleine Klebeschildchen gedruckt und auf die Tasten gepapt. Bei über 25 verschiedenen, möglichen Kombinationen (NumLock macht's möglich) brauch ich zumindest eine kleine Gedächtnisstütze.
Solche Sticker kann man sich ganz einfach mit Doppelseitigem Klebeband auf der Unterseite und einem Streifen transparentem Paketklebeband auf der Oberseite herstellen. Sicher nix für die Ewigkeit, aber wenn die mal abgewetzt sind, dann druckt man eben neue.

Seitenanfang