Wenn Sie nur einige Sequenzen der Form Super + x, Super + c, Super + v an andere Sequenzen wie Strg + x, Strg + c, Strg + v binden möchten, so dass (wie vom OP gewünscht) diese Bestimmte Super-Key-Sequenzen können im Allgemeinen ausgeschnitten und eingefügt werden, ohne dass der Super-Key auf Ihrem System anderweitig verwendet wird. Dies ist nur mit der XKB-Erweiterung möglich. Das folgende Verfahren beschreibt die Schritte und gibt zwei verschiedene Beispiele für die Details für zwei verschiedene Starttastatur-Setups. Hoffentlich liefert dies genug Informationen, um sich an Ihr System anzupassen. Es wird davon ausgegangen, dass Sie mit dem Erstellen und Bearbeiten von Dateien auf Ihrem System vertraut sind, auch an Systemstandorten wie /usr/share/X11/xkb
.
Entscheiden Sie, wo sich Ihr XKB-Konfigurationsbaum befinden soll. Finden Sie zuerst das System ein. Es befindet sich normalerweise in / usr / share / X11 / xkb, und ich bin nicht sicher, wie ich es finden soll, wenn es nicht vorhanden ist. Sie könnten Ihr System einfach nach Verzeichnissen mit dem Namen "xkb" durchsuchen. Sobald Sie es gefunden haben, können Sie entweder das vorhandene System ändern oder ein beliebiges Verzeichnis Ihrer Wahl verwenden. Der Vorteil der Verwendung des Systemverzeichnisses besteht darin, dass Sie Ihre Änderungen viel einfacher aufrufen können. Der Nachteil besteht jedoch darin, dass zukünftige Systemaktualisierungen Ihre Änderungen möglicherweise überschreiben (Sie wurden gewarnt). In jedem Fall beziehen sich alle im Folgenden genannten Dateinamen auf dieses Verzeichnis, das ich bei Bedarf als $ XKBLOCAL $ bezeichne, und alle Befehle gehen davon aus, dass dies Ihr aktuelles Verzeichnis ist.
Bestimmen Sie, welcher XKB-Schlüsseltyp die aktuellen x-, c- und v-Schlüssel sind. Dies geschieht am einfachsten über den Befehl xkbcomp -a $DISPLAY - | grep -C 6 c,
(beachten Sie, dass das Komma absichtlich im Muster enthalten ist). In meinem ersten Beispiel erzeugt dies:
key <AB02> {
type= "ALPHABETIC",
symbols[Group1]= [ x, X ]
};
key <AB03> {
type= "ALPHABETIC",
symbols[Group1]= [ c, C ]
};
key <AB04> {
type= "ALPHABETIC",
symbols[Group1]= [ v, V ]
};
key <AB05> {
wohingegen in meinem anderen Beispiel-Setup dies erzeugt
key <AB02> {
type= "FOUR_LEVEL",
symbols[Group1]= [ x, X, approxeq, dead_ogonek ]
};
key <AB03> {
type= "FOUR_LEVEL",
symbols[Group1]= [ c, C, ccedilla, Ccedilla ]
};
key <AB04> {
type= "FOUR_LEVEL",
symbols[Group1]= [ v, V, squareroot, U25CA ]
};
key <AB05> {
Das Ergebnis ist, dass im ersten Beispiel die relevanten Schlüssel vom Typ "ALPHABETIC" sind, während sie im zweiten Beispiel vom Typ "FOUR_LEVEL" sind. Abhängig von Ihrer Tastaturkonfiguration stellen Sie möglicherweise fest, dass es sich um einen anderen Typ handelt. Im Folgenden wird der Typ als $ TYPE $ bezeichnet, den Sie in den folgenden Befehlen durch die tatsächliche Zeichenfolge ALPHABETIC oder eine andere ersetzen müssen.
Suchen Sie die Definition von $ TYPE $ und kopieren Sie sie in eine neue Datei im Verzeichnis $ XKBLOCAL $ / types. Hier ist ein Befehl, der genau das tut: xkbcomp -a $DISPLAY - | grep -z -o 'type "$TYPE$" {[^}]*};' > types/cutpaste
. Der Name der von mir gewählten Datei "cutpaste" ist willkürlich. Verwenden Sie einen beliebigen Namen. Beachten Sie jedoch, dass Sie in späteren Schritten immer wieder auf diese Datei verweisen müssen. Im ersten Setup erhält diese Datei den Inhalt
type "ALPHABETIC" {
modifiers= Shift+Lock;
map[Shift]= Level2;
map[Lock]= Level2;
level_name[Level1]= "Base";
level_name[Level2]= "Caps";
};
und im anderen Beispiel wird der Inhalt abgerufen
type "FOUR_LEVEL" {
modifiers= Shift+LevelThree;
map[Shift]= Level2;
map[LevelThree]= Level3;
map[Shift+LevelThree]= Level4;
level_name[Level1]= "Base";
level_name[Level2]= "Shift";
level_name[Level3]= "Alt Base";
level_name[Level4]= "Shift Alt";
};
Bearbeiten Sie die Dateitypen / cutpaste, um zwei Dinge zu tun: Fügen Sie eine Präambel und eine Postambel hinzu, die es zu einer richtigen XKB-Klausel machen, und ändern Sie den Typnamen und die Typdefinition, um eine weitere Ebene hinzuzufügen, die vom Super-Modifikator erzeugt wird. Sie sollten überprüfen, welcher Modifikator auf Ihrem System vorhanden ist. Es handelt sich wahrscheinlich um Mod4, wie es im Folgenden verwendet wird. Die notwendigen Änderungen sollten aus den beiden endgültigen Beispielversionen von Typen / Cutpaste ersichtlich sein, nämlich:
default partial xkb_types "addsuper" {
type "ALPHABETIC_SUPER" {
modifiers= Shift+Lock+Mod4;
map[Shift]= Level2;
map[Lock]= Level2;
map[Mod4]= Level3;
map[Shift+Mod4]= Level3;
map[Lock+Mod4]= Level3;
level_name[Level1]= "Base";
level_name[Level2]= "Caps";
level_name[Level3]= "With Super";
};
};
und
default partial xkb_types "addsuper" {
type "FOUR_LEVEL_SUPER" {
modifiers= Shift+LevelThree+Mod4;
map[Shift]= Level2;
map[LevelThree]= Level3;
map[Shift+LevelThree]= Level4;
map[Mod4]= Level5;
map[Shift+Mod4] = Level5;
map[LevelThree+Mod4] = Level5;
map[Shift+LevelThree+Mod4] = Level5;
level_name[Level1]= "Base";
level_name[Level2]= "Shift";
level_name[Level3]= "Alt Base";
level_name[Level4]= "Shift Alt";
level_name[Level5]= "With Super"';
};
};
Kopieren Sie die Schlüsselsymboldefinitionen, die von grep im zweiten Schritt ausgegeben wurden, in eine zweite neue Datei symbols / cutpaste und fügen Sie eine ähnliche Präambel und Postambel hinzu. Ändern Sie die Definitionen, um die neuen Typen zu verwenden, und fügen Sie der Definition Aktionen hinzu, um den gewünschten Schlüssel zu verarbeiten produziert von den Super-Versionen. Die Ergebnisse davon in unseren zwei Beispielen sind:
default partial xkb_symbols "superversions" {
replace key <AB02> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ x, X, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatX>,mods=Control,clearmods=Super)]
};
replace key <AB03> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ c, C, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatC>,mods=Control,clearmods=Super)]
};
replace key <AB04> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ v, V, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatV>,mods=Control,clearmods=Super)]
};
};
und
default partial xkb_symbols "superversions" {
replace key <AB02> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [x,X,approxeq,dead_ogonek,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatX>,mods=Control,clearmods=Super)]
};
replace key <AB03> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [c,C,ccedilla,Ccedilla,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatC>,mods=Control,clearmods=Super)]
};
replace key <AB04> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [v,V,squareroot,U25CA,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatV>,mods=Control,clearmods=Super)]
};
};
Beachten Sie, dass ich im zweiten Beispiel auch einige (nicht signifikante) Leerzeichen herausgedrückt habe, um die Zeilenlänge unter Kontrolle zu halten.
Suchen Sie den Namen des Regelsatzes, den XKB derzeit verwendet. Das ist einfach, das zeigt das Ergebnis von setxkbmap -query
. In meinem Fall war es "evdev".
Kopieren Sie die Systemversion von rules / evdev (oder wie auch immer der Name Ihres Regelsatzes lautet) nach $ XKBLOCAL $ / rules / evdev und fügen Sie Regeln hinzu, die auf die von uns erstellten Optionen verweisen. Hier haben Sie zwei Möglichkeiten: Sie können entweder alle evdev-Dateien oder nur die Teile kopieren, in denen das Tastaturmodell, das Layout, die Variante und die Optionen aufgeführt sind, die Sie tatsächlich verwenden. Wenn Sie die vorhandenen Systemdateien ändern, müssen Sie natürlich nicht kopieren, sondern nur bearbeiten.
In diesem Fall ist das, was hinzugefügt wird, unabhängig von der anfänglichen Tastaturkonfiguration identisch. Es gibt also nur ein Beispiel. Sie finden den Abschnitt der Regeldatei, der mit "" beginnt, ! option = symbols
und fügen cutpaste:super = +cutpaste
diesem Abschnitt eine Zeile hinzu. Außerdem finden Sie den Abschnitt der Regeldatei, der mit "" beginnt, ! option = types
und eine Zeile cutpaste:super = +cutpaste
zu diesem Abschnitt.
Kopieren Sie die Systemversion von evdev.lst und fügen Sie eine Zeile für Ihre neue Option hinzu. Beachten Sie, dass der Name dieser Datei einfach dem Namen der Regeldatei mit angefügtem .lst entspricht. Wie im vorherigen Schritt können Sie entweder die gesamte Datei oder nur den Teil kopieren, auf den sich das verwendete Modell, Layout, die Variante und die verwendeten Optionen beziehen. Sie müssen nur den Abschnitt dieser Datei finden, der mit beginnt, ! option
und eine Zeile wie die folgende hinzufügen: cutpaste:super Add super equivalents of cut and paste operations
zu diesem Abschnitt.
OK, jetzt sind alle Konfigurationsdateien vorhanden. Wenn Sie die Systemdateien geändert haben, können Sie jetzt Ihre neue Option mit aufrufen setxkbmap -option cutpaste:super
. Andernfalls müssen Sie setxkbmap mitteilen, wo sich Ihr $ XKBLOCAL $ -Verzeichnis befindet. Was noch schlimmer ist, der Server weiß auch nicht, wo sich dieses Verzeichnis befindet, und setxkbmap weiß es nicht (oder kann es möglicherweise nicht, da der Server letztendlich auf einem anderen Computer ausgeführt wird). Sie müssen also die Ausgabe von setxkbmap an xkbcomp leiten und diesem Befehl auch mitteilen, wo sich Ihr $ XKBLOCAL-Verzeichnis befindet. Die volle Kommandozeile ist also setxkbmap -I$XKBLOCAL$ -option cutpaste:super -print | xkbcomp -I$XKBLOCAL - $DISPLAY
.
Hoffentlich ist dies für jemanden hilfreich / interessant, da eine gute definitive XKB-Dokumentation / Referenz rar ist. Eine sehr hilfreiche Referenz war http://madduck.net/docs/extending-xkb/ .