Jak zdobyć A z kropkami w Dvorak z Ubuntu 16.04?

8

Chcę wpisać A z kropkami ( Ä/ ä) jako jednopoziomowe klawisze na klawiaturze Ubuntu 16.04 w Macbook Air 2013-mid, wyjściesetxkbmap -query

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

Domyślnie AltGrna klawiaturze nie ma , tylko dwa Alty. To polecenie sprawia, że ​​prawy alt jest klawiszem tworzenia ( AltGr), ale zachowuje własne niestandardowe konfiguracje klawiatury itp. Z Capslock jako CTRL caps:ctrl_modifier, patrz tutaj

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

Byłoby naprawdę wspaniale mieć xmodmapniezależne rozwiązanie, jeśli to się zmieni, ponieważ będzie amortyzowane.

Dwupoziomowe podejście do kluczowania

Możemy zastosować dwupoziomowe podejście do kluczowania z Dvorak International za pomocą deadkeys.

  • Odpowiedzią SeverusTux jest dwupoziomowe polecenie jako AltGr- Shift- Q+ A, które działa tylko w us-drovak, international with deadkeys.
  • SeverusTux. Ctrl+ Shift+ u+ e4+ Enterdziała i daje ci ä. Jak można odwzorować to do kombinacja klawiszy jednym poziomie Alt- a?

Robię tam, gdzie widzisz, że GUI wprowadza zmiany gdzie indziej. Naprawdę chcę wiedzieć, gdzie

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 ]

To pokazuje, że xserver nie aktualizuje się szybko. Musisz zmienić klawiaturę na coś innego i wrócić, aby zmienić.

Podejście do kluczowania na jednym poziomie

Chcę polecenia na jednym poziomie jako AltGr- Afor äi AltGr- Shift- Afor Äw języku angielskim (US-dvorak). Robię xev -e keyboard i naciskamAltGr

[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

Możesz uzyskać wszystkie możliwe przełączniki, more /usr/share/X11/xkb/rules/xorg.lst | grep lv3ale jesteśmy tylko zainteresowanilv3: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

Testowałem układ klawiatury, ale główny angielski (US-dvorak)

wprowadź opis zdjęcia tutaj

Ostateczne rozwiązanie [Sneetsher]

Ustawiam A z kropkami w języku angielskim (dvorak) przez AltGr- a. Scal zmiany w /usr/share/X11/xkb/symbols/us; teraz niemiecki-Dvorak, ponieważ działa bardzo dobrze również dla języków skandynawskich ( stąd )

// 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)"
};

Lub użyj skryptu, który jest jednak nadal wadliwy

# 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. 

Błędy

  1. Problem TODO z ponownym załadowaniem klawiatury z powrotem do serwera xserver https://unix.stackexchange.com/q/290449/16920 Zmiana ręczna nie zawsze działa.
  2. Komplikacje: Xserver nie ładuje tych kluczy szybko i nawet we wszystkich przypadkach po restarcie / wylogowaniu.

Systemy:
jądro Linux Ubuntu 16.04 : 4.4 - 4.6
Model klawiatury: pc105
Układ klawiatury dla dwupoziomowego podejścia do klawiszy: US-dvorak international z martwymi
klawiszami Układ klawiatury dla podejścia na jednym poziomie: angielski (Dvorak) = US-dvorak , ale także angielski (Classic Dvorak)

Léo Léopold Hertz 준영
źródło
1
Naciśnij, ctrl+shift+ua następnie wpisz e4i naciśnij enter. Jeśli to zadziała, możesz spróbować uzyskać prosty klucz.
Severus Tux,
Napisałem odpowiedź na to, co powiedziałem wcześniej, proszę zostawić komentarz, jeśli masz jakiekolwiek wątpliwości
Severus Tux,

Odpowiedzi:

8
  • Aby wpisać ä, unicode to U00E4

  • Aby wpisać Ę, unicode to U00C4

Jeśli chcesz Unicode innych postaci, możesz je zdobyć gucharmap

Aby wprowadzić go ręcznie, naciśnij ctrl+ shift+, ua następnie 00e4 i naciśnij Enter, należy wpisać ä

Ale jest lepszy sposób na zrobienie tego za pomocą klawiszy tworzenia wiadomości .

Jeśli chcesz ustawić swój Right alt klucz tworzenia za pomocą wiersza polecenia: po prostu wykonaj to:

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

Jeśli chcesz ustawić go jako GUI:

Włącz klawisz komponowania, przechodząc do Ustawienia systemowe -> Klawiatura -> Pisanie -> Prawa Alt . (jeśli chcesz, możesz wybrać inny klucz)

wprowadź opis zdjęcia tutaj

To wszystko !!

Teraz przejdź do swojego ulubionego edytora tekstu i zrób to:

Naciśnij i puść, Right Alta następnie, "a następnie a. teraz powinieneś zobaczyć ä .

To samo można zrobić dla Ę , naciśnij i zwolnij, Right Alta "następnieA

UWAGA: może być konieczne naciśnięcie Shift+, 'aby uzyskać"

WSKAZÓWKA:

Jeśli chcesz zobaczyć wszystkie podobne skróty, przejrzyj ten plik: /usr/share/X11/locale/en_US.UTF-8/Compose

