Bagaimana Cara Mendapatkan A dengan Dots di Dvorak pada Ubuntu 16.04?


8

Saya ingin mengetik A dengan titik ( Ä/ ä) sebagai penjilidan kunci satu tingkat di keyboard Macbook Air 2013-mid Ubuntu 16.04, keluaran darisetxkbmap -query

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

Secara default, tidak ada AltGrdi keyboard, hanya dua Alt. Perintah ini membuat alt kanan Anda sebagai tombol penulisan ( AltGr) tetapi mempertahankan konfigurasi keyboard kustom Anda sendiri dll. Memiliki Capslock sebagai CTRL oleh caps:ctrl_modifier, lihat di sini

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

Akan sangat bagus untuk memiliki xmodmapsolusi independen jika ini akan diubah karena akan didepresiasi.

Pendekatan pengikat kunci dua tingkat

Kami hanya dapat melakukan pendekatan pengikatan dua level dengan Dvorak International dengan deadkey.

  • Jawaban SeverusTux adalah perintah dua tingkat sebagai AltGr- Shift- Q+ A, yang hanya berfungsi di us-drovak, international with deadkeys.
  • SeverusTux. Ctrl+ Shift+ u+ e4+ Enterberfungsi dan memberi Anda ä. Bagaimana Anda bisa memetakan ini ke pengikat kunci satu tingkat Alt- a?

Saya lakukan di mana Anda melihat bahwa GUI melakukan perubahan di tempat lain. Saya benar-benar ingin tahu di mana

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 ]

Ini menunjukkan bahwa xserver tidak memperbarui dengan cepat. Anda harus mengubah keyboard Anda ke sesuatu yang lain dan kembali lagi, untuk perubahan itu.

Pendekatan Penjilidan Kunci Satu Tingkat

Saya ingin perintah satu tingkat sebagai AltGr- Auntuk ädan AltGr- Shift- Auntuk Ädalam bahasa Inggris (US-dvorak). Saya lakukan xev -e keyboard dan tekanAltGr

[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

Anda bisa mendapatkan semua sakelar yang memungkinkan dengan more /usr/share/X11/xkb/rules/xorg.lst | grep lv3tetapi kami hanya tertariklv3: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

Layout keyboard saya diuji tetapi bahasa Inggris utamanya (US-dvorak)

masukkan deskripsi gambar di sini

Solusi akhir [Sneetsher]

Saya menetapkan A dengan titik-titik dalam bahasa Inggris (dvorak) oleh AltGr- a. Gabungkan perubahan di /usr/share/X11/xkb/symbols/us; sekarang Jerman-Dvorak karena berfungsi sangat baik untuk bahasa Skandinavia juga (dari sini )

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

Atau gunakan skrip yang masih buggy

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

Bug

  1. Masalah TODO dengan memuat ulang keyboard kembali ke xserver https://unix.stackexchange.com/q/290449/16920 Perubahan manual tidak selalu berhasil.
  2. Komplikasi: Xserver tidak memuat kunci-kunci itu dengan cepat dan bahkan tidak dalam semua kasus setelah restart / logout.

Sistem: Ubuntu 16.04
Kernel Linux: 4.4 - 4.6
Model keyboard: pc105
Layout keyboard untuk pendekatan dua tingkat keybinding: US-dvorak international dengan deadkeys
Layout keyboard untuk pendekatan one-level keybinding: Bahasa Inggris (Dvorak) = US-dvorak , tetapi juga bahasa Inggris (Dvorak Klasik)


1
Tekan ctrl+shift+ulalu ketik e4dan tekan enter. Jika ini berhasil maka Anda dapat mencoba lebih lanjut untuk mendapatkan kunci sederhana untuk itu.
Severus Tux

Saya telah menulis jawaban untuk apa yang saya katakan sebelumnya, silakan tinggalkan komentar jika Anda ragu
Severus Tux

Jawaban:


8
  • Untuk mengetikkan ä, unicode adalah U00E4

  • Untuk mengetik Ä, unicode adalah U00C4

Jika Anda ingin unicodes karakter lain, Anda bisa mendapatkannya gucharmap

Untuk memasukkannya secara manual, tekan ctrl+ shift+ udan diikuti oleh 00e4 dan tekan Enter, ini harus ketik ä

Tetapi ada cara yang lebih baik untuk melakukan ini menggunakan Compose Keys .

Jika Anda ingin mengatur Anda Right alt sebagai kunci penulisan menggunakan baris perintah: jalankan saja ini:

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

Jika Anda ingin mengatur suing GUI:

Aktifkan kunci penulisan dengan masuk ke Pengaturan Sistem -> Keyboard -> Mengetik -> Alt Kanan . (Anda dapat memilih kunci yang berbeda jika diinginkan)

masukkan deskripsi gambar di sini

Itu saja !!

Sekarang buka editor teks favorit Anda dan lakukan ini:

Tekan dan lepaskan Right Altdiikuti dengan "diikuti oleh a. sekarang Anda akan melihat ä .

Hal yang sama dapat dilakukan untuk Ä , Tekan dan lepaskan Right Altdiikuti dengan "diikuti olehA

CATATAN: Anda mungkin perlu menekan Shift+ 'untuk mendapatkan"

TIP:

Jika Anda ingin melihat semua pintasan serupa, lihat file ini: /usr/share/X11/locale/en_US.UTF-8/Compose


@Masi File itu hanyalah daftar semua kombo kunci Tulis. Info tambahan.
UniversallyUniqueID

@Masi Anda tidak perlu mengedit file itu atau mengganti apa pun dengan sed, itu info tambahan seperti yang dikatakan @BharadwajRaju, Anda bisa melihatnya jika Anda ingin tombol pintas untuk beberapa simbol khusus lainnya. Itu adalah daftar besar semua pintasan seperti itu
Severus Tux

1
@Masi jadi Anda hanya ingin mengatur kunci penulisan menggunakan baris perintah daripada menggunakan GUI ??
Severus Tux

@Masi Jawaban diperbarui :-) Anda tidak perlu skrip untuk melakukan itu. hanya perintah sederhana yang akan melakukan trik. harap ini yang Anda inginkan
Severus Tux

