Bildlaufsperre mit den Maustasten in der Home-Reihe aktivieren

1198
lydell

Das ist was ich will:

  1. Ich drücke die Scroll-Taste auf meiner Tastatur.
  2. Die Scroll Lock-LED auf meiner Tastatur leuchtet auf.
  3. Die Tasten in der rechten Home-Reihe steuern nun den Mauszeiger (Bewegen, Klicken, Rechtsklicken, Ziehen usw.). Wie Maustasten auf einer normalen Tastatur.
  4. Der Rest der Tasten macht entweder nichts, genauso wie zuvor oder was auch immer.
  5. Ich drücke erneut die Scroll-Taste.
  6. Die Scroll Lock-LED erlischt.
  7. Keine Maustasten

Es muss an Trisquel arbeiten .

Ich habe xkb schon früher benutzt, um einige Schlüssel neu zuzuordnen, also dachte ich, dass xkb dies vielleicht tun könnte. Und es sieht so aus, als könnte es:

Ich bin jedoch sowohl in Linux als auch in xkb neu. Es ist mir gelungen, mit xkb sehr einfache Schlüssel-Remappings zu machen, aber ich kann leider nicht herausfinden, wie ich all das zusammenstellen kann und in welche Dateien es eingefügt wird. Lösungen ohne xkb sind ebenso in Ordnung wie Teillösungen.

2

2 Antworten auf die Frage

6
lydell

Vorher habe ich einfach versucht, das Pointer_LeftKeysym einer Taste zuzuweisen und Pointer_EnableKeyseine 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_Rightund 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]}; 
0
brm

Ich weiß nicht viel über xkb, aber ich habe etwas basierend auf den xevdevserver- Quellen gemacht, einem Programm, das Linux-evdev -Ereignisse von einem / dev / input / eventX-Gerät liest und sie mit der XTEST-Erweiterung in einen X-Server einfügt. Den Code finden Sie hier:

https://bitbucket.org/brmtron/mouseemu/

Der Hauptnachteil ist, dass Sie etwas ausführen müssen sudo, was möglicherweise nicht der Fall ist.