Wie bekomme ich A mit Punkten in Dvorak von Ubuntu 16.04?

8

Ich möchte A mit Punkten ( Ä/ ä) als einstufige Tastenkombination in Ubuntu 16.04s Tastatur von Macbook Air 2013-mid eingeben, Ausgabe vonsetxkbmap -query

rules:      evdev
model:      pc105
layout:     us,us
variant:    dvorak,
options:    ctrl:nocaps

Standardmäßig gibt es AltGrauf der Tastatur keine , nur zwei Alts. Mit diesem Befehl wird Ihr Recht auf die Compose-Taste ( AltGr) gesetzt, es werden jedoch Ihre eigenen benutzerdefinierten Tastaturkonfigurationen usw. mit Capslock als STRG beibehalten caps:ctrl_modifier, siehe hier

gsettings set org.gnome.desktop.input-sources xkb-options \
    "$(gsettings get org.gnome.desktop.input-sources xkb-options \ 
    | sed "s/]/, 'compose:ralt']/")"

Es wäre wirklich großartig, eine xmodmapunabhängige Lösung zu haben , wenn dies geändert wird, weil es abgeschrieben wird.

Zweistufiger Keybinding-Ansatz

Wir können mit Dvorak International nur einen zweistufigen Keybinding-Ansatz mit Deadkeys durchführen.

  • Die Antwort von SeverusTux ist ein zweistufiger Befehl wie AltGr- Shift- Q+ A, der nur in funktioniert us-drovak, international with deadkeys.
  • SeverusTux. Ctrl+ Shift+ u+ e4+ Enterfunktioniert und gibt dir ä. Wie kann man dies auf einen einstöckigen Keybinding Karte Alt- a?

Ich mache dort, wo Sie sehen, dass die GUI die Änderung an anderer Stelle vornimmt. Ich möchte wirklich wissen wo

masi@masi:~$ cat /usr/share/X11/locale/en_US.UTF-8/Compose > /home/masi/Desktop/test1
% I make here a change in the GUI as proposed by Severus: compose key = right Alt
masi@masi:~$ cat /usr/share/X11/locale/en_US.UTF-8/Compose > /home/masi/Desktop/test2
masi@masi:~$ diff /home/masi/Desktop/test1 /home/masi/Desktop/test2
[ no output ]

Dies zeigt, dass der xserver nicht schnell aktualisiert wird. Sie müssen Ihre Tastatur für die Änderung auf etwas anderes und wieder zurück ändern.

Einstufiger Keybinding-Ansatz

Ich möchte einen einstufigen Befehl wie AltGr- Afür äund AltGr- Shift- Afür Äin Englisch (US-dvorak). Ich mache xev -e keyboard und drückeAltGr

[ignore the beginning; press AltGr]
KeyPress event, serial 28, synthetic NO, window 0x4400001, 
root 0xd6, subw 0x0, time 13661220, (186,522), root:(186,574), 
state 0x0, keycode 108 (keysym 0xffea, Alt_R), same_screen YES, 
XLookupString gives 0 bytes: 
XmbLookupString gives 0 bytes: 
XFilterEvent returns: False 

KeyRelease event, serial 28, synthetic NO, window 0x4400001, 
root 0xd6, subw 0x0, time 13661284, (186,522), root:(186,574), 
state 0x8, keycode 108 (keysym 0xffea, Alt_R), same_screen YES, 
XLookupString gives 0 bytes: 
XFilterEvent returns: False

Sie können alle möglichen Schalter erhalten, more /usr/share/X11/xkb/rules/xorg.lst | grep lv3aber wir sind nur daran interessiertlv3:ralt_switch

  lv3:switch           Right Ctrl
  lv3:menu_switch      Menu
  lv3:win_switch       Any Win key
  lv3:lwin_switch      Left Win
  lv3:rwin_switch      Right Win
  lv3:alt_switch       Any Alt key
  lv3:lalt_switch      Left Alt
  lv3:ralt_switch      Right Alt
  lv3:ralt_switch_multikey Right Alt, Shift+Right Alt key is Compose
  lv3:ralt_alt         Right Alt key never chooses 3rd level
  lv3:enter_switch     Enter on keypad
  lv3:caps_switch      Caps Lock
  lv3:bksl_switch      Backslash
  lv3:lsgt_switch      <Less/Greater>
  lv3:caps_switch_latch Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser
  lv3:bksl_switch_latch Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser
  lv3:lsgt_switch_latch <Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser

