Làm thế nào để có được A với Dots trong Dvorak của Ubuntu 16.04?


8

Tôi muốn nhập A bằng dấu chấm ( Ä/ ä) làm liên kết phím một cấp trong bàn phím Macbook Air 2013-giữa của Ubuntu 16.04, đầu ra củasetxkbmap -query

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

Theo mặc định, không có AltGrtrong bàn phím, chỉ có hai Alts. Lệnh này làm cho alt bên phải của bạn là phím soạn thảo ( AltGr) nhưng vẫn duy trì cấu hình bàn phím tùy chỉnh của riêng bạn, v.v. có Capslock là CTRL caps:ctrl_modifier, xem tại đây

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

Sẽ thật tuyệt vời khi có xmodmapgiải pháp độc lập nếu điều này sẽ được thay đổi bởi vì nó sẽ bị khấu hao.

Cách tiếp cận keybinding hai cấp

Chúng tôi chỉ có thể thực hiện phương pháp liên kết phím hai cấp với Dvorak International với các phím tắt.

  • Câu trả lời của SeverusTux là lệnh hai cấp là AltGr- Shift- Q+ A, chỉ hoạt động trong us-drovak, international with deadkeys.
  • SeverusTux. Ctrl+ Shift+ u+ e4+ Enterhoạt động và cung cấp cho bạn ä. Làm thế nào bạn có thể ánh xạ điều này đến một liên kết phím một cấp Alt- a?

Tôi làm ở nơi bạn thấy rằng GUI tạo ra sự thay đổi ở nơi khác. Tôi thực sự muốn biết nơi

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 ]

Điều này cho thấy xserver không cập nhật nhanh. Bạn phải thay đổi bàn phím của bạn sang một thứ khác và quay lại, để thay đổi.

Phương pháp liên kết khóa một cấp

Tôi muốn chỉ huy một cấp như AltGr- Acho äAltGr- Shift- Acho Ätrong English (US-Dvorak). Tôi làm xev -e keyboard và nhấnAltGr

[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

Bạn có thể nhận được tất cả các công tắc có thể bằng more /usr/share/X11/xkb/rules/xorg.lst | grep lv3nhưng chúng tôi chỉ quan tâm đếnlv3: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

Bố trí bàn phím của tôi đã được kiểm tra nhưng tiếng Anh chính (US-dvorak)

nhập mô tả hình ảnh ở đây

Giải pháp cuối cùng [Sneetsher]

Tôi đặt A bằng dấu chấm bằng tiếng Anh (dvorak) bởi AltGr- a. Hợp nhất các thay đổi trong /usr/share/X11/xkb/symbols/us; bây giờ là tiếng Đức-Dvorak vì nó cũng hoạt động rất tốt cho các ngôn ngữ Scandinavia (từ đây )

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

Hoặc sử dụng tập lệnh vẫn còn lỗi

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

Lỗi

  1. Sự cố TODO với việc tải lại bàn phím trở lại xserver https://unix.stackexchange.com/q/290449/16920 Thay đổi thủ công không hoạt động luôn.
  2. Biến chứng: Xserver không tải các khóa đó nhanh và thậm chí không trong mọi trường hợp sau khi khởi động lại / đăng xuất.

Hệ thống: Ubuntu 16.04
Linux kernel: 4.4 - 4.6 Kiểu bàn phím
: pc105
Bố cục bàn phím cho cách tiếp cận gõ phím hai cấp: US-dvorak quốc tế với deadkey
Bố trí bàn phím cho cách tiếp cận gõ phím một cấp: Tiếng Anh (Dvorak) = US-dvorak , nhưng cũng bằng tiếng Anh (Cổ điển Dvorak)


1
Nhấn ctrl+shift+urồi gõ e4và nhấn enter. Nếu điều này hoạt động thì bạn có thể thử thêm để có được một chìa khóa đơn giản cho điều đó.
Severus Tux

Tôi đã viết một câu trả lời cho những gì tôi đã nói trước đó, xin vui lòng để lại nhận xét nếu bạn có bất kỳ nghi ngờ nào
Severus Tux

Câu trả lời:


8
  • Để gõ ä, unicode là U00E4

  • Để gõ, unicode là U00C4

Nếu bạn muốn unicodes của các nhân vật khác, bạn có thể lấy chúng từ gucharmap

Để nhập thủ công, nhấn ctrl+ shift+ uvà theo sau là 00e4 và nhấn Enter, điều này nên gõ ä

Nhưng có một cách tốt hơn để làm điều này bằng cách sử dụng Phím soạn .

Nếu bạn muốn đặt Right alt khóa làm khóa soạn thảo bằng dòng lệnh: chỉ cần thực hiện điều này:

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

Nếu bạn muốn thiết lập nó kiện GUI:

Bật khóa soạn thảo bằng cách đi tới Cài đặt hệ thống -> Bàn phím -> Nhập -> Phải Alt . (bạn có thể chọn một khóa khác nếu bạn muốn)

nhập mô tả hình ảnh ở đây

Đó là tất cả !!

Bây giờ đi đến trình soạn thảo văn bản yêu thích của bạn và làm điều này:

Nhấn và phát hành Right Alttheo "sau bởi a. bây giờ bạn sẽ thấy ä .

Điều tương tự cũng có thể được thực hiện cho Ä , Báo chí và phát hành Right Alttiếp theo "tiếp theoA

LƯU Ý: bạn có thể cần nhấn Shift+ 'để nhận"

TIỀN BOA:

Nếu bạn muốn xem tất cả các phím tắt tương tự, hãy xem tệp này: /usr/share/X11/locale/en_US.UTF-8/Compose


@Masi Tập tin đó chỉ là một danh sách của tất cả các combo chính. Chỉ cần thêm thông tin.
Đại

@Masi bạn không phải chỉnh sửa tệp đó hoặc thay thế bất cứ thứ gì bằng sed, đó là thông tin bổ sung như @BharadwajRaju nói, bạn có thể chỉ cần xem nó nếu bạn muốn phím tắt cho một số biểu tượng đặc biệt khác. Đó là một danh sách khổng lồ gồm tất cả các phím tắt như vậy
Severus Tux

1
@Masi vì vậy bạn chỉ muốn đặt khóa soạn bằng dòng lệnh thay vì sử dụng GUI ??
Severus Thục

@Masi Trả lời được cập nhật :-) bạn không cần bất kỳ tập lệnh nào để làm điều đó. chỉ cần một lệnh đơn giản sẽ làm được mẹo. hy vọng đây là những gì bạn muốn
Severus Tux

