Willkommen Gast. Bitte einloggen oder registrieren.
Juli 31, 2014, 22:37:26 pm
2776 Beiträge in 633 Themen von 53 Mitglieder
Neuestes Mitglied: Johannes
Übersicht Hilfe Suche Kalender Einloggen Registrieren
GNU/Linux User Group Bamberg/Forchheim  |  Hilfe rund um GNU/Linux  |  Hardware  |  Multimedia-Tasten mit Funktionen belegen « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Multimedia-Tasten mit Funktionen belegen  (Gelesen 5663 mal)
heffer
Administrator
l33t
*****
Geschlecht: Männlich
Beiträge: 216



WWW
Multimedia-Tasten mit Funktionen belegen
« am: Februar 20, 2003, 21:08:13 pm »

Hi all,

im folgenden Bericht werde ich euch beschreiben, wie man die Sondertasten einer Multimedia-Tastatur frei belegen kann und welche Befehle/Software man dazu benötigt.
Das Belegen der Sondertasten ist nicht ganz so einfach, wie unter Windows: Treiber installieren, Funktion für jede Taste aus der Liste aussuchen und Rechner neu starten. Dafür hat man unter Linux die freie Wahl der Funktion und kann (wie man später sehen wird) sogar komplette Skripte auf eine Taste legen.

Schritt 1: Scancodes der Tasten abfragen
Um den Scancode einer Taste zu erhalten, den wir später zum Belegen derselben benötigen, startet man das Programm xev in der Konsole.
Der Druck auf eine der Sondertasten ergibt etwa folgende Ausgabe in der Konsole:
Code:
KeyPress event, serial 20, synthetic NO, window 0x1a00001,
    root 0x6e, subw 0x0, time 2092315869, (186,92), root:(198,152),
    state 0x0, keycode 222 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 0 characters:  ""

KeyRelease event, serial 25, synthetic NO, window 0x1a00001,
    root 0x6e, subw 0x0, time 2092316003, (186,92), root:(198,152),
    state 0x0, keycode 222 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 0 characters:  ""

Das Betätigen einer Taste ist immer mit einem Drücken (KeyPress event) und Loslassen (KeyRelease event) verbunden. Uns interessiert in der obigen Ausgabe aber nur der keycode. Später wird auch noch der sogenannte keysym interessant, der uns mitteilt welche andere Taste(nkombination) unsere Taste emuliert.
Aber bis jetzt merken wir uns erst einmal, dass unsere erste Sondertaste den Tastaturcode "222" besitzt. Dieses Vorgehen führen wir für alle Sondertasten durch, die wir belegen wollen und schreiben uns die Keycodes auf.

Schritt 1.1: Sondertaste mit vorhandener Taste emulieren
Manchmal genügt es auf einer Sondertaste einfach die Funktion einer bereits vorhandenen Taste(nkombination) zu geben. Da dies in den meisten Fällen aber nicht genügt, spreche ich dieses Vorgehen nur der Vollständigkeit halber an.
Beispiel: Wir belegen die Internet-Taste mit der Funktion der Taste "i". Zunächst rufen wir wieder xev auf und fragen den Tastencode von "i" ab (Achtung: Da das grosse "I" eigentlich <Shift>+"i" bedeutet, wird hier wirklich nur das kleine "i" emuliert):
Code:
KeyPress event, serial 20, synthetic NO, window 0x1400001,
    root 0x6e, subw 0x0, time 2093048904, (699,160), root:(705,200),
    state 0x0, keycode 31 (keysym 0x69, i), same_screen YES,
    XLookupString gives 1 characters:  "i"

Nun verwenden wir den Befehl xmodmap, um die Internet-Taste (Tastencode 222) mit dem "i" (KeySym 0x69) zu verknüpfen:
Code:
xmodmap -e "keycode 222=0x69"