Meine Tastaturlayouts wurden getestet, aber hauptsächlich Englisch (US-dvorak)

Geben Sie hier die Bildbeschreibung ein

Endlösung [Sneetsher]

Ich setze A mit Punkten in Englisch (dvorak) von AltGr- a. Führen Sie die Änderungen in zusammen /usr/share/X11/xkb/symbols/us. jetzt Deutsch-Dvorak, weil es auch für skandinavische Sprachen sehr gut funktioniert (von hier )

// based on a keyboard map from an 'xkb/symbols/dk' file
// Added A with dots and O with dots for AltGr-A and AltGr-O, respectively. Sneether and Masi, 17-June-2016.

partial alphanumeric_keys
xkb_symbols "dvorak" {

    name[Group1]= "English (Dvorak)";

    key <TLDE> { [       grave, asciitilde, dead_grave, dead_tilde      ] };

    key <AE01> { [          1,  exclam          ]       };
    key <AE02> { [          2,  at              ]       };
    key <AE03> { [          3,  numbersign      ]       };
    key <AE04> { [          4,  dollar          ]       };
    key <AE05> { [          5,  percent         ]       };
    key <AE06> { [          6,  asciicircum, dead_circumflex, dead_circumflex ] };
    key <AE07> { [          7,  ampersand       ]       };
    key <AE08> { [          8,  asterisk        ]       };
    key <AE09> { [          9,  parenleft,  dead_grave] };
    key <AE10> { [          0,  parenright      ]       };
    key <AE11> { [ bracketleft, braceleft       ]       };
    key <AE12> { [ bracketright, braceright,  dead_tilde] };

    key <AD01> { [  apostrophe, quotedbl, dead_acute, dead_diaeresis    ] };
    key <AD02> { [      comma,  less,   dead_cedilla, dead_caron        ] };
    key <AD03> { [      period, greater, dead_abovedot, periodcentered  ] };
    key <AD04> { [          p,  P               ]       };
    key <AD05> { [          y,  Y               ]       };
    key <AD06> { [          f,  F               ]       };
    key <AD07> { [          g,  G               ]       };
    key <AD08> { [          c,  C               ]       };
    key <AD09> { [          r,  R               ]       };
    key <AD10> { [          l,  L               ]       };
    key <AD11> { [      slash,  question        ]       };
    key <AD12> { [      equal,  plus            ]       };

    key <AC01> {[ a,          A,    adiaeresis,       Adiaeresis ]      };
    key <AC02> {[ o,          O,    odiaeresis,       Odiaeresis ]      };
    key <AC03> { [ e, E, ediaeresis, Ediaeresis ] };
    key <AC04> { [ u, U, udiaeresis, Udiaeresis ] };
    key <AC05> { [          i,  I               ]       };
    key <AC06> { [          d,  D               ]       };
    key <AC07> { [          h,  H               ]       };
    key <AC08> { [          t,  T               ]       };
    key <AC09> { [          n,  N               ]       };
    key <AC10> { [ s, S, ssharp ] };
    key <AC11> { [      minus,  underscore      ]       };

    key <AB01> { [   semicolon, colon, dead_ogonek, dead_doubleacute ] };
    key <AB02> { [          q,  Q               ]       };
    key <AB03> { [          j,  J               ]       };
    key <AB04> { [          k,  K               ]       };
    key <AB05> { [          x,  X               ]       };
    key <AB06> { [          b,  B               ]       };
    key <AB07> { [          m,  M               ]       };
    key <AB08> { [          w,  W               ]       };
    key <AB09> { [          v,  V               ]       };
    key <AB10> { [          z,  Z               ]       };

    key <BKSL> { [  backslash,  bar             ]       };

    include "level3(ralt_switch)"
};

