Multimediatasten

Aus Gentoo Linux Wiki

Wechseln zu: Navigation, Suche
Dieser Artikel ist Teil der HOWTO Sammlung.
Installationsmethoden LiveCDs Kernel & Hardware Laptops & Notebooks Portage System Netzwerke & Services X Software Anderes alphabetischer HOWTO Index


Inhaltsverzeichnis

[Bearbeiten] Vorwort

Viele Tastaturen sind mit zusätzlichen Multimedia-Tasten ausgerüstet. Unter Windows braucht nur für alte Ausgaben Spezialprogramme, um diese Tasten nutzen zu können - unter Linux gibt es verschiedene, teils in X bereits integrierte Ansätze.

Es gibt verschiedene Möglichkeiten, die Tasten nutzbar zu machen. Zum einen existieren Tools, wie z.B. Lineak oder xbindkeys, zum anderen kann man eine sehr praktische und vor allem ressourcensparende Methode nutzen, und zwar xmodmap. Die Cherry CyMotion Master Linux wird mit Keyman ausgeliefert.

[Bearbeiten] xmodmap

Die einfachste Methode, auf Multimediatasten zuzugreifen, ist, mit xev den Keycode der Taste rauszufinden, in die Datei ~/.Xmodmap einzutragen und anschliessend bei dem genutzten Windowmanager die Spezialtasten mit einfachen Hotkeyfunktionen besetzten.

[Bearbeiten] Keycode herausfinden

Immer, wenn du unter Linux eine Taste drückst, generiert der Kernel eine Art Scancode, welcher mithilfe einer keycode-Tabelle einer Taste (z.B. dem Buchstaben A) zugewiesen wird. Unter X funktioniert das ganze ein wenig komplizierter - es lädt beim Starten eine eigene Keycode-Tabelle ein und bildet Tastatureingaben mithilfe der Kernel-Keycode-Tabelle darauf ab. Jeder Keycode kann dabei einem keysym entsprechen; ein keysym ist eine einfache Zeichenkette die dann die Taste repräsentiert.

Nun musst du natürlich erst einmal herausfinden, was für Keycodes die Multimediatasten deiner Tastatur haben. Das ist total einfach, denn bei X wird schon ein praktisches Tool mitgeliefert, welches diese Infos bietet: xev. Führe einfach das folgende Kommando in einem terminal unter X (wichtig!) aus:

$xev

Falls das Programm bei dir noch nicht installiert ist, so kannst du dies natürlich nachholen:

$emerge xev

Nun drücke jede Multimedia-Taste deiner Tastatur und schreibe dir die ausgegebenen Keycodes auf - sie stehen in der Ausgabe, die ungefähr so aussehen sollte:

Code: Beispielausgabe von xev
KeyRelease event, serial 31, synthetic NO, window 0x2800001,
root 0x7d, subw 0x0, time 2792224, (-22,86), root:(565,101),
state 0x10, keycode 160, same_screen YES,
XLookupString gives 0 bytes:


Einige Tasten der Tastatur erzeugen zwar einen Scancode, jedoch findet im Kernel keine Umsetzung auf Keycodes statt. Diese Tasten werden von xev nicht erfasst. Es wird aber ein Eintrag in der Fehlerkonsole bzw. in /var/log/messages erzeugt, wenn eine solche Taste gedrückt wird.

Code: Suche nach folgenden Ausgaben in der Logdatei:
atkbd.c: Unknown key pressed (translated set 2, code 0xaa on isa0060/serio0).

atkbd.c: Use 'setkeycodes e02a <keycode>' to make it known.


So eine Taste läßt sich sehr leicht aktivieren, indem man beim Bootvorgang mittels setkeycodes eine Zuordnung von Scancodes zu Keycodes vornimmt. Ein getkeycodes in einem echten Terminal (CTRL ALT F2) zeigt alle belegten Keycodes. Hier sucht man nach nicht benutzten Werten größer 84. Ein z.B. setkeycodes e02a 123 ordnet dem Scancode e02a den Keycode 123 zu. Danach sollte die Taste von xev erkannt werden.

Wenn man die Keycodes beim start des Systems laden möchte sollte man diese in die Datei /etc/conf.d/local.start eintragen.

[Bearbeiten] xmodmap aufsetzen

Jetzt brauchst du nur noch eine Datei aufzusetzen, die die keycodes zu den keysyms umsetzt. Erstelle dafür einfach eine Datei namens .Xmodmap in deinem $HOME-Verzeichnis:

