Tastenkürzel unter X

Aus Tuxfutter

Wechseln zu: Navigation, Suche

Tastenkürzel unter X nutzen - ein mini-HOWTO
von StephanReichelt

Inhaltsverzeichnis

[Bearbeiten] Problem

Ich will die Buttons meiner Maus (welche Zusatztasten besitzt) mit einer besonderen Funktionalität belegen. Wie geht das?
bzw.
Ich will bei einem bestimmten Tastenkürzel Programme starten oder Shell-Scripts ausführen. Wie geht das?

Dieser Punkt ist insofern durchaus sinnvoll, als die Tastaturkürzel-Konfiguration, die bspw. KDE mitbringt, in den häufigsten Fällen nur Standard-Aktionen festlegen lässt, eigene Befehle jedoch nicht ausführen lassen kann.

Diese beiden Anforderungen klingen zwar grundverschieden, jedoch können für ihre Realisierung die gleichen Tools benutzt werden.

[Bearbeiten] Lösung

[Bearbeiten] X-Server Konfiguration

Sollte die Maus bereits korrekt konfiguriert worden sein und wird vom X-Server erkannt, kann dieser Abschnitt übersprungen werden. Zunächst muss sichergestellt werden, dass der X-Server die Maus auch korrekt mit all Ihren Tasten erkennt. D.h., das Programm xev muss für jeden gedrückten Button der Maus etwas ausgeben. Wenn man bereits soweit ist, hat man schon so gut wie gewonnen. Sollte dies nicht der Fall sein, muss zuerst die Maus korrekt konfiguriert werden. Dies ist jedoch nicht Bestandteil dieses Mini-Howtos. Ansatzpunkte für die korrekte Konfiguration des X-Servers findet sich z.B. im XWindow-HOWTO des Linux Documentation Projects (siehe Weblinks).

[Bearbeiten] Tastenzuordnung

Der X-Server erkennt nun alle Tasten der Maus; Glückwunsch. Nun können wir uns auf die eigentlich Konfiguration der Tasten stürzen. Zunächst einmal benötigen wir die Tools xbindkeys und xmacroplay.

Mit xbindkeys kann man gedrückte Tasten vom X-Server abfangen und mithilfe dieser Information eigene Aktionen ausführen. Xmacroplay kann Tastencodes an den X-Server zurück schicken und ermöglicht damit die Bereitstellung globaler Tastenkürzel für alle Anwendungen; xmacroplay liest seine Daten von stdin.

Diese beiden Tools werden installiert (ggf. vorher kompiliert) und ihre Binaries in ein Verzeichnis gelegt, das im Suchpfad steht (bspw. /usr/local/bin/). Nun muss noch ein Konfigurationsfile für xbindkeys erzeugt werden:

  [user@box]$ xbindkeys -d > ~/.xbindkeysrc

Xmacroplay benötigt keine Konfigurationsangaben.

[Bearbeiten] Tastaturkürzel für Programmstart

Zunächst einmal müssen die Tastencodes des Tastatürkürzels ermittelt werden, das man gern nutzen möchte:

  [user@box]$ xbindkeys -k

Es öffnet sich nun ein Fenster. Wenn dieses den Eingabefocus erhält, kann man die gewünschte Kombination drücken. Es ergibt sich eine Ausgabe ähnlich dieser (Control + Alt + b) hier:

  "NoCommand"
      m:0x1c + c:56
      Control+Alt+Mod2 + b

Die mittlere Zeile kopiert man nun in das file ~/.xbindkeysrc. Eine Zeile davor wird in quotes (") der bei Eintreffen dieses Kürzels auszuführende Befehl eingegeben, z.B.

  "mozilla &"

oder auch

  "tar -cf /mnt/backup_volume/etc_`date +%Y-%m-%d` /etc/*"

für das schnelle Backup zwischendurch ... :)) <p/> Es ergibt sich also folgender Eintrag für die ~/.xbindkeysrc

  "tar -cf /mnt/backup_volume/etc_`date +%Y-%m-%d` /etc/*"
    m:0x1c + c:56

Wird nun xbindkeys gestartet (ohne Parameter oder mit -f /pfad/zur/konfigurations/datei.rc, falls oben eine andere Konfigurationsdatei gewählt wurde), kann das Ergebnis unserer Arbeit bewundert werden.

[Bearbeiten] Tastenkombination auf Maustaste legen

