RSS
 

Ubuntu Oneiric Ocelot 11.10 Beta 2 und die Logitech MX1000 Maus

13 Okt

Die Logitech MX™1000 hat eine Menge Sondertasten, die in meiner Ubuntu Oneiric Ocelot Beta 2 Installation zum Teil out-of-the-box nicht funktionieren. Schade irgendwie, denn genau das sind die Dinge die Linux auf dem Desktop den viel zitierten „Durchbruch“ verwehren. Natürlich ist das nicht unbedingt die alleinige Schuld von Canonical, denn Logitech als nicht gerade kleine Firma stellt keine Linux Treiber für ihre Eingabegeräte zur Verfügung.

Eine nicht vollständig funktionierende Maus ist für mich aber inakzeptabel und so habe ich mich ein paar Stunden hingesetzt, unzählige Foren durchforstet und Tutorials gelesen und schliesslich eine Lösung zusammenkombiniert.

An zusätzlicher Software werden xbindkeys und xvkbd benötigt.

ubuntu@ubuntu:~$ sudo apt-get install xbindkeys xvkbd

Im nächsten Schritt müssen die Bezeichnungen der Maustasten herausgefunden werden. Das funktioniert am besten über das Terminal mit dem Befehl xev. Dieser öffnet ein kleines Fenster „Event Tester“ in dem man mit der Maus rumklicken kann. Die empfangenen Befehle werden im Terminal dargestellt. Wichtig sind in diesem Fall nur die „button x“ Einträge. Am besten man notiert sich welche Maustasten welchem Button entsprechen. Bei mir sieht das so aus (unnötige Einträge übersprungen):

ButtonRelease event, serial 33, synthetic NO, window 0x400001,
	root 0xbb, subw 0x0, time 6316941, (96,94), root:(1799,914),
	state 0x110, button 1, same_screen YES

ButtonRelease event, serial 33, synthetic NO, window 0x400001,
	root 0xbb, subw 0x0, time 6374074, (49,110), root:(1751,933),
	state 0x410, button 3, same_screen YES

ButtonRelease event, serial 33, synthetic NO, window 0x400001,
	root 0xbb, subw 0x400002, time 8375704, (41,37), root:(1743,860),
	state 0x810, button 4, same_screen YES

ButtonRelease event, serial 33, synthetic NO, window 0x400001,
	root 0xbb, subw 0x400002, time 8434723, (43,34), root:(1745,857),
	state 0x1010, button 5, same_screen YES

ButtonRelease event, serial 33, synthetic NO, window 0x4600001,
	root 0xbb, subw 0x0, time 3607710, (71,51), root:(1272,871),
	state 0x10, button 6, same_screen YES

ButtonRelease event, serial 33, synthetic NO, window 0x4600001,
	root 0xbb, subw 0x0, time 3517665, (83,32), root:(1799,1002),
	state 0x10, button 7, same_screen YES

ButtonRelease event, serial 36, synthetic NO, window 0x400001,
	root 0xbb, subw 0x400002, time 8596202, (55,46), root:(1758,866),
	state 0x10, button 8, same_screen YES

ButtonRelease event, serial 36, synthetic NO, window 0x400001,
	root 0xbb, subw 0x400002, time 8553050, (35,32), root:(1738,852),
	state 0x10, button 9, same_screen YES

ButtonRelease event, serial 33, synthetic NO, window 0x400001,
	root 0xbb, subw 0x400002, time 8672518, (32,66), root:(1735,886),
	state 0x10, button 13, same_screen YES

ButtonRelease event, serial 33, synthetic NO, window 0x400001,
	root 0xbb, subw 0x400002, time 8633376, (61,44), root:(1764,864),
	state 0x10, button 15, same_screen YES

ButtonRelease event, serial 33, synthetic NO, window 0x400001,
	root 0xbb, subw 0x400002, time 8696629, (39,56), root:(1742,876),
	state 0x10, button 17, same_screen YES

