Wie definiere ich einen Compose Key im Terminal (keine Desktop-Umgebung)?

17

Ich möchte einen composeSchlüssel auf meinem System definieren (Debian Sid "Wheezy"). Ich habe kein Xorg (und möchte keine Desktop-Umgebung). Nur im Terminal.

Ich möchte es auf meinem Alt-GrSchlüssel einrichten (rechts Alt). Ich habe es eine Weile versucht, aber ich kann nicht herausfinden, wie ich es einrichten soll.

Ich habe nachgeforscht und einige Anweisungen gefunden:

  • $ showkeygibt mir den Alt-GrSchlüsselcode meines Schlüssels (# 100)

  • $ dumpkeysund $ dumpkeys --compose-only"den aktuellen Inhalt des Tastaturtreibers" in dem von angegebenen Format keymapsgemäß der manSeite ausgeben

  • $ loadkeys Laden Sie eine Tastaturübersetzungstabelle

Ich bin mir sicher, dass es nicht so schwierig ist, aber ich vermisse es, damit umzugehen ...

Cedbeu
quelle
Hm, ich verfolge nicht 100%. Was soll der Alt-Gr tun, wenn Sie ihn treffen?
Emanuel Berg
Ich möchte, dass es der Compose Key ist . Eigentlich möchte ich nur irgendwo einen Compose Key definieren, und da ich es gewohnt bin, ihn auf meinem Alt-Gr zu haben, möchte ich ihn dort definieren. Es ist sehr einfach, eine GUI einzurichten , aber ich sollte in der Lage sein, sie im reinen Konsolenmodus zu definieren, da ich kein X-System installiert habe (dies ist keine Option). Ich kann nur nicht herausfinden, wie.
Cedbeu

Antworten:

10

Auf neueren Debian- und Ubuntu-Systemen werden Ihre Tastatureinstellungen eingegeben /etc/default/keyboardund zwischen X und der Konsole geteilt. Lauf einfach

sudo dpkg-reconfigure keyboard-configuration

und wählen Sie Compose key: Right Alt (AltGr)auf dem entsprechenden Bildschirm.

Sie könnten auch setzen XKBOPTIONS=compose:raltin /etc/default/keyboardund laufen

sudo dpkg-reconfigure console-setup

Ältere Systeme haben standardmäßig einen Compose-Schlüssel auf der Konsole. Im usLayout verhält es sich so, wenn Sie beide Alt Tasten gleichzeitig drücken Compose. 1

Zum Beispiel: Alt+ AltGr, ", A=> Ä

Wenn Sie AltGrnur sein möchten , müssen ComposeSie ändern

alt keycode 100 = Compose

in Ihrer aktiven Tastaturbelegung zu

keycode 100 = Compose

Der einfachste Weg, dies zu tun, besteht darin, die obigen Änderungen in vorzunehmen /lib/kbd/keymaps/i386/include/linux-with-alt-and-altgr.inc.

Eine bessere Möglichkeit besteht darin, eine neue Datei /lib/kbd/keymaps/i386/include/altgr-is-compose.incmit dem Namen der obigen Zeile zu erstellen, eine neue Keymap zu erstellen, die diese enthält, und diese auf Ihre Standard-Keymap festzulegen.

  1. PrtScnfungiert auch als ComposeStandard.
Mikel
quelle
Ich bekomme das nicht zum Laufen. Der dpkg-reconfigureAssistent fragt zwar nach einem Erstellungsschlüssel, sagt jedoch, dass er im "Unicode-Modus" (?) Nicht funktioniert. Wenn Sie sich nicht in diesem Modus befinden, wird angezeigt, dass Strg + als Erstellungsschlüssel fungiert. Aber ich bekomme das auch nicht zum Laufen.
Emanuel Berg
Ich denke, diese Warnmeldung bezieht sich auf unicode_start. Bei mir funktioniert es immer noch, vorausgesetzt ich laufe setupconwie dpkg-reconfiguregesagt.
Mikel
Wenn ich setupconin meinem X-Terminal ( urxvt) starte, heißt es: "Wir befinden uns nicht in der Konsole, die Konsole ist nicht konfiguriert." Außerdem showkeybeschwert sich "Konnte keinen Dateideskriptor an die Konsole senden". In ttybeiden Werken showkeyheißt es aber (als Erstes), dass "kb mode was UNICODE" war, und vielleicht funktioniert es deshalb auch nicht. Die Control + -Periode funktioniert jedoch in tty. OK, jetzt macht es Sinn.
Emanuel Berg
In Ihrer Frage steht, dass Sie keine haben X? Sie müssen setupconauf der virtuellen Linux-Konsole ausgeführt werden, z. B. Strg + Alt + F1.
Mikel
1
Es sieht so aus, als würde console-setupes nicht sehr viele Kompositionssequenzen standardmäßig unterstützen. Sie können laufen, um dumpkeys --compose-onlyzu sehen, welche. Sie sollten in der Lage sein, das console-setupInit-Skript zu ändern , um dort, wo es ausgeführt wird, zusätzliche Erstellungsregeln hinzuzufügen loadkeys.
Mikel
2

"compose" auf der Konsole ermöglicht die Eingabe von zwei Zeichen, gibt jedoch ein drittes aus.

Das Problem ist, dass die Compose-Definitionen Bytes verwenden , und zwar sowohl für die beiden Eingaben (dh Sie können Compose nicht in Form von eingegebenen Schlüsseln definieren, sondern nur in Form von eingegebenen Symbolen) als auch für die Ausgabe.

Damit es in UTF-8 funktioniert, das aus mehreren Bytes (mindestens 1 bis 4 Bytes) besteht, müsste die Art und Weise, wie die Konsoleneingabe verarbeitet wird, erheblich geändert werden. Es scheint, dass es keine Pläne gibt, dies zu tun (der Konsens unter den Kernelentwicklern ist, dass die Konsole eine Konsole bleiben sollte, etwas Einfaches, das nur für den letzten Neustart verwendet wird; wenn Sie tatsächlich Unicode benötigen, brauchen Sie wahrscheinlich auch Bidi, Shaping usw .;) Es ist besser, ein Grafikterminal auszuführen (ein Vollbild-xterm auf X11; es gibt jedoch auch andere Möglichkeiten).

Tatsächlich funktioniert es mit Multibyte-Zeichen auf der Konsole nicht und auch nicht. ABER es funktioniert immer noch, wenn Sie die Erstellungsdefinitionen auf reines ASCII beschränken.

Und ich fand auch heraus, dass es auch funktioniert, wenn die Ausgabe in ISO-8859-1 ist (das entspricht Unicode-Werten bis zu 0x00ff); dafür kannst du in ein Startskript eine Zeile einfügen:

    loadkeys / somepath / somefile

und fügen Sie in diese Datei die gewünschten Compose-Definitionen ein (achten Sie darauf, die Datei in der ISO-8859-1-Codierung zu speichern; und verwenden Sie nur Zeichen größer als 0x7f als Ausgabe). Die Syntax einer solchen Datei ist sehr einfach:

    komponiere 'somechar' 'somotherchar' zu 'desiredoutput'

z.B:

    komponiere 'a' 'a' bis 'å'
    komponiere 'a' 'e' bis 'æ'

Der Apostroph muss entkommen.

Die Auswirkung von toten diakritischen Schlüsseln wird ebenfalls in dieser Datei definiert. für dead_acute + a definieren Sie eine Zeile wie:

    komponiere '\' '' a 'bis' á '

dead_grave verwendet backtick (`), dead_diaeresis verwendet doublequote ("), dead_circumflex verwendet circumflex (^) und dead_tilde verwendet tilde (~).

Pablo Saratxaga
quelle
Danke, ich habe es geschafft. Nur musste ich ändern compose 'a' 'a' to 'å'in compose 'o' 'a' to U+00E5, andernfalls loadkeyszu einem Syntaxfehler beschwert.
Emanuel Berg
Haben Sie bei Verwendung von 'å' die Datei in iso-8859-1 (nicht utf-8) geschrieben?
Pablo Saratxaga
Ich weiß es nicht. Wie überprüfe ich das?
Emanuel Berg
um zu testen, ob sich eine Datei in utf-8 befindet: iconv -f utf-8 -t utf-8 filename Wenn keine Fehler
vorliegen
Das scheint die Datei zu katzen, aber nein, es gibt echo $?zumindest keine Fehler und keine Ausgabe an stderr. fileSagt mir auch, dass es UTF-8 ist, also macht es Sinn.
Emanuel Berg