Oder verwenden Sie das Skript, das jedoch immer noch fehlerhaft ist

# restore your current keyboard settings 
sudo apt-get install --reinstall xkb-data
gsettings set org.gnome.desktop.input-sources xkb-options "['compose:ralt', 'caps:ctrl_modifier']"

sudo sed -i.bak 's/[[ \t]*a,[ \t]*A[ \t]*]/[ a,          A,    adiaeresis,       Adiaeresis ]/g;' /usr/share/X11/xkb/symbols/us; 
sudo sed -i.bak 's/[[ \t]*o,[ \t]*O[ \t]*]/[ o,          O,    odiaeresis,       Odiaeresis ]/g;' /usr/share/X11/xkb/symbols/us; 
# German-Dvorak feels better
#sudo sed -i.bak 's/[[ \t]*e,[ \t]*E[ \t]*]/[ e,          E,    ediaeresis,       Ediaeresis ]/g;' /usr/share/X11/xkb/symbols/us; 
#sudo sed -i.bak 's/[[ \t]*u,[ \t]*U[ \t]*]/[ u,          U,    udiaeresis,       Udiaeresis ]/g;' /usr/share/X11/xkb/symbols/us; 
#sudo sed -i.bak 's/[[ \t]*s,[ \t]*S[ \t]*]/[ s,          S,    ssharp ]/g;' /usr/share/X11/xkb/symbols/us; 

# add     include "level3(ralt_switch)" to the end of the environment
# https://unix.stackexchange.com/a/290407/16920
# https://unix.stackexchange.com/q/290405/16920
pos=( $( sed -n -f - /usr/share/X11/xkb/symbols/us <<END_SED
    /xkb_symbols "dvorak" {/,/^};/{
            /xkb_symbols "dvorak" {/=
            /^};/=
    }
END_SED
) )
sudo sed -i.bak "${pos[1]}i\    include \"level3(ralt_switch)\"" /usr/share/X11/xkb/symbols/us

sudo dpkg-reconfigure xkb-data
# Change your keyboard. Change Back. Should work. But some bug. I cannot get the script works stably. 

Bugs

  1. TODO-Problem beim erneuten Laden der Tastatur auf xserver https://unix.stackexchange.com/q/290449/16920 Die manuelle Änderung funktioniert nicht immer.
  2. Komplikationen: Xserver lädt diese Schlüssel nicht schnell und auch nicht in allen Fällen nach dem Neustart / Abmelden.

Systeme: Ubuntu 16.04
Linux-Kernel: 4.4 - 4.6
Tastaturmodell: pc105
Tastaturlayout für zweistufigen Keybinding-Ansatz: US-dvorak international mit Deadkeys
Tastaturlayout für einstufigen Keybinding -Ansatz: Englisch (Dvorak) = US-dvorak , aber auch Englisch (Klassischer Dvorak)

Léo Léopold Hertz 준영
quelle
1
Drücken Sie ctrl+shift+udann eingeben e4und drücken Sie die Eingabetaste. Wenn dies funktioniert, können Sie weiter versuchen, einen einfachen Schlüssel dafür zu erhalten.
Severus Tux
Ich habe eine Antwort auf das geschrieben, was ich zuvor gesagt habe. Bitte hinterlassen Sie Kommentare, wenn Sie irgendwelche Zweifel haben
Severus Tux

Antworten:

8
  • Um ä einzugeben, ist Unicode U00E4

  • Für die Eingabe von Ä lautet der Unicode U00C4

Wenn Sie die Unicodes anderer Zeichen möchten, können Sie sie von erhalten gucharmap

Um es manuell einzugeben, drücken Sie ctrl+ shift+ uund anschließend 00e4 und drücken Sie Enter, dies sollte ä eingeben