Diese Möglichkeit kommt in Betracht, wenn man bei Klick auf einen Mausbutton eine bestimmte Tastatur-Taste(nkombination) ausführen will. Bspw. tritt dieser Fall bei der klassischen Frage nach der "Zurück"-Funktion im Browser für die Daumentaste der Maus auf. Auch hier verwenden wir wieder xbindkeys, diesmal allerdings in Verbindung mit xmacroplay.

Zunächst einmal muss wieder der Button der Maustaste, um die es uns geht, ermittelt werden:

  [user@box]$ xev

Bei Klick auf den betreffenden Button ergibt sich etwas wie:

  ButtonPress event, serial 25, synthetic NO, window 0x1400001,
      root 0x48, subw 0x0, time 53882402, (171,1), root:(1267,731),
      state 0x10, button 2, same_screen YES
  ButtonRelease event, serial 25, synthetic NO, window 0x1400001,
      root 0x48, subw 0x0, time 53882986, (171,1), root:(1267,731),
      state 0x210, button 2, same_screen YES

wobei nur der Ausschnitt button 2 für uns relevant ist.

Die Syntax für xbindkeys bei Mausbuttons ist ganz einfach: b:X, wobei X für die Nummer des Buttons steht. Wir tragen also 'b:2' (ohne Hochkommas) in ~/.xbindkeysrc ein. Auch hier muss in der Zeile darüber der Befehl stehen, den wir ausführen wollen:

  "mozilla &"
    b:2

startet Mozilla bei Klick auf den Button. Ich möchte aber gern eine Tastenkombination haben!!

Nun, dafür muss zuerst die Tastenkombination bekannt sein, in unserem Fall Alt-Links für die "Zurück"-Funktion des Browsers. Diese müssen wir in Button-Drücken und Button-Loslassen-Events aufdröseln:

  Button-Drücken  : Alt
  Button-Drücken  : Links
  Button-Loslassen: Links
  Button-Loslassen: Alt

In xmacroplay-Syntax lautet die Abfolge:

  KeyStrPress Alt_L
  KeyStrPress Left
  KeyStrRelease Left
  KeyStrRelease Alt_L

Wie bereits weiter oben erwähnt, liest xmacroplay von stdin. Wir müssen also xmacroplay in unserem auszuführenden Befehl mit dieser Tastenfolge füttern. Dies geschieht bequem per echo -e:

  "echo -e 'KeyStrPress Alt_L\nKeyStrPress Left\nKeyStrRelease Left\nKeyStrRelease Alt_L' | xmacroplay :0 &"

Der Parameter ':0' für xmacroplay gibt lediglich den Screen an, an den die Tastenkombination geschickt werden soll.

Unser Eintrag in ~/.xbindkeysrc sieht nun also folgendermaßen aus:

  "echo -e 'KeyStrPress Alt_L\nKeyStrPress Left\nKeyStrRelease Left\nKeyStrRelease Alt_L' | xmacroplay :0 &"
    b:2

Auch hier gilt: xbindkeys starten und sich der neuen Möglichkeiten freuen.

[Bearbeiten] Befehl bei Verbindung von Maus-Taste und Tastatur-Taste ausführen

Das Prozedere verläuft hier sehr ähnlich, daher nur einige selbsterklärende Beispiele:

  "konsole &"
    control + b:2
  "xterm &"
    alt + b:1
  "xeyes &"
    shift + b:3

[Bearbeiten] Konfiguration automatisch bei Start des X-Servers festlegen

Fehlt nur noch ein geeigneter Platz, um die getätigten Einstellungen wirksam werden zu lassen. Hierfür gibt es verschiedene Möglichkeiten. Denkbar wäre die .xinitrc im eigenen Home-Verzeichnis (sollte diese Datei nicht existieren, einfach von /usr/lib/X11/xinit/xinitrc nach ~/.xinitrc kopieren und "xbindkeys -f ~/.xbindkeysrc" eintragen. Auf diese Weise wird die Datei bei jedem Start des X-Servers geladen und unsere Konfiguration ebenso.

Möchte man jedoch eine verschiedene Konfigurationen für verschiedene Window-Manager nutzen, könnte man unterschiedliche Konfigurationen für xbindkeys anlegen, z.B. ~/.xbindkeys_kde sowie ~/.xbindkeys_gnome und jeweils ein eigenes "Wrapping"-Skript, in dem etwas wie

  #!/bin/bash
  # Das Startup-Skript für KDE
  xbindkeys -f ~/.xbindkeys_kde

steht. Dieses "Skript" könnte man dann via Symlink vom jeweiligen Window-Manager laden lassen; bei KDE bspw. aus ~/.kde/Autostart/


[Bearbeiten] Weblinks

'Persönliche Werkzeuge