Severus Tux
źródło
@Masi Ten plik to tylko lista wszystkich kombinacji klawiszy tworzenia wiadomości. Tylko dodatkowe informacje.
UniversallyUniqueID
@Masi nie musisz edytować tego pliku ani niczego zamieniać sed, to dodatkowe informacje, jak powiedział @BharadwajRaju, możesz go po prostu wyświetlić, jeśli chcesz klawisz skrótu do jakiegoś innego specjalnego symbolu. To ogromna lista wszystkich takich skrótów
Severus Tux
1
@Masi, więc po prostu chcesz ustawić klucz tworzenia za pomocą wiersza poleceń zamiast GUI?
Severus Tux,
@Masi Odpowiedź zaktualizowana :-) nie potrzebujesz do tego żadnego skryptu. wystarczy proste polecenie. mam nadzieję, że tego właśnie chciałeś
Severus Tux,
Czego użyłeś, aby stworzyć ten niesamowity gif? Miły dotyk.
Bhikkhu Subhuti
7

Angielski (Dvorak, międzynarodowy z martwymi kluczami) - dvorak-intl działa dobrze!

Mogę pisać Äza ShiftAltGrqpomocą domyślnej konfiguracji. Zobacz plik, w /usr/share/X11/xkb/symbols/usktórym qklucz został zadeklarowany jako

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

i level3(ralt_switch)na dole, aby użyć Right Alt/ AltGrjako przesunięcie 3. poziomu, takie jak

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

Wyobrażanie sobie

Poziomy układu X11 XKB

  • dvorak-intl definiuje tylko 4 poziomy, rysuję wszystkie 8 poziomów jako XKB, abyś mógł uzyskać ogólny przegląd.
  • Shiftjest standardowym przesunięciem poziomu 2, AltGrjest domyślnym przesunięciem poziomu 3 dla większości układów wymagających poziomu 3 i 4. Tylko nieliczne układy definiują poziomy5,6,7,8, a więc klawisz Shift poziomu 5 użyłem RCtrltylko dla wyjaśnienia.
  • Wszystkie te 4 linie, które definiują <AB02>klucz, są równoważne.

Ustawienie äi Äna 3 i 4 poziomie aklucza w języku angielskim (Dvorak) - dvorakukład

Plus öi Öna oklucz. (Nie pojawia się w zrzucie ekranu, ponieważ został dodany po zrzucie ekranu)

To samo dvorak-intl, co możemy zrobić dla tej samej konfiguracji dvorak.

  1. Wyczyść poprzednie modyfikacje

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

    • Wypróbuj angielski (Dvorak, międzynarodowy z martwymi klawiszami) - dvorak-intl

      AltGrqdrukuje. äJeśli to nie zadziała, będzie to ten sam problem z tą konfiguracją. Jest coś, co uniemożliwia Right Alt działanie jako przesunięcie poziomu 3.

      Angielski (Dvorak, międzynarodowy z martwymi kluczami)

    • Sprawdź aktualną mapę dvorak

      Angielski (Dvorak)

    • Zweryfikuj mapowanie Right Alt, powinno być 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. Zmodyfikuj amapę

    $ 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. Ustawienie Right Alt jako przesunięcie poziomu 3

    $ 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
    

    Istnieje wiele kluczy, których można użyć jako ISO_Level3_Shift. Sprawdź dostępne opcje

    $ 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
    

    Na przykład, jeśli chcesz użyć Caps Lock jako zmiany poziomu 3, wpisz include "level3(caps_switch)"zamiast include "level3(ralt_switch)".

  5. Wymuś przeładowanie układów

    sudo dpkg-reconfigure xkb-data
    

    Zmień na inny układ, a następnie z powrotem.

  6. Sprawdź punkt

    • Sprawdź aktualną mapę dvorak

      Angielski (Dvorak)

    • Zweryfikuj mapowanie w prawo Alt. Powinno byćISO_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
      

Teraz powinno działać!


Polecenie jednowierszowe

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
źródło
2
Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu .
Mitch
1
Przekonałem się, że ręczna zmiana klawiatury nie zawsze działa. Zmiana nie jest ważna, dopóki się nie wylogujesz. Myślę tutaj o rozwiązaniu unix.stackexchange.com/questions/290449/…
Léo Léopold Hertz
Znalazłem błąd, którego nie rozumiem. Ta linia sudo sed -i "${pos[1]}i\ include 'level3(ralt_switch)'" /usr/share/X11/xkb/symbols/usuniemożliwia korzystanie z klawiatury podczas uruchamiania. Nie można wpisać żadnego klawisza na klawiaturze. Po prostu dodaje poziom 3 na końcu środowiska Dvorak w linii 249. Czy linia 249 ma prawidłową pozycję?
Léo Léopold Hertz
@Masi, tak, ale powinno być w 248, a nie 249! i pewnie już to ${pos[1]} zdefiniowałeś.
user.dz
Otworzyłem nowy wątek na temat tutaj unix.stackexchange.com/q/346073/16920, ponieważ naprawdę potrzebuję takich funkcji bardziej stabilnie w systemie operacyjnym.
Léo Léopold Hertz