$ nano -w $HOME/.Xmodmap
Datei: Beispieldatei für .Xmodmap
keycode 234 = XF86Back
keycode 233 = XF86Forward
keycode 232 = XF86Stop
keycode 231 = XF86Refresh
keycode 229 = XF86Search
keycode 230 = XF86Explorer
keycode 178 = XF86HomePage
keycode 236 = XF86Mail
keycode 160 = XF86AudioMute


Die keysyms auf der rechten Seite sind natürlich keine Erfindungen, sondern passende Exemplare, von denen du mehr in der Datei /usr/share/X11/XKeysymDB finden wirst. (Bei neueren Systemen liegt diese Datei hier: /usr/lib/X11/XKeysymDB )


Jetzt muss xmodmap jedes mal gestartet werden, wenn deine X-Session startet - ein guter Platz dafür ist die Datei $HOME/.xsession:

Datei: $HOME/.xsession
/usr/X11R6/bin/xmodmap $HOME/.Xmodmap


Der Vorteil gegenüber eines anderen Tools wie xbindkeys (siehe unten), ist, dass das Programm xmodmap nicht während der ganzen Session als Dämon laufen muss, sondern lediglich einmal kurz startet und die Tabelle setzt.

[Bearbeiten] Beispiele für die Konfiguration der Windowmanager

Die Multimediatasten fungieren jetzt wie normale Tasten - du kannst also nun deinem Windowmanager oder Desktop Enviroment sagen, dass du, um deinen Browser zu starten, nicht mehr Strg, Alt und F5 drücken willst, sondern einfach die Taste "XF86Explorer" ;)

[Bearbeiten] XFCE

Öffne den Settings Manager, klicke auf Window Manager und wechsel zu der keyboard-Registerkarte (tab). Um deine eigenen Tastenbindungen zu setzen, musst du eine neue Theme erstellen. Klicke auf "Hinzufügen", um sie zu erstellen (alle Tastenbindungen von der default-theme werden dann einfach in die neue Theme kopiert). In der "Tastenkombinationen für Kommandos"-Liste klicke einfach doppelt auf einen leeren eintrag, tippe das auszuführende Kommando ein und drücke dann einfach die entsprechende Multimediataste. Der keysym von deiner .Xmodmap-Datei sollte nun neben dem Kommando erscheinen. Hinweis: Xfce4 bietet leider nur die Möglichkeit, 20 Tastenkombinationen für eigene Kommandos zu erstellen.

Im übrigen können die Multimediatasten dann natürlich auch zweckentfremdet werden - so lassen sich mit einem Tastendruck wunderbar neue Desktops in grosser Zahl erstellen, wenn man entsprechendes in der Sektion "Tastenkombination für Fenster" einstellt.

[Bearbeiten] KDE

Wenn du kdm als deinen login manager nutzt, wird kdm bei jedem Login die Datei $HOME/.xprofile starten. Erstelle einfach die Datei $HOME/.Xmodmap wie oben beschrieben und schreibe dann einfach folgendes in die Datei $HOME/.xprofile:

Datei: ~/.xprofile
/usr/bin/xmodmap $HOME/.Xmodmap


Anmerkung: Bei mir hat es unter KDE 3.4 weder mit ~/.xprofile noch mit ~/.xsession funktioniert. Man kann alternativ den Befehl in ein Shell-Script packen und dieses in ~/.kde/Autostart legen.

Datei: ~/.kde/Autostart/tasten.sh
#!/bin/sh

/usr/bin/xmodmap $HOME/.Xmodmap


Die Datei muss ausführbar sein:

$ chmod u+x ~/.kde/Autostart/tasten.sh


Wichtig: Falls alles konfiguriert ist, aber trotzdem nichts passiert:

$ emerge -av kde-base/kmilo

[Bearbeiten] xbindkeys

[Bearbeiten] Installation

Der Klassiker unter den Tools, um den Multimediatasten Funktionen zuordnen zu können. Installieren kann man es wie folgt:

# emerge -av xbindkeys

[Bearbeiten] Konfiguration

Zuerst muss man sich eine default .xbindkeysrc anlegen:

$ xbindkeys --defaults > ~/.xbindkeysrc

Nun muss man die Keycodes der einzelnen Tasten herausfinden. Dazu empfiehlt es sich einen Zettel und Stift bereitzuhalten und sich zu notieren, welche Taste welchen Keycode zurückliefert. Das erleichtert ungemein die Konfiguration von ~/.xbindkeys. Zum Herausfinden der Keycodes:

$ xbindkeys -mk

Beim Drücken einer Taste erscheint im Terminal beispielweise folgende Ausgabe:

"NoCommand"
   m:0x0 + c:26
   e

