从 xmodmap 创建 xkb 配置

从 xmodmap 创建 xkb 配置

我有一个xmodmap使用的自定义文件,包括有用的多语言变音符号、英文引号、破折号等。我想将此地图与 一起使用kmscon,因此我需要xkb从中创建一个配置。有没有一种自动化的方法来做到这一点?或者甚至是一个简单的手动过程,因为我不需要经常这样做?

答案1

制作自己的xkb配置文件

这个想法是“读取”当前的键盘配置(不调用xmodmap),并根据它编写您自己的符号文件。第一的:

xkbcomp -xkb $DISPLAY

这创建了server-0_0.xkb.在此文件中,采用以下块:

xkb_symbols "pc+inet(evdev)+compose(menu)+whatever(option)" {
    key <ESC> { [ Escape ] };
    ...
};

将第一行更改为:

default xkb_symbols "my_symbols" {
    include "pc+inet(evdev)"
    include "compose(menu)+whatever(option)"

(我认为您可以将选项分成任意数量的“包含”行)。更改要修改的键并在它们前面加上override

override key <AE10>  { [ 0, parenright, degree ]};

删除所有未更改的键。

系统范围内的安装

把这一切都放进去/usr/share/X11/xkb/symbols/my_terrific_kb。现在用户可以使用setxkbmap my_terrific_kb(in.xinitrc.xsessionrc) 加载它。也许您可以进行Option "XkbLayout" "my_terrific_kb"系统xorg.conf范围的更改。

单用户安装

把这一切都放进去~/anywhere/my_terrific_kb。使用 查找键盘的 XInput id xinput list。然后跑xkbcomp -i <XInput_id> ~/anywhere/my_terrific_kb $DISPLAY

答案2

生成的映射文件xkbcomp :0 custom-xkb-keymap由许多组件组成,您可以通过简单地交换参数来加载这些组件xkbcomp custom-xkb-keymap :0。它在这里显示了一些警告,但当我更改文件中的布局时,它似乎起作用了。

xkb 布局存储在symbols目录中,例如/usr/local/share/X11/xkb/symbols.该路径可能因系统而异。当您需要布局时,您需要剪出如下所示的部分:

xkb_symbols "id+id+id(pc104)" {
    name[group1]="..."
    .
    .
    .
};

并将其存储在symbols目录中。请确保您没有覆盖那里的任何文件!一旦它存储在那里(例如作为mylayout),您可以通过键入加载它setxkbmap mylayout。这与部分中的xorg.conf设置相对应(请参阅Option "XkbLayout" "mylayout"InputDevicekbd 的手册页了解更多详情)。

输出中的其他部分似乎xkcomp与其他目录中的文件相对应,因此如果某些部分不起作用,您可能必须将拆分custom-xkb-keymap为其组件并将其复制到下的正确目录中/usr/local/share/X11/xkb。但这是我从未做过的事情。

更好的布局

您还可以创建自己的文件,而不是使用看起来像反编译代码的原始转储,symbols这样更具可读性。我有自己的自定义布局,可能对大多数人来说无法使用,但您仍然可以看一下这个短文件我用于在德语键盘上编程(只是为了了解它是什么样子以及你可以用symbols文件做什么)。

答案3

我刚刚解决了这个问题。应用xmodmap配置后,我使用xkbcomp :0 custom-xkb-keymapdo 将当前xkb键盘映射(从 display :0)复制到名为 的文件中custom-xkb-keymap

答案4

该线程中也存在类似的问题:Xephyr:键盘映射无法正常工作 与提供的解决方案类似,您可以保存键盘设置

setxkbmap -display :0 -print > mykeymap

该文件可以由 xkbcomp 在其他系统上应用:

xkbcomp mykeymap :0

该命令可以在 gnome 或其他 DE 的自动启动中执行。我不知道是否所有手动更改都会被接管,但我认为值得一试。在不使用 xkbcomp 的情况下将这个文件放在哪里自动加载,我不知道。

相关内容