Bạn đã sử dụng những gì để làm cho gif tuyệt vời đó? Liên lạc tốt đẹp.
Tỳ kheo Subhuti

7

Tiếng Anh (Dvorak, quốc tế với các phím chết) - dvorak-intl hoạt động tốt!

Tôi có thể gõ Äbằng cách sử dụng ShiftAltGrqvới thiết lập mặc định. Xem tệp /usr/share/X11/xkb/symbols/usnơi qkhóa được khai báo là

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

và với level3(ralt_switch)ở dưới cùng để sử dụng Right Alt/ AltGrnhư thay đổi cấp độ 3 sao cho

  • Cột 1 qq
  • Cột 2 QShiftq
  • Cột thứ 3 äAltGrq
  • Cột thứ 4 ÄShiftAltGrq

Hình dung

Các cấp độ bố trí X11 XKB

  • dvorak-intl chỉ xác định 4 cấp độ, tôi vẽ tất cả 8 cấp độ như XKB hỗ trợ để bạn có thể có được tổng quan chung.
  • Shiftlà một sự thay đổi level2 tiêu chuẩn, AltGrlà sự thay đổi level3 mặc định cho hầu hết các bố cục cần level3 & 4. Chỉ có một vài bố cục xác định các mức5,6,7,8 và do đó, phím shift level5, tôi RCtrlchỉ sử dụng để giải thích.
  • Tất cả 4 dòng xác định <AB02>khóa là tương đương.

Cài đặt ä& Äở cấp độ thứ 3 & 4 của akhóa tiếng Anh (Dvorak) - dvorakbố cục

Cộng öÖtại ophím. (Nó không xuất hiện trong ảnh chụp màn hình, vì nó đã được thêm vào sau khi chụp màn hình)

Tương tự như dvorak-intl, chúng ta có thể thiết lập tương tự cho dvorak.

  1. Xóa các sửa đổi trước đó

    sudo apt-get install --reinstall xkb-data
    gsettings set org.gnome.desktop.input-sources xkb-options "[]"
    
  2. Điểm kiểm tra

    • Hãy thử tiếng Anh (Dvorak, quốc tế với các phím chết) - dvorak-intl

      AltGrqin ä. Nếu nó không hoạt động thì nó sẽ là vấn đề tương tự với thiết lập này. Có một cái gì đó ngăn Right Alt hoạt động như sự thay đổi level3.

      Tiếng Anh (Dvorak, quốc tế với các phím chết)

    • Xác nhận bản đồ hiện tại của dvorak

      Tiếng Anh (Dvorak)

    • Xác minh ánh xạ Alt phải, cần 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. Sửa đổi abản đồ

    $ 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. Đặt Alt phải làm thay đổi 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
    

    Có nhiều khóa có thể được sử dụng như ISO_Level3_Shift. Kiểm tra các tùy chọn có sẵn

    $ 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
    

    Ví dụ: nếu bạn muốn sử dụng Caps Lock làm thay đổi level3 thì hãy nhập include "level3(caps_switch)"thay vì include "level3(ralt_switch)".

  5. Buộc tải lại bố cục

    sudo dpkg-reconfigure xkb-data
    

    Thay đổi bố cục khác sau đó quay lại.

  6. Điểm kiểm tra

    • Xác nhận bản đồ hiện tại của dvorak

      Tiếng Anh (Dvorak)

    • Xác minh ánh xạ Alt phải. Nó nênISO_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
      

Bây giờ, nó nên hoạt động!


Lệnh một lớp lót

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
Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
Mitch

1
Tôi đã phát hiện ra rằng sự thay đổi thủ công của bàn phím không hoạt động luôn. Thay đổi không hợp lệ cho đến khi bạn đăng xuất. Tôi đang suy nghĩ một giải pháp ở đây unix.stackexchange.com/questions/290449/ Ấn
Léo Léopold Hertz

Tôi tìm thấy một lỗi mà tôi không hiểu. Dòng này sudo sed -i "${pos[1]}i\ include 'level3(ralt_switch)'" /usr/share/X11/xkb/symbols/uslàm cho bàn phím không thể sử dụng khi khởi động. Bạn không thể gõ bất kỳ phím nào trong bàn phím. Nó chỉ thêm level3 ở cuối môi trường Dvorak ở dòng 249. Dòng 249 có đúng vị trí không?
Léo Léopold Hertz

@Masi, vâng, nhưng nó phải ở trong số 248 chứ không phải là 249! và chắc chắn bạn đã ${pos[1]} xác định trước.
user.dz

Tôi đã mở một chủ đề mới về trường hợp ở đây unix.stackexchange.com/q 4326073/16920 bởi vì tôi thực sự cần các tính năng như vậy ổn định hơn trong HĐH.
Léo Léopold Hertz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.