如何使用 Wayland 自定义键盘映射

如何使用 Wayland 自定义键盘映射

我在配备 UK/GB 键盘的 Macbook 上使用 Linux,并自定义键盘映射来解决 Apple 奇怪的键盘布局导致的一些问题。我经常xmodmap这样做。我想尝试 Wayland,但xmodmap不起作用。如何在 Wayland 中获得类似的结果?我使用的文件.Xmodmap包含以下内容:

keycode  12 = 3 numbersign 3 sterling sterling sterling threesuperior sterling
clear Control
clear Mod4
add Control = Control_L Super_R
add Mod4 = Super_L
keysym Caps_Lock = NoSymbol Caps_Lock

第 1 行:在英国键盘上Shift-3是 £,因此 # 通常在 附近有自己的键Return。但在 Mac 上,# 是通过Altgr-获得的3。作为一名程序员,我使用 # 的次数远多于 £,因此这一行将它们交换。选择美国布局也可以实现此目的,但在 Linux 中这样做还会交换一些其他常用的键,而在 OS X 中,这些其他键不受美国/英国的影响。

第2-5行:将右键Cmd设置为Right- Ctrl,因为该键盘没有物理右键Ctrl

第 6 行:CapsLock仅当您按下 时才起作用Shift。不是 Mac 特定的,这应该是所有操作系统和键盘的标准选项。

答案1

不幸的是修改了系统XKB数据库/usr/share/X11/xkb是唯一的方法;从你的其他问题看起来你已经让那部分工作了。

该限制主要是由于 Wayland 的不成熟和 XKB 的设计疏忽造成的。

  • setxkbmap和等工具xkbcomp提供了一个-I选项来添加用户定义的数据库进行搜索(例如~/.xkb~/.config/xkb,文件和子目录的布局类似于系统数据库)。这些工具与 X 服务器交互,因此它们可能有助于配置Xwayland兼容层以在 Wayland 下运行 X 应用程序。但他们目前不使用 Wayland 协议。

  • Wayland 协议仍处于成熟阶段。目前看来input-methodtext-input协议是最相关的,但两者都不稳定。两者都没有提及任何有关更改已定义的键盘映射的内容;这些细节留给合成器。

  • GNOME 和 KDE 都提供键盘处理设置守护进程,用于处理系统 XKB 选项,包括动态更改。据我所知,没有办法告诉用户自定义的情况。据我所知,Weston 和其他合成器在启动时依赖配置文件或环境变量来设置 XKB 选项,除了退出和重新启动之外,没有提供任何更改它们的方法。

  • 即使在 XKB 本身中,也没有完全支持这一点。您的自定义符号文件可以是include其他系统符号文件。但目前 XKB 规则文件没有include功能,因此即使您有一个可以与 Wayland 合成器对话并查找您的个人定制的工具,您也必须手动包含您想要使用的所有规则(即复制rules/evdev*从系统XKB并修改它)。libxkbcommon一个悬而未决的问题关于这个主题和相关错误

答案2

我一直在使用拦截工具对于 Linux 来说,这方面取得了成功,并且知道人们为他们的自定义映射生成其他插件也。CAP2ESC是我每天使用的第一个概念验证插件,并且可以在 X 和 Wayland 上运行。该工具的级​​别比通常的映射软件要低一些,但非常灵活,我的下一个插件计划是通用的和弦映射工具。

免责声明:我是作者。

答案3

除了最上面的答案https://unix.stackexchange.com/a/215062非常有帮助,但没有必要编辑系统 xkb 文件。

https://xkbcommon.org/doc/current/md_doc_user_configuration.html有用地说您可以将符号文件放入$XDG_CONFIG_HOME/xkb/symbols/<name>并自定义规则$XDG_CONFIG_HOME/xkb/rules/evdev

然后我可以轻松加载我的自定义符号文件。

作为一个完整的例子,我将 åäö 添加到 US dvorak:
$XDG_CONFIG_HOME/xkb/symbols/swedish_letters_on_dvorak

xkb_symbols "sweletters" {
    //å on alt+u (qwerty f)
    key <AC04> { [     u,   U, aring,       Aring           ]   };
    //ä on alt+e (qwerty d)
    key <AC03> { [     e,   E, adiaeresis,  Adiaeresis      ]   };
    //ö on alt+o (qwerty s)
    key <AC02> { [     o,   O, odiaeresis,  Odiaeresis      ]   };
    // make right alt altGr
    include "level3(ralt_switch)"
};

$XDG_CONFIG_HOME/xkb/rules/evdev

! option = symbols
  swedish_letters_on_dvorak:sweletters    = +swedish_letters_on_dvorak(sweletters)
! include %S/evdev

(以及在我的 sway 配置中)

input type:keyboard {
    xkb_layout "us"
    xkb_variant "dvorak"
    xkb_options "caps:escape,swedish_letters_on_dvorak:sweletters"
}

答案4

这个答案与 Quickotic 的答案具有相同的想法,但只是有一个更详细的示例:

Gnome Tweaks 有一个包含 20 或 30 种键盘调整的列表,您可以通过 xkb 进行这些调整。有时您可以默认找到您正在寻找的调整。就我而言,我想将打印屏幕键与菜单交换。

通过 xkb 修改 printscr 密钥的唯一选项是将其替换为 Win_R。古纳尔·哈尔马森在这个线程上建议我修改 xkb 的修改,以便 printscr/win_r 可以代替 printscr/menu 。我们一起制定了一个解决方案,我将在这里重新发送:

在终端中输入:

sudo su
nano /usr/share/X11/xkb/symbols/altwin

在文件的底部,您会发现:

// Win is mapped to the PrtSc key (and the usual Win key).
partial modifier_keys
xkb_symbols "prtsc_rwin" {
    replace key <PRSC> { [ Super_R, Super_R ] };
    modifier_map Mod4 { <PRSC>, <RWIN> };
};

删除此部分并将其替换为:

// Menu is mapped to the PrtSc key (and the usual Win key).
xkb_symbols "prtsc_rwin" {
     replace key <PRSC> { [ Menu, Menu ] };
     modifier_map Mod4 { <PRSC>, <MENU> };
};

要在nano中删除,请使用退格键(突出显示和删除不起作用)。要粘贴,请使用shift-ctrl-v。要退出并保存,请按 ctrl-x,选择“是”进行覆盖,然后按 Enter。

重启。在 Gnome/Ubuntu 中,转到 gnome-tweak-tools 在调整工具中,转到键盘和鼠标部分,按“其他布局选项”按钮并展开 Alt/Win 键行为。选择最底部的选项:Win 映射到 printscr(请记住,我们只是修改了此行为以交换 print 和 Menu,而不是 print 和 Win)。 (我确信有一种方法可以在 KDE 中打开 modded xkb 选项,但我不使用它,所以我不能给你确切的过程)。

相关内容