Dieser Befehl führt sofort (-e) die Belegung der Internet-Taste (keycode 222) mit der hexadezimalen Verknüpfung der "i"-Taste (0x69) aus. Man kann auch noch weitere Keysyms anhängen, die eine Tastenkombination mit <Shift>, <AltGr> sowie <AltGr>+<Shift> gleichzeitig erlauben (Gilt nur für die Standardeinstellung bei deutschen Tastaturen!). Dafür erweitert man die Liste einfach durch Leerzeichen getrennt mit weiteren Keysyms:
Code:
xmodmap -e "keycode 222=0x69 0x6a 0x6b 0x6c"

Einfacher Druck auf die Internet-Taste erzeugt ein "i", zusammen mit <Shift> wird ein "j" ausgeben, mit <AltGr> ein "k" und <AltGr>+<Shift>+Internet-Taste ergibt den Buchstaben "l".

Hinweis: Wie man Tastenkombinationen mit <Alt> bzw. <Strg> belegt habe ich noch nicht herausgefunden. Falls es jemand weiss, bitte melden! Der umgekehrte Weg eine einzelne Sondertaste mit einer Tastenkombination (etwa eine Shutdown-Taste mit <Strg>+<Alt>+Entf) zu belegen scheint nicht zu klappen, da diese Kombination in xev keinen eindeutigen Keysym abliefert. Wenn doch jemand weiss wie, einfach einen Kommentar abgeben!

Schritt 2: LinEAK installieren und konfigurieren
LinEAK ist ein Sourceforge-Projekt, dass es sich zur Aufgabe gemacht hat die Verwendung von Multimedia- bzw. Internet-Tasten unter Linux zu ermöglichen und diese nach eigenen Vorstellungen zu konfigurieren. Ob die eigene Tastatur bereits von LinEAK unterstützt wird, kann man auf der Liste der unterstützten Tastaturen nachschauen. Wenn dies der Fall ist, kann man sich Schritt 1 komplett sparen, da die Scancodes der Tasten dem Programm schon bekannt sind! -> Schritt 2.1
Wenn die eigene Tastatur nicht in der Liste steht, auch nicht schlimm. Dann fügen wir sie einfach selbst hinzu -> Schritt 2.2
Zunächst laden wir uns aber auf der Download-Seite das lineakd-Serviceprogramm sowie eines der Konfigurationsprogramme, entweder lineakconfig (für Gnome) oder Klineakconfig (für KDE) herunter. Dann (kompilieren und) installieren wir zunächst den lineakd und danach das Konfigurations-Programm.
Jetzt müssen wir vor der Konfiguration nur noch den lineak-Daemon starten, der im Hintergrund auf die Betätigung der Sondertasten wartet und diesen eine Funktion zuordnet. Um zum ersten Mal die Tastatur-Konfigurationsdatei zu erzeugen, lassen wir uns mit lineakd -l eine Liste der unterstützten Tastaturen anzeigen. Aus dieser Liste wählen wir uns dann einen der grossgeschriebenen Einträge aus (wenn die eigene Tastatur drinsteht, natürlich diesen) und erzeugen mit lineakd -c TYPE (z.B. "lineakd -c LTCDO" für die Logitech CordlessDesktop Optical) eine leere Konfigurationsdatei. Diese liegt dann im Benutzerverzeichnis unter .lineak/lineakd.conf und kann mit den grafischen Konfigurationsprogrammen oder manuell geändert werden. Die vorgefertigte Datei sieht dann etwa so aus:
Code:
# LinEAK - Linux support for Easy Access and Internet Keyboards
KeyboardType            = MX5200
CdromDevice             = /dev/cdrom
MixerDevice             = /dev/mixer


Poweroff        = "mmkey-none"
Sleep           = "mmkey-none"
Wake-up         = "mmkey-term"
Web-Launch      = "mmkey-inet"
Web-Search      = "mmkey-wwwfind"
Web-Favorites   = "mmkey-pix"
Web-back        = "mmkey-last"
Web-forward     = "mmkey-next"
Email           = "mmkey-mail"
Volume-up       = "mmkey-volup"
Volume-down     = "mmkey-voldn"
Stop            = "mmkey-stop"
Mute            = EAK_MUTE
Play-pause      = "mmkey-playpause"
Previous        = "mmkey-rewind"
Next            = "mmkey-forward"