Wichtig ist c:26, das ist der Keycode. Den notiert man sich für jede Taste. Erscheint bei einer oder mehreren Tasten kein Output, so hat man schlichtweg Pech gehabt, auf die Taste muss man verzichten. Das tritt vor allem bei billigen NoName Tastaturen gerne auf.

Wenn man alle Tasten durchhat, kann man die .xbindkeys konfigurieren:

nano ~/.xbindkeysrc

Der Syntax ist einfach:

"beep-media-player --play-pause"
      c:234

Wenn man fertig konfiguriert hat, startet man als User den xbindkeys Dämon:

xbindkeys

Auch auf eine OSD-Anzeige braucht man nicht zu verzichten. Installiere einfach das Programm osd_cat.

emerge -av x11-libs/xosd

Der Trick ist ganz einfach, denn es werden mit jeder Taste zwei Aktionen ausgeloest: Press und Release, also druecken und loslassen. Am Beispiel oben:

"echo Play BMP | /usr/bin/osd_cat -d 6 -s 1 -A center -l 1 -p bottom -o 60 -c green -f '-adobe-helvetica-bold-r-normal--34-240-100-100-p-182-iso8859-1'"
      c:234
"beep-media-player --play-pause"
      c:234 + release

Beim Druecken der Taste wird mit dem Programm osd_cat der Text 'Play BMP' in gruen zentriert am unteren Bildschirmrand angezeigt, beim Loslassen der Taste wird das Programm schliesslich gestartet. So wird quasi das osd_plugin von lineakd simuliert und die Tastenbelegung funktioniert wie bei vielen Windowstreibern. Die Parameter von osd_cat koennen mit

osd_cat --help

angezeigt werden und sind selbsterklaerend.


Beim Start des Windowsmanager kann man xbindkeys automatisch laden lassen.

Wer Tasten zur Steuerung der Lauststärke nutzen möchte, kann im aumix Tipp nachlesen.

[Bearbeiten] Lineak

Lineak ist eine weitere Alternative - siehe http://lineak.sourceforge.net/ für mehr Informationen.

[Bearbeiten] Hotkeys

Ein weiteres einfach zu konfigurierendes Tool gibt es auf http://freshmeat.net/projects/hotkeys/

[Bearbeiten] Tipps und Tricks

Um die Lautstärke zu ändern und zu muten/unmuten kann auch Aumix behilflich sein.

Problem Lösung
Lautstärke erhöhen/vermindern

siehe auch: man amixer

$amixer set Master 10%+   (erhöht die Lautstärke um 10%)
$amixer set Master 10%-   (vermindert die Lautstärke um 10%)
Ton aus
$amixer set Master mute   (setzt Lautstärke auf Mute)

Da es in der Regel keine "Unlautlos"-Taste gibt, sollte man dem Eintrag für die "Lauter"-Taste "unmute" hinzufügen, um mit Hotkeys wieder den Sound anzukriegen:

$amixer set Master 10%+ unmute
Ton an / aus mit einer Taste
$amixer set Master toggle   (umschalten zwischen Ton an / aus)
Cd-Laufwerk öffnen und schliessen mit nur einer Taste

Ab der Version 2.0.13-r2 kann man den Befehl eject -T verwenden, welcher das CD-Rom-Laufwerk wahlweise öffnet oder schließt. Falls dies nicht funktionieren sollte, kann folgendes Script verwendet werden, welches in einer Umgebungsvariable (export ...) oder eben in einer temporären Datei (siehe Beispiel rechts) den Zustand speichert. Das Shellscript auf der rechten Seite, gepackt in /usr/bin/cdswitch leistet gute Dienste :)

Datei: /usr/bin/cdswitch
#!/bin/sh
# simple shell-script that opens/closes cddrive

if [ $# -ne 0 ]
then
    echo "Usage: $0"
    echo "       creates a temorary file so that it makes as if it could"
    echo "       know if the cd-drive is open or not."
    echo "       The program will open/close the cd-drive."
    exit 1
fi

tmpfile=/tmp/cdswitch.tmp
# tmpfile: if content = 0 => think that cd is closed
#          if content = 1 => think that cd is opened

# checking if tmpfile exists, otherwise create it
if ! [ -e $tmpfile ]
then
  echo "$0: creating tmpfile"
  echo 0 > $tmpfile # writing "cd closed" in file
  chmod 666 $tmpfile
fi

if [ `cat $tmpfile` = 1 ]
then
  # cd opened
  echo "$0: closing cd-drive"
  eject -t
  echo 0 > $tmpfile
else
  # cd closed
  echo "$0: opening cd-drive"
  eject
  echo 1 > $tmpfile
fi
'Persönliche Werkzeuge