Es gibt jedoch eine bessere Möglichkeit, dies mit Compose Keys zu tun .

Wenn Sie Ihren Right alt Schlüssel über die Befehlszeile als Erstellungsschlüssel festlegen möchten, führen Sie Folgendes aus:

gsettings set org.gnome.desktop.input-sources xkb-options "['compose:ralt']"

Wenn Sie es für die GUI einstellen möchten:

Aktivieren Sie die Compose-Taste, indem Sie zu Systemeinstellungen -> Tastatur -> Eingabe -> Rechts Alt gehen . (Sie können einen anderen Schlüssel wählen, wenn Sie möchten)

Geben Sie hier die Bildbeschreibung ein

Das ist alles !!

Gehen Sie jetzt zu Ihrem bevorzugten Texteditor und gehen Sie folgendermaßen vor:

Drücken und Loslassen , Right Altgefolgt von "gefolgt von a. jetzt solltest du ä sehen .

Das Gleiche gilt für Ä , Press und Release, Right Altgefolgt von "gefolgt vonA

HINWEIS: Möglicherweise müssen Sie Shift+ drücken ', um zu erhalten"

TRINKGELD:

Wenn Sie alle ähnlichen Verknüpfungen anzeigen möchten, sehen Sie sich diese Datei an: /usr/share/X11/locale/en_US.UTF-8/Compose

Severus Tux
quelle
@Masi Diese Datei ist nur eine Liste aller Compose-Schlüsselkombinationen. Nur extra Infos.
UniversallyUniqueID
@Masi Sie müssen diese Datei nicht bearbeiten oder durch etwas ersetzen sed, das sind zusätzliche Informationen, wie @BharadwajRaju sagte. Sie können sie einfach anzeigen, wenn Sie die Tastenkombination für ein anderes spezielles Symbol möchten. Das ist eine riesige Liste all dieser Abkürzungen
Severus Tux
1
@Masi also willst du nur den Compose Key über die Kommandozeile anstatt über die GUI setzen ??
Severus Tux
@Masi Antwort aktualisiert :-) Dafür brauchst du kein Skript. Nur ein einfacher Befehl reicht aus. hoffe, das ist was du wolltest
Severus Tux
Was hast du benutzt, um dieses tolle GIF zu machen? Nette Geste.
Bhikkhu Subhuti
7

Englisch (Dvorak, international mit toten Schlüsseln) - dvorak-intl funktioniert gut!

Ich kann Typ Ämit ShiftAltGrqmit Standard - Setup. Siehe Datei, /usr/share/X11/xkb/symbols/usin der der qSchlüssel als deklariert ist

key <AB02> { [ q, Q, adiaeresis, Adiaeresis ] };

und mit level3(ralt_switch)unten zu verwenden Right Alt/ AltGrals 3. Ebene verschieben, so dass

  • 1. Spalte qq
  • 2. Spalte QShiftq
  • 3. Spalte äAltGrq
  • 4. Spalte ÄShiftAltGrq

Visualisierung

X11 XKB-Layoutebenen

  • dvorak-intl definiert nur 4 Ebenen, zeichne ich alle 8 Ebenen als XKB-Unterstützung, damit Sie einen allgemeinen Überblick erhalten.
  • Shiftist eine Standardverschiebung der Ebene 2, AltGrist die Standardverschiebung der Ebene 3 für die meisten Layouts, die die Ebenen 3 und 4 benötigen. Nur wenige Layouts definieren die Ebenen 5, 6, 7, 8 und daher die Umschalttaste der Ebene 5, die ich RCtrlnur zur Erklärung verwendet habe .
  • Alle 4 Zeilen, die den <AB02>Schlüssel definieren, sind äquivalent.

Einstellung ä& Äauf 3. und 4. aSchlüsselebene auf Englisch (Dvorak) - dvorakLayout

Plus ö& Öam oSchlüssel. (Es erscheint nicht im Screenshot, da es nach dem Screenshot hinzugefügt wurde.)