Wichtig: Nun wird der Lineakd als Hintergrundprozess gestartet indem man lineakd -b aufruft. Vergisst man diesen Schritt, kann man die Konfiguration später nicht übernehmen.
Noch wichtiger: Da die Entwickler den lineakd nicht als init-Skript eingebunden haben muss der lineakd bei jedem Start von X mitgestartet werden. Dazu fügt man den Befehl "lineakd -b" einfach in die Liste der Startprogramme (für Gnome bzw. KDE) ein.
Auch wichtig: Wenn man die Konfiguration geändert hat und diese nachladen möchte muss man per killall lineakd erst den alten Prozess beenden, da der lineakd noch keine Reload-Funktion beinhaltet.

Schritt 2.1: Unterstützte Tastatur konfigurieren

In diesem Fall starten wir lineakconfig und wählen in den beiden oberen Dropdownboxen einfach den Hersteller und das Modell unserer Tastatur aus. Danach steht uns in der unteren Box eine Liste aller belegbaren Sondertasten zur Verfügung. Die Taste, die wir belegen möchten wählen wir aus und geben entweder einen Befehl/ein Programm an, der/das beim Druck auf diese Taste ausgeführt werden soll oder wählen uns aus der Dropdownbox unten rechts eine der folgenden Spezial-Funktionen aus:
    - CD auswerfen (Eject CD-ROM)
    - Lautstärke erhöhen (Increase volume)
    - Lautstärke verringern (Decrease volume)
    - Lautsprecher stumm schalten (Mute volume)
    - Rechner schlafen legen (Sleep)
    [/list:u]
    Die Gerätedatei für das CD-Laufwerk und den Mixer der Soundkarte kann man oben angeben. Standardmässig wird
/dev/cdrom und /dev/mixer verwendet.

Schritt 2.2: Nicht-Unterstützte Tastatur konfigurieren
Um unsere eigene Tastatur einzutragen müssen wir einen neuen Bereich in der Datei /usr/local/etc/lineakkb.def erzeugen, der etwa so aussieht:
Code:
[MX5200]
  brandname = "Memorex"
  modelname = "MX5200"
  [KEYS]
    Poweroff      = 222              
    Sleep         = 223    
    Wake-up       = 227      
    Web-Launch    = 178
    Web-Search    = 229
    Web-Favorites = 230
    Web-back      = 234
    Web-forward   = 233
    Email         = 236
    Volume-up     = 176
    Volume-down   = 174
    Stop          = 164
    Mute          = 160
    Play-pause    = 162
    Previous      = 144
    Next          = 153
  [END KEYS]
[END MX5200]

Der erste Eintrag in den eckigen Klammern gibt an wie der neue Tastaturtyp von lineakd angesprochen wird (dieser erscheint dann auch per "lineakd -l" in der Liste, wenn alles geklappt hat). Danach folgt der Herstellername (brandname) und die genaue Typenbezeichnung des Modells (modelname).
Jetzt folgt der wichtige Teil: mit [KEYS] wird die Zuordnung zwischen Taste und Scancode angegeben. Jeder Eintrag steht in einer eigenen Zeile und hat die Form  "<Tastenname> = <Keycode>". Zum Schluss wird der Tastenbereich mit [END KEYS] und der Eintrag für die eigene Tastatur mit [END <TYPE>] abgeschlossen. Datei abspeichern, fertig!
Wenn man möchte kann man jetzt noch ein .xpm-Bild von der eigenen Tastatur (mit 150-200 Pixeln Breite) nach /usr/local/share/lineakconfig/pixmaps kopieren, damit man diese auch in (K)lineakconfig bewundern kann. ;-)


