跳转至

安装 hxp-dvorak 键盘布局

文档时效性说明

本文为早期笔记,可能存在版本过时、命令失效、链接失效、最佳实践变化等问题。请以官方最新文档为准。

原英文标题:Install hxp-dvorak keyboard layout

1. 步骤 0:在 GNOME 中更改键盘布局

进入 GNOME Settings -> Region & Language -> Add an Input Source -> English(United States) -> English(programmer Dvorak) 进入 gnome tweak tools -> Keyboard & Mouse -> Additional Layout Options -> Layout of numernic keyboard -> Phone and ATM Style

2. 步骤 1:备份键位映射

1
2
3
xmodmap -pm | tail -n 9 | grep -v '^$' | sed 's/  */ = /' | sed 's/^/clear /' | sed 's/ = [[:print:]]*//' > .Xmodmap_origin
xmodmap -pke >> .Xmodmap_origin
xmodmap -pm | tail -n 9 | grep -v '^$' | sed 's/  */ = /' | sed 's/^/add /' | sed 's/([[:alnum:]]*)//g' | sed 's/ , / /g' >> .Xmodmap_origin

3. 步骤 2:生成你自己的 Xmodmap

xmodmap -pm | tail -n 9 | grep -v '^$' | sed 's/  */ = /' | sed 's/^/clear /' | sed 's/ = [[:print:]]*//' > .Xmodmap

4. 步骤 3:检测键码

xev

例如,当我按下 CapsLock 时,它打印:

1
2
3
4
5
KeyRelease event, serial 37, synthetic NO, window 0x2200001,
    root 0x969, subw 0x0, time 1201498, (90,63), root:(140,177),
    state 0x2, keycode 66 (keysym 0xffe5, Caps_Lock), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

当我按下 space 时,它打印:

1
2
3
4
5
6
KeyPress event, serial 37, synthetic NO, window 0x2200001,
    root 0x969, subw 0x0, time 1322983, (162,-19), root:(212,95),
    state 0x0, keycode 65 (keysym 0x20, space), same_screen YES,
    XLookupString gives 1 bytes: (20) " "
    XmbLookupString gives 1 bytes: (20) " "
    XFilterEvent returns: False

我运行了

grep 'space' .Xmodmap_origin

它打印了

keycode  65 = space NoSymbol space

然后我写入了

keycode 66 = space NoSymbol space

以将 CapsLock 改为 space

5. 步骤 4:修改修饰键

tail -n8 .Xmodmap_origin  >> .Xmodmap

删除

add mod3 =

然后通过以下命令应用更改

xmodmap .Xmodmap

6. 原文(English)

7. Step 0: Change keyboard layout in GNOME

Go to GNOME Settings -> Region & Language -> Add an Input Source -> English(United States) -> English(programmer Dvorak) Go to gnome tweak tools -> Keyboard & Mouse -> Additional Layout Options -> Layout of numernic keyboard -> Phone and ATM Style

8. Step 1: Backup keymap

1
2
3
xmodmap -pm | tail -n 9 | grep -v '^$' | sed 's/  */ = /' | sed 's/^/clear /' | sed 's/ = [[:print:]]*//' > .Xmodmap_origin
xmodmap -pke >> .Xmodmap_origin
xmodmap -pm | tail -n 9 | grep -v '^$' | sed 's/  */ = /' | sed 's/^/add /' | sed 's/([[:alnum:]]*)//g' | sed 's/ , / /g' >> .Xmodmap_origin

9. Step 2: Generate your own Xmodmap

xmodmap -pm | tail -n 9 | grep -v '^$' | sed 's/  */ = /' | sed 's/^/clear /' | sed 's/ = [[:print:]]*//' > .Xmodmap

10. Step 3: Detecting keycode

xev

For example, when I pressed CapsLock , it prints

1
2
3
4
5
KeyRelease event, serial 37, synthetic NO, window 0x2200001,
    root 0x969, subw 0x0, time 1201498, (90,63), root:(140,177),
    state 0x2, keycode 66 (keysym 0xffe5, Caps_Lock), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

when I pressed space, it prints

1
2
3
4
5
6
KeyPress event, serial 37, synthetic NO, window 0x2200001,
    root 0x969, subw 0x0, time 1322983, (162,-19), root:(212,95),
    state 0x0, keycode 65 (keysym 0x20, space), same_screen YES,
    XLookupString gives 1 bytes: (20) " "
    XmbLookupString gives 1 bytes: (20) " "
    XFilterEvent returns: False

I ran

grep 'space' .Xmodmap_origin

It printed

keycode  65 = space NoSymbol space

And I wrote

keycode 66 = space NoSymbol space

To change CapsLock to space

11. Step 4: Modify modifiers

tail -n8 .Xmodmap_origin  >> .Xmodmap

delete

add mod3 =

and apply changes by

xmodmap .Xmodmap