Super an Strg binden

Super an Strg binden

Ich bin seit einiger Zeit daran interessiert, die Windows-Taste (Super_L) auf meiner Tastatur mit Kopieren und Einfügen zu verknüpfen, und zwar aus keinem anderen Grund als der Bequemlichkeit und der Konsistenz zwischen meinem Desktop und meinem MacBook.

Ich dachte, ich wäre nah dran, nachdem ich über xmodmap gelesen und Folgendes ausgeführt hatte:

$ # re-map Super_L to Mode_switch, the 3rd col in keymap table `xmodmap -pke`
$ xmodmap -e "keycode  133 = Mode_switch"

$ # map Mode_switch+c to copy
$ xmodmap -e "keycode  54 = c C XF86_Copy C"

$ # map Mode_switch+v to paste
$ xmodmap -e "keycode  55 = v V XF86_Paste V"

Leider scheinen XF86Copy und XF86Paste überhaupt nicht zu funktionieren. Sie sind aufgelistet /usr/include/X11/XF86keysym.hund xevzeigen, dass die Tastenfolge von X als XF86Paste und XF86Copy interpretiert wird. Funktionieren diese Symbole tatsächlich? Müssen sie auf Anwendungsebene unterstützt werden?

Antwort1

Super an Strg binden

Wie wäre es, Ihre linke Windows/Logo/SuperTaste so zu binden, dass sie als weitere CtrlTaste fungiert?

Sie können dies mit den folgenden xmodmap-Befehlen erreichen:

remove mod4 = Super_L
keysym Super_L = Control_L
add Control = Control_L

Vorausgesetzt, Sie haben die obigen Zeilen gespeichert, super_as_ctrl.xmodmapkönnen Sie den Effekt testen, indem Sie ausführen

xmodmap super_as_ctrl.xmodmap

Um die Änderung dauerhaft zu machen (und auch nach erneuter Anmeldung/Neustart bestehen zu lassen), benennen Sie die Datei .Xmodmapin Ihrem Home-Ordner um.

(Das Obige wurde auf einem Ubuntu 11.10 Live-System getestet, sollte aber für andere Linux-Distributionen genauso sein)


Anpassen der Kopieren/Einfügen-Tastenkombinationen für Ihr Terminalprogramm

SuperNachdem Sie an gebunden sind Ctrl, können Sie nun Super-Cfast überall kopieren. Die einzige häufige Ausnahme ist Ihr Terminalprogramm. Sie können die Tastenkombinationen dort jedoch neu definieren.

Ich habe herausgefunden, dass gnome-terminales diese Option mittlerweile sogar gibt (ich hatte sie Ctrl-Shift-Cjedenfalls nicht, bis ich mich daran gewöhnt hatte). Wenn du diese verwendest, geh Edit / Keyboard Shortcuts...ins Menü und weise Ctrl-CKopieren und Ctrl-VEinfügen zu. Sollte ähnlich sein für konsoleusw.

Und keine Sorge, Sie verlieren nicht die Möglichkeit, ein Programm über eine Tastenkombination zu beenden. Nachdem Sie die Kopiertaste für das Terminal neu zugewiesen haben, können Sie sie einfach Ctrl-Shift-Cwie Ctrl-Czuvor verwenden. Das Terminal unterscheidet hier nicht, ob Shift gedrückt ist oder nicht. Und die Tastenkombination wird beim Kopieren nicht mehr abgefangen. Alternativ können Sie das Beenden an eine andere Tastenkombination zuweisen, wie MountainX in seiner Antwort vorschlägt.


XF86Copy usw. funktionieren nicht

Zu den Tastensymbolen für Kopieren und Einfügen: Anscheinend haben sie keine Wirkung. Ich habe es schnell getestet, indem ich die Kopieraktion Shift-ScrollLock zugewiesen habe (sie war unbenutzt und ich wollte es mit einer Nicht-Modifikatortaste testen):

xmodmap -e 'keycode 78 = Scroll_Lock XF86Copy Scroll_Lock'

Das Drücken hatte keinen Effekt, auch nicht bei XF86AudioMute. Allerdings funktionierte es bei der Zuweisung des Buchstabens „a“. Ich vermute also, dass es ein spezifisches Problem mit diesen XF86-Sondertastensymbolen gibt.

Antwort2

