Erstellen Sie eine xkb-Konfiguration aus xmodmap

8

Ich habe eine benutzerdefinierte xmodmapDatei, die ich verwende, einschließlich nützlicher mehrsprachiger diakritischer Zeichen, englischer Zitate, Bindestriche usw. Ich möchte diese Karte mit verwenden kmscon, daher muss ich daraus eine xkbKonfiguration erstellen . Gibt es eine automatisierte Methode dafür? Oder sogar ein unkomplizierter manueller Vorgang, da ich dies nicht häufig tun muss?

André von Kugland
quelle

Antworten:

7

Erstellen Sie Ihre eigene xkb-Konfigurationsdatei

Die Idee ist, die aktuelle Tastaturkonfiguration zu "lesen" (nicht aufrufen xmodmap) und darauf basierend eine eigene Symboldatei zu schreiben. Zuerst:

xkbcomp -xkb $DISPLAY

Dies schafft server-0_0.xkb. Nehmen Sie in dieser Datei den folgenden Block:

xkb_symbols "pc+inet(evdev)+compose(menu)+whatever(option)" {
    key <ESC> { [ Escape ] };
    ...
};

Ändern Sie die erste Zeile in:

default xkb_symbols "my_symbols" {
    include "pc+inet(evdev)"
    include "compose(menu)+whatever(option)"

(Ich denke, Sie können Optionen in so viele "Include" -Zeilen aufteilen, wie Sie möchten). Ändern Sie die Schlüssel, die Sie ändern möchten, und stellen Sie sie voran override:

override key <AE10>  { [ 0, parenright, degree ]};

Entfernen Sie alle unveränderten Schlüssel.

Systemweite Installation

Setzen Sie das alles in /usr/share/X11/xkb/symbols/my_terrific_kb. Jetzt können Benutzer es mit setxkbmap my_terrific_kb(in .xinitrcoder .xsessionrc) laden . Wahrscheinlich können Sie setzen Option "XkbLayout" "my_terrific_kb"in xorg.confeine systemweite Änderung.

Einzelbenutzerinstallation

Setzen Sie das alles in ~/anywhere/my_terrific_kb. Finden Sie die XInput-ID Ihrer Tastatur mit xinput list. Dann renne xkbcomp -i <XInput_id> ~/anywhere/my_terrific_kb $DISPLAY.

L. Levrel
quelle
Ok, aber was soll ich auf einem System tun, auf dem ich nicht root bin?
Frank Breitling
Antwort bearbeitet. Ich bin mir für den letzten Abschnitt nicht 100% sicher: Ich habe in meinen Archiven festgestellt, dass ich xkbcomp verwendet habe, um meine benutzerdefinierte xkb-Konfiguration anzuwenden. Ich habe diese Methode jedoch zugunsten einer systemweiten Installation eingestellt und kann mich nicht erinnern, warum. Möglicherweise benötigen Sie eine vollständige Tastaturdefinition, nicht nur Überschreibungen. Bitte testen. Bereiten Sie die Befehlszeile setxkbmap dein einem Terminal vor, falls etwas schief gehen sollte (kopieren Sie eine neue Zeile und fügen Sie sie ein, um die Zeile zu überprüfen, wenn Return ebenfalls fehlerhaft ist)
L. Levrel
Vielen Dank. Sieht kompliziert aus. Ich werde es versuchen, sobald ich die Zeit für diese Art von Experimenten gefunden habe. Leider erfordert auch die Einzelbenutzerinstallation, dass root oder xinput bereits installiert sind. Ich hoffe, dass sich die XInput_id nicht von einer X-Sitzung zur nächsten ändert. Wenn es keine einfachere Lösung gibt, ist xkb ein wirklich verkrüppelter Bastard und ich werde bei Xmodmap bleiben.
Frank Breitling
Wenn die Datei lesbar ist, können Siegrep XINPUT /var/log/Xorg.0.log
L. Levrel
Beachten Sie, dass während dieser beginnt mit „nicht nennen xmodmap“, wenn Sie diesen Befehl ignorieren und tun rufen Sie es mit der Konfiguration , die Sie importieren möchten, und dann von dort aus weiter auf, erhalten Sie eine Datei erhalten , die Ihre zuvor definierten Zuordnungen enthält Dies ist ein praktischer Ausgangspunkt.
Mattdm
2

Die von erstellte Map-Datei xkbcomp :0 custom-xkb-keymapbesteht aus vielen Komponenten, die Sie durch einfaches Austauschen der Argumente laden können xkbcomp custom-xkb-keymap :0. Es zeigt hier einige Warnungen, scheint aber zu funktionieren, wenn ich das Layout in der Datei ändere.

Das xkb-Layout wird im symbolsVerzeichnis gespeichert , z /usr/local/share/X11/xkb/symbols. Der Pfad kann je nach System variieren. Wenn Sie das Layout benötigen, müssen Sie das Teil wie folgt ausschneiden:

xkb_symbols "id+id+id(pc104)" {
    name[group1]="..."
    .
    .
    .
};

und speichern Sie es im symbolsVerzeichnis. Bitte stellen Sie sicher, dass Sie dort keine Datei überschreiben! Sobald es dort gespeichert ist (zum Beispiel als mylayout), können Sie es durch Eingabe laden setxkbmap mylayout. Und dies entspricht der xorg.confEinstellung Option "XkbLayout" "mylayout"im Abschnitt InputDevice(siehe Manpage für kbd für weitere Details).

Es scheint, dass die anderen Teile in der xkcompAusgabe den Dateien in den anderen Verzeichnissen entsprechen. Wenn also etwas nicht funktioniert, müssen Sie das wahrscheinlich custom-xkb-keymapin seine Komponenten aufteilen und in die entsprechenden Verzeichnisse unter kopieren /usr/local/share/X11/xkb. Aber das habe ich noch nie getan.

Bessere Layouts

Anstatt Raw-Dumps zu verwenden, die wie dekompilierter Code aussehen, können Sie auch eine eigene symbolsDatei erstellen, die besser lesbar ist. Ich habe mein eigenes benutzerdefiniertes Layout, das für die meisten von Ihnen wahrscheinlich nicht verwendbar sein wird, aber Sie können sich trotzdem diese kurze Datei ansehen, die ich zum Programmieren auf deutschen Tastaturen verwende (nur um eine Vorstellung davon zu bekommen, wie dies aussehen kann und was Sie mit einer symbolsDatei machen können).

Martin Sugioarto
quelle
1

Ich habe gerade das Problem gelöst. Nachdem ich meine xmodmapKonfiguration angewendet habe , habe ich xkbcomp :0 custom-xkb-keymapdie aktuelle xkbKeymap (von der Anzeige :0) in eine Datei mit dem Namen kopiert custom-xkb-keymap.

André von Kugland
quelle
1
Wo legen Sie die Datei ab, damit sie automatisch geladen wird?
Mattdm
0

In diesem Thread gibt es ein ähnliches Problem: Xephyr: Tastaturzuordnung funktioniert nicht ordnungsgemäß Ähnlich wie bei der bereitgestellten Lösung können Sie Ihre Tastatureinstellungen speichern

setxkbmap -display :0 -print > mykeymap

Diese Datei kann von xkbcomp auf andere Systeme angewendet werden:

xkbcomp mykeymap :0

Dieser Befehl kann im Autostart von Gnome oder anderen DEs erfolgen. Ich weiß nicht, ob alle manuellen Änderungen übernommen werden, aber ich denke, es ist einen Versuch wert. Wo diese Datei ohne xkbcomp automatisch geladen werden soll, weiß ich nicht.

mviereck
quelle