Vorher habe ich einfach versucht, das Pointer_Left
Keysym einer Taste zuzuweisen und Pointer_EnableKeys
eine Bildlaufsperre zu verwenden. Dadurch wurde der Mauszeiger jedoch nicht nach links bewegt. Stattdessen tat es überhaupt nichts.
Es stellt sich heraus, dass das Zuweisen eines Keysyms zu einer Taste nicht ausreicht. Das Keysym muss ebenfalls interpretiert werden. Dies erfolgt in einer "comp" -Datei. Auf meinem System befinden sie sich in / usr / share / X11 / xkb / compat.
Ich habe mein eigenes Tastaturlayout erstellt, indem Sie diesem ausgezeichneten Leitfaden folgen: http://hack.org/mc/writings/xkb.html . Das heißt, ich habe eine "teck.xkb" -Datei (ich nenne mein Layout "teck"). Diese Datei enthält folgende Zeile:
xkb_compat { include "complete" };
Ein Blick auf / usr / share / X11 / xkb / compat / complete zeigt, dass diese Datei eine Datei mit dem Namen "mousekeys" im selben Ordner enthält. Bingo.
Die Mousekeys-Datei enthält Interpretationen für Tastensymbole zur Steuerung der Maus. Es enthält die erforderliche Interpretation davon Pointer_EnableKeys
, die in einem der Links in meiner Frage erwähnt wird . Es enthält jedoch keine Interpretationen für Pointer_Left
( Pointer_Right
und so weiter). Deshalb hat es bei mir vorher nicht funktioniert. Stattdessen werden viele KP_*
Keysymbole interpretiert. Schließlich ist es Standard, die Maustasten auf die Tastatur zu legen.
Glücklicherweise befindet sich am Ende der Mousekeys-Datei ein Code zum Einrichten eines Indikators für Maustasten. Perfekt!
Also habe ich die Mousekeys-Datei in einen neuen Ordner mit dem Namen "compat" neben meiner teck.xkb-Datei kopiert und in "teck_mousekeys" umbenannt. Ich habe meine teck.xkb-Datei entsprechend aktualisiert:
xkb_compat { include "teck_mousekeys+complete" };
Dann begann ich mit dem Bearbeiten der Datei teck_mousekeys. Statt KP_*
Keysyms zu verwenden, habe ich die verwendet, die ich wollte (die Keys um die rechte Home-Reihe). Hier ist das Ergebnis:
default partial xkb_compatibility "mousekeys" { interpret.repeat= True; interpret m { action = MovePtr(x=-1,y=+1); }; interpret comma { action = MovePtr(x=+0,y=+1); }; interpret period { action = MovePtr(x=+1,y=+1); }; interpret j { action = MovePtr(x=-1,y=+0); }; interpret l { action = MovePtr(x=+1,y=+0); }; interpret u { action = MovePtr(x=-1,y=-1); }; interpret i { action = MovePtr(x=+0,y=-1); }; interpret o { action = MovePtr(x=+1,y=-1); }; interpret k { action = PointerButton(button=default); }; interpret semicolon { action = PointerButton(button=3); }; interpret space { action = PointerButton(button=default,count=2); }; interpret y { action = SetPtrDflt(affect=defaultButton,button=3); }; interpret h { action = SetPtrDflt(affect=defaultButton,button=2); }; interpret n { action = SetPtrDflt(affect=defaultButton,button=1); }; interpret p { action = LockPointerButton(button=default,affect=lock); }; interpret apostrophe { action = LockPointerButton(button=default,affect=unlock); }; indicator "Scroll Lock" { indicatorDrivesKeyboard; controls= MouseKeys; }; };
(Die obigen Angaben setzen ein QWERTY-Layout voraus.)
In meinem benutzerdefinierten Tastaturlayout definiere ich die Scroll-Sperre zum Umschalten der Maustasten:
key <SCLK> {[Pointer_EnableKeys]};