Apa yang Anda gunakan untuk membuat gif yang luar biasa itu? Sentuhan yang bagus.
Bhikkhu Subhuti

7

Bahasa Inggris (Dvorak, internasional dengan kunci mati) - dvorak-intl berfungsi dengan baik!

Saya bisa mengetik Ämenggunakan ShiftAltGrqdengan pengaturan default. Lihat file di /usr/share/X11/xkb/symbols/usmana qkunci tersebut dinyatakan sebagai

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

dan dengan level3(ralt_switch)di bagian bawah untuk menggunakan Right Alt/ AltGrsebagai level 3 bergeser sedemikian rupa

  • Kolom 1 qq
  • 2 kolom QShiftq
  • Kolom ke-3 äAltGrq
  • Kolom 4 ÄShiftAltGrq

Visualisasi

Tingkat tata letak X11 XKB

  • dvorak-intl hanya mendefinisikan 4 level, saya menggambar semua 8 level sebagai XKB mendukung sehingga Anda bisa mendapatkan gambaran umum.
  • Shiftadalah pergeseran level2 standar, AltGradalah pergeseran level3 default untuk sebagian besar tata letak yang membutuhkan level3 & 4. Hanya sedikit tata letak yang mendefinisikan level5,6,7,8 dan tombol shift level5, saya gunakan RCtrlhanya untuk penjelasan.
  • Semua 4 baris yang mendefinisikan <AB02>kunci itu setara.

Pengaturan ä& Äpada tingkat 3 & 4 akunci pada Bahasa Inggris (Dvorak) - dvoraktata letak

Plus ö& Ödi okunci. (Itu tidak muncul di tangkapan layar, seperti yang ditambahkan setelah tangkapan layar)

Sama seperti dvorak-intl, kita dapat membuat pengaturan yang sama untuk dvorak.

  1. Hapus modifikasi sebelumnya

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

    • Coba bahasa Inggris (Dvorak, internasional dengan kunci mati) - dvorak-intl

      AltGrqmencetak ä. Jika tidak berhasil maka akan ada masalah yang sama dengan pengaturan ini. Ada sesuatu yang mencegah Right Alt bekerja sebagai pergeseran level3.

      Bahasa Inggris (Dvorak, internasional dengan kunci mati)

    • Verifikasi peta saat ini dvorak

      Inggris (Dvorak)

    • Verifikasi pemetaan Alt Kanan, seharusnya 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. Ubah apeta

    $ 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. Mengatur Alt Kanan sebagai pergeseran level3

    $ 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
    

    Ada banyak kunci yang dapat digunakan sebagai ISO_Level3_Shift. Periksa opsi yang tersedia

    $ 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
    

    Misalnya, jika Anda ingin menggunakan Caps Lock sebagai pergeseran level3, maka masukkan include "level3(caps_switch)"sebagai gantinya include "level3(ralt_switch)".

  5. Paksa ulang tata letak

    sudo dpkg-reconfigure xkb-data
    

    Ubah ke tata letak lain lalu kembali.

  6. Periksa titik

    • Verifikasi peta saat ini dvorak

      Inggris (Dvorak)

    • Verifikasi pemetaan Alt Kanan. HarusISO_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
      

Sekarang, itu seharusnya bekerja!


Perintah satu baris

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"

2
Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan .
Mitch

1
Saya telah menemukan bahwa perubahan manual pada keyboard tidak selalu berhasil. Perubahan tidak valid hingga Anda keluar. Saya sedang memikirkan solusi di sini unix.stackexchange.com/questions/290449/…
Léo Léopold Hertz 준영

Saya menemukan bug yang tidak saya mengerti. Baris ini sudo sed -i "${pos[1]}i\ include 'level3(ralt_switch)'" /usr/share/X11/xkb/symbols/usmembuat keyboard tidak dapat digunakan saat startup. Anda tidak dapat mengetik tombol apa pun di keyboard. Itu hanya menambahkan level3 pada lingkungan Dvorak akhir di garis 249. Apakah garis 249 posisi yang benar?
Léo Léopold Hertz 준영

@Masi, ya tapi itu harus dalam 248 bukan 249! dan yakin Anda telah ${pos[1]} mendefinisikan sebelumnya.
user.dz

Saya membuka utas baru tentang kasus ini di sini unix.stackexchange.com/q/346073/16920 karena saya benar-benar membutuhkan fitur seperti itu lebih stabil di OS.
Léo Léopold Hertz 준영
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.