X.Org, evdev und HAL - Teil 2
Gentoo-Technobabble-Warnung Dieses Problem hat mir natürlich keine Ruhe gelassen, und ich habe (wider aller Vernunft) weiter experimentiert. Die beiden beobachteten Phänomene sind unabhängig voneinander. Das Keyboard-Problem beruht auf einem Konflikt zwischen HAL und X.Org, und lässt sich durch eine kleine Anweisung in der Section "ServerLayout" lösen:
Option "AutoAddDevices" "no"
Nun funktionieren auch die Sondertasten mit lineakd oder keytouch wieder. Die Datei /etc/hal/fdi/policy/10-x11-input.fdi sieht ansonsten genauso aus wie im letzten Beitrag.
Das Mausproblem (mittlere Maustaste wirkt in Opera wie ein Linksklick, funktioniert sonst aber normal) hat mir mehr Kopfzerbrechen bereitet. Erst als ich mir die von der Maus bei einem Klick auf das Scrollrad gesendeten Events mit xev mal etwas genauer angeschaut habe, ist mir etwas aufgefallen:
ButtonRelease event, serial 30, synthetic NO, window 0x4400001,
root 0x7f, subw 0x0, time 1553709, (136,123), root:(1305,178),
state 0x200, button 2, same_screen YES
ButtonRelease event, serial 30, synthetic NO, window 0x4400001,
root 0x7f, subw 0x0, time 1553709, (136,123), root:(1305,178),
state 0x0, button 8, same_screen YES
Da sind zwei Events! Meine Maus, eine "Logitech Cordless Mini Optical", hat im Scrollrad nicht nur eine Taste, sondern gleich zwei - je nachdem wie tief man drückt. Bei einem flachen Druck wird ein "Button 8"-Event ausgelöst, bei einem tiefen ein "Button 2"-Event. Bei letzterem handelt es sich um die tatsächliche mittlere Maustaste. Ersterem ist keine Aktion zugewiesen, und Opera interpretiert dies dummerweise als Linksklick! Warum das aber erst mit HAL aufgetreten ist, kann ich nicht sagen. Vermutlich wurden diese Tasten vorher vom X-Server ausgefiltert.
Damit Opera das "Button 8"-Event ignoriert, kann man das Programm imwheel nutzen und in der Datei /etc/X11/imwheel/imwheelrc folgendes Event definieren:
"^Opera"
, Thumb1, None
Nun könnte man mit xmodmap auch noch den tiefen und den flachen Mausklick vertauschen, wenn man das angenehmer findet:
modmap -e "pointer = 1 8 3 4 5 6 7 2"
Aber da diese Anweisung für alle angeschlossenen Geräte gilt, ist dies nicht zu empfehlen - denn man kann dann bei keiner anderen Maus mehr die mittlere Taste nutzen. Theoretisch sollte es möglich sein, nur für dieses eine Gerät eine entsprechende Regel in die 10-x11-input.fdi einzubauen, doch "input.x11_options.ButtonMapping" wird leider ignoriert.
Nachdem dies nun alles lief, wollte ich auch den synaptics-Treiber für mein Touchpad aus der xorg.conf auslagern:
<match key="info.capabilities" contains="input.touchpad">
<merge key="input.x11_driver" type="string">synaptics</merge>
<merge key="input.x11_options.SHMConfig" type="string">on</merge>
<merge key="input.x11_options.HorizScrollDelta" type="string">0</merge>
<merge key="input.x11_options.MinSpeed" type="string">0.25</merge>
<merge key="input.x11_options.MaxSpeed" type="string">0.75</merge>
</match>
Zwar funktioniert das Gerät, aber die Optionen werden ignoriert. Deshalb verbleibt dieser Eintrag nun erstmal in der xorg.conf. Ich denke, es wird auch relativ selten vorkommen, dass ich das Touchpad meines Laptops entferne ;-).
Ich hoffe, ich kann mit diesen Tipps dem ein oder anderem helfen. Über Feedback wäre ich in diesem Fall dankbar :-)
Nachtrag (mal wieder):
Statt der oben vorgeschlagenen imwheelrc verwende ich nun folgende:
".*"
, Thumb1, Button2
Vorteil: Gilt für alle Anwendungen, und bereits ein flacher Klick entspricht der mittleren Maustaste. Nachteil: Auf keinen Fall tief durchdrücken, sonst kommen zwei Klicks mit der mittleren Taste raus, da man das eigentliche Button2-Event nicht überschreiben kann.
Nachtrag: Danke an "roo" für seinen Hinweis in den Kommentaren. Nun aber wirklich...