Bei mir ergibt sich daher

  • Linksklick → Button 1
  • Rechtsklick → Button 3
  • Mausrad nach oben → Button 4
  • Mausrad nach unten → Button 5
  • Mausrad nach links →Button 6
  • Mausrad nach rechts →Button 7
  • Daumentaste nach hinten → Button 8
  • Daumentaste nach vor → Button 9
  • Daumenrad nach vor → Button 13
  • Daumenrad nach hinten → Button 15
  • Daumenrad drücken → Button 17

Ein Druck auf das Mausrad wirft bei mir seltsamerweise kein xev Event sondern die MX™1000 wechselt zwischen gerastertem Radlauf und freilaufendem Radlauf. Die Suchen Taste über dem Mausrad erzeugt kein ButtonRelease event, mehr Informationen dazu gibts hier.

Im nächsten Schritt muss in Erfahrung gebracht werden wo die Maus wie im System registriert ist:

cat /proc/bus/input/devices

Hier muss nun das richtige Gerät gefunden werden, bei mir gibt es zwar zwei Einträge mit „Logitech“ (Keyboard und Maus), aber nur einer davon beinhaltet das Wort mouse:

I: Bus=0003 Vendor=046d Product=c525 Version=0111
N: Name="Logitech USB Receiver"
P: Phys=usb-0000:00:13.0-2/input0
S: Sysfs=/devices/pci0000:00/0000:00:13.0/usb2/2-2/2-2:1.0/input/input3
U: Uniq=
H: Handlers=mouse0 event3
B: PROP=0
B: EV=17
B: KEY=ffff0000 0 0 0 0
B: REL=143
B: MSC=10

Wichtig ist hier sich das eventX des Handlers zu notieren.

Nun muss die xorg.conf bearbeitet werden (sudo gedit /etc/X11/xorg.conf). Es empfiehlt sich – wie immer – eine Sicherheitskopie (sudo cp /etc/X11/xorg.conf /etc/X11/xorg.conf.bak) zu erstellen. In der xorg.conf können nun alle Section-Einträge mit dem IdentifierDefault Mouse“ oder „Configured Mouse“ gelöscht oder auskommentiert werden. Bei mir waren allerdings keine solchen Einträge vorhanden. Nun fügt man an das Ende der Datei folgendes hinzu:

Section "InputDevice"
	Identifier    "Logitech MX1000"
	Driver        "evdev"
	Option        "Device"    "/dev/input/event3"
	Option        "RelHWHEELMapTo"    "Buttons 7 6"
EndSection

Als Identifier kann ein beliebiger String genommen werden – Logitech MX1000 erschien mir logisch und brauchbar. Die Option Device muss mit dem zuvor herausgefundenen Event versehen werden – bei mir event3.

In der bereits vorhandenen Section „ServerLayout“ wird nun eine Zeile – bei mir Zeile 4 – hinzugefügt. Der String muss dem zuvor definierten Identifier entsprechen.

Section "ServerLayout"
	Identifier     "amdcccle Layout"
	Screen      0  "amdcccle-Screen[1]-0" 0 0
	InputDevice    "Logitech MX1000"    "CorePointer"
EndSection

xorg.conf speichern und schliessen. Nun kann es endlich mit der eigentlichen Belegung der Maustasten losgehen. Dazu muss eine Datei mit dem Namen .xbindkeysrc im Home-Verzeichnis des gewünschten Benutzers angelegt werden. Die dort eingetragenen Befehle gelten natürlich nur für den zum Home-Verzeichnis zugehörigen Benutzer.

ubuntu@ubuntu:~$ touch /home/username/.xbindkeysrc
ubuntu@ubuntu:~$ gedit /home/username/.xbindkeysrc

Die neu angelegte Datei ist natürlich leer und wird nun mit folgender Syntax befüllt: In allen ungeraden Zeilen steht der auszuführende Befehl und in den jeweils darauffolgenden geraden Zeilen steht der Auslöser für den Befehl.