Genauso dvorak-intlkönnen wir das gleiche Setup für vornehmen dvorak.

  1. Löschen Sie frühere Änderungen

    sudo apt-get install --reinstall xkb-data
    gsettings set org.gnome.desktop.input-sources xkb-options "[]"
    
  2. Kontrollpunkt

    • Versuchen Sie Englisch (Dvorak, international mit toten Schlüsseln) - dvorak-intl

      AltGrqdruckt. äWenn es nicht funktioniert hat, wird es das gleiche Problem mit diesem Setup sein. Es gibt etwas, das verhindert, dass Right Alt als Level3-Shift funktioniert.

      Englisch (Dvorak, international mit toten Schlüsseln)

    • Überprüfen Sie die aktuelle Karte von dvorak

      Englisch (Dvorak)

    • Überprüfen Sie die rechte Alt-Zuordnung Alt_R

      $ xev -e keyboard
      [ignore start things; press AltGr]
      
      KeyPress event, serial 28, synthetic NO, window 0x3400001,
          root 0x281, subw 0x0, time 1855861, (769,284), root:(834,336),
          state 0x10, keycode 108 (keysym 0xffea, Alt_R), same_screen YES,
          XLookupString gives 0 bytes: 
          XmbLookupString gives 0 bytes: 
          XFilterEvent returns: False
      
      KeyRelease event, serial 28, synthetic NO, window 0x3400001,
          root 0x281, subw 0x0, time 1855965, (769,284), root:(834,336),
          state 0x18, keycode 108 (keysym 0xffea, Alt_R), same_screen YES,
          XLookupString gives 0 bytes: 
          XFilterEvent returns: False
      
  3. aKarte ändern

    $ sudo vim /usr/share/X11/xkb/symbols/us +224
    
    key <AD11> { [      slash,  question        ]       };
    key <AD12> { [      equal,  plus            ]       };
    
    key <AC01> { [          a,  A, adiaeresis, Adiaeresis ]       };
    key <AC02> { [          o,  O, odiaeresis, Odiaeresis ]       };
    key <AC03> { [          e,  E               ]       };
    
  4. Einstellen von Alt Alt als Level3-Verschiebung

    $ sudo vim /usr/share/X11/xkb/symbols/us +248
    
        key <AB09> { [          v,  V               ]       };
        key <AB10> { [          z,  Z               ]       };
    
        key <BKSL> { [  backslash,  bar             ]       };
    
        include "level3(ralt_switch)"
    };
    
    // Dvorak international with dead keys
    

    Es gibt viele Schlüssel, die als ISO_Level3_Shift verwendet werden können. Überprüfen Sie die verfügbaren Optionen

    $ more /usr/share/X11/xkb/rules/xorg.lst | grep lv3:
      lv3:switch           Right Ctrl
      lv3:menu_switch      Menu
      lv3:win_switch       Any Win key
      lv3:lwin_switch      Left Win
      lv3:rwin_switch      Right Win
      lv3:alt_switch       Any Alt key
      lv3:lalt_switch      Left Alt
      lv3:ralt_switch      Right Alt
      lv3:ralt_switch_multikey Right Alt, Shift+Right Alt key is Compose
      lv3:ralt_alt         Right Alt key never chooses 3rd level
      lv3:enter_switch     Enter on keypad
      lv3:caps_switch      Caps Lock
      lv3:bksl_switch      Backslash
      lv3:lsgt_switch      &lt;Less/Greater&gt;
      lv3:caps_switch_latch Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser
      lv3:bksl_switch_latch Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser
      lv3:lsgt_switch_latch &lt;Less/Greater&gt; chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser
    

    Wenn Sie beispielsweise die Feststelltaste als Level3-Verschiebung verwenden möchten, geben Sie include "level3(caps_switch)"statt ein include "level3(ralt_switch)".

  5. Erzwingen Sie das Neuladen von Layouts

    sudo dpkg-reconfigure xkb-data
    

    Wechseln Sie zu einem anderen Layout und dann zurück.

  6. Kontrollpunkt

    • Überprüfen Sie die aktuelle Karte von dvorak

      Englisch (Dvorak)

    • Überprüfen Sie die rechte Alt-Zuordnung. Es sollte seinISO_Level3_Shift

      $ xev -e keyboard
      
      KeyPress event, serial 35, synthetic NO, window 0x3600001,
          root 0x281, subw 0x0, time 4755266, (154,154), root:(219,206),
          state 0x0, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
          XKeysymToKeycode returns keycode: 92
          XLookupString gives 0 bytes: 
          XmbLookupString gives 0 bytes: 
          XFilterEvent returns: False
      
      KeyRelease event, serial 35, synthetic NO, window 0x3600001,
          root 0x281, subw 0x0, time 4755435, (154,154), root:(219,206),
          state 0x80, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
          XKeysymToKeycode returns keycode: 92
          XLookupString gives 0 bytes: 
          XFilterEvent returns: False
      