Wenn Sie beispielsweise nur einige Sequenzen der Form Super+x, Super+c, Super+v an andere Sequenzen wie Strg+x, Strg+c, Strg+v binden möchten, sodass (wie vom OP gewünscht) diese bestimmten Super-Tastensequenzen im Allgemeinen auf Ausschneiden und Einfügen abgebildet werden, ohne andere Verwendungen der Super-Taste auf Ihrem System zu beeinträchtigen, ist dies mithilfe der XKB-Erweiterung möglich. Das folgende Verfahren beschreibt die Schritte und gibt zwei verschiedene Beispiele der Details für zwei verschiedene Starttastatur-Setups; hoffentlich bietet dies genügend Informationen, um es an Ihr System anzupassen. Es wird vorausgesetzt, dass Sie mit dem Erstellen und Bearbeiten von Dateien auf Ihrem System vertraut sind, einschließlich solcher an Systemspeicherorten wie /usr/share/X11/xkb.

  1. Entscheiden Sie, wo Ihr XKB-Konfigurationsbaum gespeichert werden soll. Suchen Sie zuerst den System-Konfigurationsbaum. Er befindet sich normalerweise in /usr/share/X11/xkb, und ich bin mir nicht ganz sicher, wie ich ihn finden soll, wenn er nicht dort ist. Sie können Ihr System einfach nach Verzeichnissen mit dem Namen „xkb“ durchsuchen. Wenn Sie ihn gefunden haben, können Sie den System-Konfigurationsbaum entweder an Ort und Stelle ä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 überschreiben könnten (Sie wurden gewarnt). In jedem Fall sind alle im Folgenden genannten Dateinamen relativ zu diesem Verzeichnis, das ich bei Bedarf als $XKBLOCAL$ bezeichnen werde, und alle Befehle gehen davon aus, dass dies Ihr aktuelles Verzeichnis ist.

  2. Bestimmen Sie, welcher XKB-Schlüsseltyp die aktuellen x-, c- und v-Schlüssel sind. Am einfachsten geht das über den Befehl xkbcomp -a $DISPLAY - | grep -C 6 c,(beachten Sie, dass das Komma absichtlich in das Muster aufgenommen wurde). In meinem ersten Beispiel-Setup ergibt 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> {
    

    während dies in meinem anderen Beispiel-Setup zu

    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 Tasten 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 sie von einem ganz anderen Typ sind. Im Folgenden wird der Typ als $TYPE$ bezeichnet, was Sie in den folgenden Befehlen durch die tatsächliche Zeichenfolge ALPHABETIC oder was auch immer ersetzen müssen.

  3. 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 Datei „cutpaste“, den ich gewählt habe, ist beliebig, verwenden Sie einen beliebigen Namen, aber beachten Sie, dass Sie in späteren Schritten konsequent auf diese Datei verweisen müssen. Beim 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 erhält es den Inhalt

    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";
    };
    
  4. Bearbeiten Sie die Datei „types/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 durch den Modifikator erzeugt wird, der Super entspricht. Sie sollten überprüfen, was dieser Modifikator auf Ihrem System ist, wahrscheinlich ist es Mod4, wie unten verwendet. Die notwendigen Änderungen sollten aus den beiden Beispiel-Endversionen von „types/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"';
       };
    };
    
  5. Kopieren Sie die Schlüsselsymboldefinitionen, die im zweiten Schritt von grep ausgegeben wurden, in eine zweite neue Datei symbols/cutpaste, fügen Sie ähnliche Präambeln und Postambeln hinzu und ä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, der von den Super-Versionen erzeugt wird. Die Ergebnisse in unseren beiden 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 entfernt habe, um die Zeilenlänge ein wenig unter Kontrolle zu halten.

  6. Suchen Sie den Namen des Regelsatzes, den XKB derzeit verwendet. Das ist ganz einfach, er wird im Ergebnis angezeigt setxkbmap -query. In meinem Fall war es „evdev“.

  7. Kopieren Sie die Systemversion von rules/evdev (oder wie auch immer Ihr Regelsatz heißt) nach $XKBLOCAL$/rules/evdev und fügen Sie Regeln hinzu, die auf die von uns erstellten Optionen verweisen. Sie haben hier zwei Möglichkeiten: Sie können evdev vollständig kopieren oder nur die Teile, die das Tastaturmodell, das Layout, die Variante und die Option(en) erwähnen, die Sie tatsächlich verwenden. Wenn Sie die Systemdateien an Ort und Stelle ändern, müssen Sie natürlich nichts 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 suchen den Abschnitt der Regeldatei, der mit beginnt, ! option = symbolsund fügen diesem Abschnitt eine Zeile hinzu . cutpaste:super = +cutpasteAußerdem suchen Sie den Abschnitt der Regeldatei, der mit beginnt, und fügen diesem Abschnitt ebenfalls ! option = typeseine Zeile hinzu.cutpaste:super = +cutpaste

  8. 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 angehängter Erweiterung .lst entspricht. Wie im vorherigen Schritt können Sie entweder die gesamte Datei oder nur den Teil kopieren, auf den das von Ihnen verwendete Modell, Layout, die Variante und die Option(en) verweist. Sie müssen nur den Abschnitt dieser Datei finden, der mit beginnt, und diesem Abschnitt ! optioneine Zeile wie diese hinzufügen:cutpaste:super Add super equivalents of cut and paste operations

  9. OK, jetzt sind alle Konfigurationsdateien vorhanden. Wenn Sie die Systemdateien geändert haben, können Sie Ihre neue Option jetzt mit aufrufen setxkbmap -option cutpaste:super. Wenn Sie dies jedoch nicht getan haben, müssen Sie setxkbmap mitteilen, wo sich Ihr $XKBLOCAL$-Verzeichnis befindet. Schlimmer noch: Der Server weiß auch nicht, wo sich dieses Verzeichnis befindet, und setxkbmap teilt es ihm nicht mit (oder kann es vielleicht nicht, da der Server letztendlich auf einer anderen Maschine laufen könnte). Sie müssen also die Ausgabe von setxkbmap an xkbcomp weiterleiten und diesem Befehl auch mitteilen, wo sich Ihr $XKBLOCAL-Verzeichnis befindet. Die vollständige Befehlszeile lautet daher setxkbmap -I$XKBLOCAL$ -option cutpaste:super -print | xkbcomp -I$XKBLOCAL - $DISPLAY.

Hoffentlich ist dies für jemanden hilfreich/interessant, da gute, definitive XKB-Dokumentation/Referenz rar ist. Eine sehr hilfreiche Referenz warhttp://madduck.net/docs/extending-xkb/.

Antwort3

So gehe ich vor. Es ist nicht die ultimative Lösung, aber ich habe versucht, die ultimative Lösung zu finden, und bin trotz vieler Bemühungen nicht dorthin gekommen. Also habe ich mich für etwas entschieden, das einfach ist und für mehr als 90 % meiner Anforderungen funktioniert. Ich kann es in wenigen Minuten auf jedem Computer implementieren, an den ich gehe (oder auf jeder neuen Linux-Installation). Es ist kinderleicht.

Legen Sie in der X-Terminal-Anwendung die Tastenkombinationseinstellungen fest. Ich habe dies sowohl in Gnome als auch in KDE getan. Gehen Sie in der Konsole beispielsweise zu Menü > Einstellungen > Tastenkombinationen konfigurieren. Im Gnome X-Terminal gibt es ein ähnliches Menü. Wählen Sie einfach die Tastenkombination (z. B. „kopieren“) und geben Sie die gewünschte Tastenfolge ein.

Falls die Tastenkombinationen zum Kopieren und Einfügen im Terminal mit Terminalbefehlen in Konflikt geraten, gibt es auch dafür eine einfache Lösung. Was wäre beispielsweise, wenn jemand STRG-C zum Kopieren verwenden möchte (damit das X-Terminal dem CUA-Standard entspricht)?

In diesem Fall können Sie die stty-Tastenkombinationen einfach ändern (in .bashrc). Um das Beispiel mit STRG-C zum Kopieren fortzusetzen, sagen wir, Sie möchten, dass die Unterbrechungstaste jetzt STRG-B (für „Break“) ist. Dies erreicht Folgendes:

echo "stty intr \^b" >> ~/.bashrc 

Dann die Quelle .bashrc.

Die gesamte Lösung ist so einfach wie die Verwendung der X-Terminaleinstellungen zum Ändern von Verknüpfungen und anschließendes optionales Lösen von Konflikten mit stty mit einem einzeiligen Echo-Befehl. Kinderleicht und deckt fast alles ab, was ich brauche.

Antwort4

Wahrscheinlich handelt es sich bei der Windows-Taste um eine Modifikatortaste. Führen Sie Folgendes aus und versuchen Sie es erneut:

xmodmap -e 'remove Mod4 = Super_L'

verwandte Informationen