Für virtual keyboard for X window system (kurz vvkbd) gibt es hier eine ausgezeichne man-page. Kurz gesagt kann man mit xvkbd -xsendevent -text „…“ beliebige simulierte Tastendrucke an das virtuelle Keyboard senden.

Hier meine .xbindkeysrc:

"/usr/bin/xvkbd -xsendevent -text "\[Control_L]\[Page_Down]""
 b:13
"/usr/bin/xvkbd -xsendevent -text "\[Control_L]\[Page_Up]""
 b:15
"/usr/bin/xvkbd -text "\[F12]""
 b:17
"/usr/bin/xvkbd -xsendevent -text "ls -la \[Return]""
 control + b:17

In Zeile 1 & 2 definiere ich, dass beim Drücken des Button 13 (bei mir Daumenrad nach vor) die Tastenkombination STRG und Bildlauf-hoch simuliert wird. Die Gegenspielertaste Button 15 bewirkt das Gegenteil (Zeile 3 & 4). Praktisch ist dieses Kombinationspaar bei (fast) allen Programmen, die mit Tabs arbeiten. Beispielsweise im Firefox oder Terminal kann man nun bequem mit dem Daumenrad durch die einzelnen geöffneten Tabs iterieren.

Mit einem Druck auf das Daumenrad (Button 17) wird ein Betätigen der Taste F12 simuliert. F12 ist bei mir das systemweite Ein- bzw. Ausblenden von Tilda.

Die letzten beiden Zeilen sorgen dafür, dass beim Drücken des Daumenrads und gleichzeitig gehaltener STRG Taste der Text ls -la gefolgt von einem ENTER simuliert wird. Gebraucht wird das natürlich nur im Terminal.

Die Daumentasten (Button 8 und Button 9) funktionieren bei meiner Ubuntu Installation out-of-the-box, darum gibt’s dazu keinen Eintrag. Das gleiche gilt für den normalen Links- und Rechtsklick sowie das Hauptscrollrad in alle 4 Richtungen.

Nachdem die .xbindkeysrc erstellt oder angepasst wurde wird sie gespeichert. Nun muss nur noch xbindkeys gestartet werden, damit die Datei auch interpretiert wird.

Zum Testen kann man dies im Terminal erledigen. Folgende Befehlskombination (Zeile 1 & 3) beendet zuerst alle eventuell laufenden xbindkeys Prozesse und startet den Prozess danach neu (wobei der Inhalt der .xbindkeysrc neu interpretiert wird):

ubuntu@ubuntu:~$ pkill xbindkeys
[1]+  Done                    xbindkeys
ubuntu@ubuntu:~$ xbindkeys &
[1] 9841

Damit die .xbindkeysrc beim Starten des Systems geladen wird muss ein Eintrag in den Startup Applications Preferences gemacht werden. Diese erreicht man über das Menü rechts oben neben den Indikatoren.

Screenshot: Unity Startup Applications

Damit funktionieren nun die meisten Tasten meiner Logitech MX™1000 wie gewünscht.

Offen ist noch die Frage wieso ein Druck auf das Mausrad von xev nicht registriert wird und ob es möglich ist die Scrollradfunktionalität der Logitech SetPoint Software für Windows „nachzubauen“. Unter Windows ist das Scrollrad nämlich standardmässig im Rastermodus und erst wenn man es kräftig anstösst wechselt es in den ungerasterten „Schnellscroll“-Modus bis die Umdrehungsgeschwindigkeit eine gewisse Grenze unterschreitet und es wieder in den Rastermodus zurückfällt. Das ist äusserst praktisch und geht mir unter Ubuntu wirklich ab.

Die Belegung der „Suchen“-Taste über dem Scrollrad ist ebenfalls möglich. Mehr dazu gibt’s hier.

 
 

Kommentare