Jetzt sollte es funktionieren!


Einzeiliger Befehl

cd /; \
echo -e "--- /usr/share/X11/xkb/symbols/us\t2016-01-22 09:38:25.000000000 +0100\n+++ /usr/share/X11/xkb/symbols/us\t2016-06-17 15:43:07.656076074 +0100\n@@ -221,8 +221,8 @@\n     key <AD11> { [\tslash,\tquestion\t]\t};\n     key <AD12> { [\tequal,\tplus\t\t]\t};\n \n-    key <AC01> { [\t    a,\tA \t\t]\t};\n-    key <AC02> { [\t    o,\tO\t\t]\t};\n+    key <AC01> { [\t    a,\tA, adiaeresis, Adiaeresis ]\t};\n+    key <AC02> { [\t    o,\tO, odiaeresis, Odiaeresis ]\t};\n     key <AC03> { [\t    e,\tE\t\t]\t};\n     key <AC04> { [\t    u,\tU\t\t]\t};\n     key <AC05> { [\t    i,\tI\t\t]\t};\n@@ -245,6 +245,8 @@\n     key <AB10> { [\t    z,\tZ\t\t]\t};\n \n     key <BKSL> { [  backslash,  bar             ]       };\n+\n+    include \"level3(ralt_switch)\"\n };\n \n // Dvorak international with dead keys\n" \
| sudo patch -p1; \
sudo dpkg-reconfigure xkb-data; \
cl=$(gsettings get org.gnome.desktop.input-sources current); \
gsettings set org.gnome.desktop.input-sources current 0; \
gsettings set org.gnome.desktop.input-sources current 1; \
gsettings set org.gnome.desktop.input-sources current "$cl"
user.dz
quelle
2
Kommentare sind nicht für eine ausführliche Diskussion gedacht. Dieses Gespräch wurde in den Chat verschoben .
Mitch
1
Ich habe festgestellt, dass der manuelle Wechsel der Tastatur nicht immer funktioniert. Die Änderung ist erst gültig, wenn Sie sich abmelden. Ich denke hier eine Lösung unix.stackexchange.com/questions/290449/…
Léo Léopold Hertz 준영
Ich habe einen Fehler gefunden, den ich nicht verstehe. Diese Zeile sudo sed -i "${pos[1]}i\ include 'level3(ralt_switch)'" /usr/share/X11/xkb/symbols/usmacht die Tastatur beim Start unbrauchbar. Sie können keine Taste in die Tastatur eingeben. Es fügt nur Level3 am Ende der Dvorak-Umgebung in der Zeile 249 hinzu. Ist die Position der Zeile 249 korrekt?
Léo Léopold Hertz 준영
@Masi, yep aber es sollte in 248 nicht 249 sein! und sicher hast du vorher ${pos[1]} definiert.
user.dz
Ich habe hier einen neuen Thread über den Fall unix.stackexchange.com/q/346073/16920 geöffnet, weil ich solche Funktionen im Betriebssystem wirklich stabiler brauche.
Léo Léopold Hertz 19