无需root的自定义键盘布局

jpy*_*ams 7 not-root-user xkb keyboard-layout

在没有 root 访问权限的 X11 中设置自定义键盘布局的步骤是什么?我知道这是可能的,基于这个答案,但Error loading new keyboard description每当我尝试使用我的新布局时,我都会得到。

.config我创建了一个xkb目录如下:

xkb/
  rules/
    evdev-local
    evdev-local.lst
    evdev-local.xml
  symbols/
    my-us
Run Code Online (Sandbox Code Playgroud)

在我添加evdev-local.xml<layoutList>部分中

<layout>
  <configItem>
    <name>my-us</name>

    <shortDescription>my-us</shortDescription>
    <description>English (My US)</description>
    <languageList>
      <iso639Id>eng</iso639Id>
    </languageList>
  </configItem>
  <variantList>
    <variant>
      <configItem>
        <name>mdvp</name>
        <description>English (Modified Programmer Dvorak)</description>
      </configItem>
    </variant>
  </variantList>
</layout>
Run Code Online (Sandbox Code Playgroud)

symbols/my-us文件是

partial alphanumeric_keys
xkb_symbols "mdvp" {

    include "us(dvp)"
    name[Group1] = "English (Modified Programmer Dvorak)";

    //             Unmodified   Shift  AltGr        Shift+AltGr
    // upper row, left side
    key <AD01> { [ apostrophe,  quotedbl, dead_acute, dead_diaeresis    ] };

    // lower row, left side
    key <AB01> { [ semicolon,   colon, dead_ogonek, dead_doubleacute ] };

    include "level3(ralt_switch)"
};
Run Code Online (Sandbox Code Playgroud)

然后我跑

setxkbmap -I ~/.config/xkb/ -rules evdev-local -layout my-us

并得到

加载新键盘描述时出错

背景故事:我一直在使用 Programmer's Dvorak,我很喜欢它,但我想将分号和撇号切换回它们在 US Dvorak 上的位置,因为这更适合我的工作流程。

我在 SE 上看到了推荐的这个教程,它在我的机器上工作,但我需要能够使用 KDE 布局切换器小部件,以便当其他人需要在我的机器上工作时我可以切换回纯英语 QWERTY。

Gui*_*ern 1

由于某种原因,如果您-print将输出通过管道传输到xkbcomp

\n\n
setxkbmap \\\n    -I ~/.config/xkb/ \\\n    -rules evdev-local \\\n    -layout "my-us(mdvp)" \\\n    -print |\n    xkbcomp -I ~/.config/xkb/ - "$DISPLAY"\n
Run Code Online (Sandbox Code Playgroud)\n\n

我不认为\xe2\x80\x99t你的布局有什么问题。我尝试直接设置\n setxkbmap,但即使使用该-verbose选项,\n输出也没有帮助:

\n\n
Warning! Multiple definitions of rules file\n         Using command line, ignoring X server\nWarning! Multiple definitions of keyboard layout\n         Using command line, ignoring X server\nTrying to build keymap using the following components:\nkeycodes:   evdev+aliases(qwerty)\ntypes:      complete\ncompat:     complete\nsymbols:    pc+my-us(mdvp)+inet(evdev)+terminate(ctrl_alt_bksp)\ngeometry:   pc(pc104)\nError loading new keyboard description\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是默认的详细级别。但即使我将其设置为 10,\n这显然是最大级别,它也只会输出 \xe2\x80\x9clocale is C\xe2\x80\x9d \nas 并尝试查找规则文件,此外与上面的内容相同。\n它不会输出任何有关无法加载键盘的原因的更多信息\n描述。

\n\n

xkbcomp我更喜欢通过管道而不是仅仅使用的原因之一setxkbmap是因为前者似乎可以提供更好的错误消息。

\n