Schritt 3: Experten-Einstellungen
Wenn man wirklich viel Zeit hat und seine Sondertasten ausreizen möchte, kann man sich zu jeder Taste ein Skript schreiben, dass mehrere Funktionen gleichzeitig ausführt.
Meine Skripte verwenden xosd (On Screen Display für X) um beim Tastendruck eine kurze Meldung auf dem Bildschirm auszugeben. Desweiteren habe ich cmix (Soundkarten-Mixersteuerung für die Kommandzeile) benutzt, um die Lautstärke des PCM-Kanals direkt ändern zu können (geht mit der VolUp- und VolDown-Funktion von LinEAK aber einfacher, diese nimmt aber auch den Master-Kanal). Die Multimedia-Tasten (Play/Pause, Stop, Mute, Rewind, Forward) habe ich mit XMMS und dem Mplayer verknüpft. Damit ich keine Probleme bekomme, wenn XMMS und Mplayer läuft, verwende ich die Internet-Vor- und Zurück-Taste (brauch ich eh nicht!) zur Auswahl, für welches Programm die Multimedia-Tasten arbeiten sollen (damit kann ich zwischen XMMS und Mplayer hin- und herwechseln).
XMMS eignet sich hervorragend für die Steuerung per Zusatztasten, da er sich (wenn er bereits läuft) per Kommandzeile steuern lässt (z.B. "xmms --play-pause" oder "xmms --stop"). Beim Mplayer ist das nicht so einfach, da muss man noch etwas nachhelfen. Mplayer nimmt nur im Slavemodus ("mplayer -slave") Befehl von der Kommandzeile entgegen. Diese müssen aber über STDIN an das Programm weitergegeben werden. Dazu liegt aber auch ein Skript bereit (Man muss nur statt "mplayer <Datei>" den Befehl "mp <Datei>" verwenden).
Hier kann man sich eine tar.gz-gepackte Datei downloaden, die alle Skripte für meine Multimedia-Tastatur beinhaltet (einfach nach /usr/local/bin entpacken): Download

Viel Spass beim Ausprobieren!!!


CU Heff
Gespeichert

LINUX - Life is too short for reboots
Anonymous
Gast


E-Mail
Re: Multimedia-Tasten mit Funktionen belegen
« Antworten #1 am: August 31, 2005, 18:32:36 pm »

Zitat von: heffer

Hinweis: Wie man Tastenkombinationen mit <Alt> bzw. <Strg> belegt habe ich noch nicht herausgefunden. Falls es jemand weiss, bitte melden! Der umgekehrte Weg eine einzelne Sondertaste mit einer Tastenkombination (etwa eine Shutdown-Taste mit <Strg>+<Alt>+Entf) zu belegen scheint nicht zu klappen, da diese Kombination in xev keinen eindeutigen Keysym abliefert. Wenn doch jemand weiss wie, einfach einen Kommentar abgeben!


falls noch jemand sucht: ich bin gerade auf folgenden Usenetartikel gestossen:

http://lists.suse.com/archive/suse-linux/2003-Jun/2658.html

gruss,
koalo
Gespeichert
Anonymous
Gast


E-Mail
Re: Multimedia-Tasten mit Funktionen belegen
« Antworten #2 am: August 31, 2005, 19:35:34 pm »

habe es getestet - leider hat suse 9.3 nicht die entsprechenden Biblioteken (Artikel ist ja auch schon n Tag älter) und ich hatte auch keine lust da weiterzubasteln.

Für meinen Fall (ich wollte fuer nur eine Taste den Logitech F-Mode umgehen) hat dann doch Schritt 1.1 gereicht. Jedoch habe ich es mit setkeycodes statt mit xmodmap gemacht.

Gruss,
koalo
Gespeichert
watz
Administrator
Guru
*****
Geschlecht: Männlich
Beiträge: 749



WWW
Multimedia-Tasten mit Funktionen belegen
« Antworten #3 am: September 01, 2005, 00:21:53 am »

Hallo,

die entsprechende Bibliothek findest du schon bei SuSE.
Du musst nur die Developer-Pakete von X11 einspielen:

xorg-x11-devel und ein paar weitere ...

Grüße,

watz
Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu: