Wie ordne ich der Alt-Taste für X11 einen anderen Modifikator zu?

9

Ziel:

Ich möchte Alt der CapsLock-Taste und Meta der Alt-Taste zuweisen. Auf diese Weise wird die Alt-Taste nicht mehr als Alt und die CapsLock-Taste nicht mehr als CapsLock erkannt.

openSUSE 11.4

Vorher:

openSUSE 11.1 - da ich der einzige Benutzer meines Computers bin, habe ich die Datei / usr / share / X11 / xkb / keycodes / xfree86 "einfach" bearbeitet und sie hat problemlos funktioniert. Die Schlüssel wurden auf der untersten Ebene mit ihren Symbolen verbunden.

Probleme:

  1. xkb

    Ich habe eine Variante des polnischen Layouts (pl_ext) erstellt, die (zum Test) aus solchen Einträgen besteht:

    key <CAPS> { [ Alt_L ] };
    modifier_map Mod1 { Alt_L, Alt_R };
    

    Dies macht jedoch einfach nichts, die Feststelltaste in xev wird als Alt_L erkannt (Symbol), aber wenn ich die Feststelltaste drücke, verhält sie sich wie eine Feststelltaste (z. B. wenn Sie Datei im Menü haben, sollte Alt + F dieses Menü öffnen, dies nicht ).

    Frage: Wie definiere ich eine Layoutdatei, um die Feststelltaste als Alt und die Alt-Taste als Meta festzulegen?

    Edit: Die Hälfte des Erfolgs hier! Jetzt habe ich solche Einträge:

    key <CAPS> { [ Alt_L ] };
    modifier_map Mod1 { <CAPS> }; // this is a difference
    

    und das funktioniert wie gewünscht. Das tut nicht:

    key <LALT> { [ Meta_L ] } ;
    key <RALT> { [ Meta_R ] } ;
    modifier_map Mod5 { <LALT>,<RALT> };
    

    Alt-Tasten werden von xev als Meta erkannt, aber ich kann die Menüs trotzdem mit Alt + F öffnen, die Fenster wechseln und sollte es nicht. Andererseits kann ich keinen nationalen Charakter eingeben, und ich sollte es tun.

  2. xfree86

    Aber jetzt funktioniert das nicht, ich denke, eine andere Dateitabelle wird anstelle von xfree86 gelesen.

    Frage: Wie finde ich heraus, welche Keycode-Tabellendatei vom System (X / Gnome) verwendet wird?

    Bearbeiten: Die beste Option für mich - das Bearbeiten von Keycode-Tabellen - wurde durch die Antwort von Macias gelöst !

  3. xmodmap

    Die Hälfte des Erfolgs hier. Dieser Teil funktioniert wie gewünscht:

    entfernen Lock = Caps_Lock keysym Caps_Lock = Alt_L

    Jetzt habe ich die CapsLock-Taste, die Alt zugeordnet ist. Aber dieses:

    keysym Alt_L = Meta_L

    ... macht seltsame Sache. xev zeigt, dass die Alt-Taste Meta zugeordnet ist, aber wenn ich Alt + F drücke (dies sollte Meta + F zugeordnet sein -> nichts tun), wird das Menü Datei geöffnet. Was mehr ist, wenn ich Alt + Tab drücke, bekomme ich einen Fensterschalter (ich sollte nicht - Alt ist jetzt Meta).

    Frage: Wie "lösche" ich altes Verhalten für Alt-Taste?

    Bearbeiten: Dieser Teil wird durch Gilles 'Antwort gelöst .

Zusammenfassung:

Die Beantwortung einer Frage würde (hoffentlich) mein Problem lösen. Ich bevorzuge jedoch die Verwendung von xkb vollständig, da ich dann alle Dateien für xkb packen und das Layout an einem Ort ändern könnte. Vielen Dank im Voraus für jede Hilfe!

Greenoldman
quelle
Wenn Sie eine Antwort gefunden haben, posten Sie diese bitte als solche und geben Sie genügend Informationen für andere Personen, die interessiert sein könnten. (Es ist vollkommen in Ordnung, Ihre eigene Frage zu beantworten, wenn Sie die Antwort anderswo oder selbst gefunden haben. Sie können Ihre Antwort sogar als akzeptiert markieren, wenn Sie möchten.)
Gilles 'SO - hör auf, böse zu sein'
@ Gilles, ok, aber ich behalte deine Antwort als Antwort, nur um mögliche Anschuldigungen zu vermeiden, habe ich es für Punkte getan. Außerdem war Ihre Hilfe für mich sehr wertvoll.
Greenoldman
Sie erhalten sowieso keine Punkte, wenn Sie Ihre eigene Antwort akzeptieren. (Sie erhalten Punkte für die Abstimmungen auf Ihre eigene Antwort, was fair ist, seit Sie die Arbeit erledigt haben.) Das Wichtigste ist, dass die Informationen klar dargestellt werden. Es gibt jetzt zwei Antworten auf diese Frage, eine mit xmodmap und eine mit xkb, und die Seite würde klarer lesen, wenn beide als Antworten veröffentlicht würden.
Gilles 'SO - hör auf böse zu sein'

Antworten:

7

(Bei dieser Antwort geht es nur um xmodmap. Ich bin sicher, dass dies mit XKB möglich ist, ich weiß nur nicht wie.)

Modifikatoren und Keysyms werden unabhängig voneinander zugewiesen. Aber Sie erhalten seltsame Effekte, wenn Sie sie nicht konsequent einstellen. Ich denke, alles, was Sie vermissen, ist der addBefehl, einem Modifikator zuzuweisen Meta_L, obwohl Sie möglicherweise auch die Modifikatortasten löschen und neu zuweisen müssen. Sie können ersetzen Mod1und Mod2durch Mod3, Mod4und Mod5: sie austauschbar sind, nur sicherstellen , dass Sie eine nicht für zwei verschiedene Zwecke verwendet werden .

clear Mod1
clear Mod2
remove Lock = Caps_Lock
keysym Caps_Lock = Alt_L
keysym Alt_L = Meta_L
add Mod1 = Alt_L Alt_R
add Mod2 = Meta_L Meta_R
Gilles 'SO - hör auf böse zu sein'
quelle
Vielen Dank. In der Tat habe ich Mod5 anstelle von Mod2 für Meta verwendet und kann jetzt wie erwartet schreiben (ich verwende Meta + Schlüssel für viele nationale Zeichen). Aber seltsamerweise habe ich jetzt wieder ein Problem mit dem CapsLock-Schlüssel - er ist an ... Meta gebunden. Ich denke warum, denn sobald es eine Bindung zu Alt gibt, wird Alt dann neu definiert. Wie kann man also einen Unterschied machen und einmal auf Code und ein zweites Mal auf Symbol bestehen? Ich möchte keine rohen Tastencodes verwenden, da diese von Tastatur zu Tastatur wechseln können. Ich kann die Reihenfolge der Keysyms nicht tauschen, da in der letzten Zeile eine Fehlermeldung angezeigt wird.
Greenoldman
Das Problem dabei keysym Caps_Lock = Alt_List, dass das System bei zweimaliger Ausführung wieder in einen unerwünschten Zustand versetzt wird. Deshalb verwende ich Schlüsselcodes . Sie variieren zwischen Betriebssystemen und Architekturen (nicht zwischen Tastaturen), aber nicht so oft.
Gilles 'SO - hör auf böse zu sein'
Danke für die Erklärung, habe ich gleich erraten :-). Wenn es Ihnen nichts ausmacht, werde ich es als unbeantwortete Frage etwas länger behalten, vielleicht könnte jemand mein Problem auf xkb-Ebene lösen, was flexibler wäre (das Wechseln von Layouts tötet xmodmaps).
Greenoldman
Vielen Dank, weiter mit Symbolen / PC gekämpft, ohne Erfolg.
Cody Craven
8

Ansatz zum Bearbeiten von Schlüsselcodes

Ich habe die Antwort im polnischen Ubuntu-Forum gefunden. Jetzt bearbeitet man nicht die Datei "xfree86", sondern die Datei "evdev". Auf diese Weise können Sie dauerhafte Änderungen vornehmen, die für alle Layouts funktionieren.

Beispiel (auf Gilles-Anfrage) - Melden Sie sich als root an und gehen Sie zu

/usr/share/X11/xkb/keycodes

Erstellen Sie eine Sicherungskopie der Datei "evdev" und bearbeiten Sie sie anschließend. Ändern Sie die Codes nach Ihren Wünschen, zum Beispiel in meinem Fall:

<LALT> = 66; // when I press CapsLock (66 code) system will report pressing LeftAlt
<LMTA> = 64; // I will get LeftMeta when pressing LeftAlt (64 code)

Sie können die Codes finden, indem Sie den Befehl "xev" ausführen, aber Sie können sich einfach die ursprüngliche "evdev" -Datei ansehen.

Abmelden, anmelden, viel Spaß mit Ihrer neuen Tastatur :-).

Greenoldman
quelle
Dies ist wahrscheinlich der richtige Weg mit XKB. Ich verwende Linux Mint und stoße auf Probleme, bei denen die Keyboard PreferencesOptionen zum CapslockÜberschreiben der benutzerdefinierten XKBKonfiguration, die ich schreibe, auftreten. Da es sich um eine Optionsfeldauswahl handelt, kann ich nicht sehen, dass eine der Regeln in der GUI nicht angewendet wird.
dcunited001
Können Sie das Verhalten von LALT bewahren? Das heißt, es nicht in LMTA ändern? Ich habe es versucht, aber anscheinend können Sie nicht zwei Zuordnungen der Form <LALT> = ...
Daniel
4

Versuche dies:

    key <CAPS>  { [ Alt_L, Alt_L ] };
    key <LALT> { [ Meta_L, Meta_L ] };
    modifier_map Mod1 { Alt_L, Alt_R };
    modifier_map Mod5 { Meta_L, Meta_R };

Beachten Sie die zwei Ebenendefinitionen. Dies liegt daran, dass der Standardwert für LALT [Alt_L, Meta_L] ist. Wenn Sie den zweiten nicht neu definieren, bleibt er Meta_L.

In dieser Antwort auf xkb erfahren Sie, wie Sie einige Schlüssel neu definieren können, ohne die Hauptstandarddateien bearbeiten zu müssen (daher muss kein Root vorhanden sein). In diesem Fall benötigen Sie in der lokalen Symboldatei einen kleinen Abschnitt wie folgt:

partial modifier_keys
xkb_symbols "capsasalt_altasmeta" {
        replace key <CAPS>  { [ Alt_L, Alt_L ] };
        replace key <LALT> { [ Meta_L, Meta_L ] };
        modifier_map Mod1 { Alt_L, Alt_R };
        modifier_map Mod5 { Meta_L, Meta_R };
};
Pablo Saratxaga
quelle