我在配备 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-method
和text-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 选项,但我不使用它,所以我不能给你确切的过程)。