![在 Wayland 下将组合键重新映射到另一个组合,例如 AltGr+C -> Ctrl+C](https://linux22.com/image/1183539/%E5%9C%A8%20Wayland%20%E4%B8%8B%E5%B0%86%E7%BB%84%E5%90%88%E9%94%AE%E9%87%8D%E6%96%B0%E6%98%A0%E5%B0%84%E5%88%B0%E5%8F%A6%E4%B8%80%E4%B8%AA%E7%BB%84%E5%90%88%EF%BC%8C%E4%BE%8B%E5%A6%82%20AltGr%2BC%20-%3E%20Ctrl%2BC.png)
总结
在 Wayland 下,我可以以某种方式绑定AltGr + C
到吗Ctrl + C
?
细节
我主要想问这个问题,但对于 Wayland 上的 GNOME. 这意味着涉及自动键和绑定键不起作用,因为它们在 Wayland 下都不起作用。
背景
我想重新映射一些键以便最终更好地利用CapsLock
。
我的计划是映射CapsLock
到AltGr
,然后跟随这获得类似 vim 的键绑定。在 Wayland 上,可以通过 XKB 文件进行重新映射(参见链接)。
但是,我还想使用CapsLock
它进行复制/粘贴。目前,我已将其映射到Ctrl
(使用 XKB 文件)。这使得CapsLock + C
整个系统都能顺利运行,我想保留这一点。
因此: 通过CapsLock
将 映射到AltGr
,我想Capslock (= AltGr) + C
充当Ctrl + C
。
我的问题
在 Wayland 下,我可以以某种方式绑定AltGr + C
到吗Ctrl + C
?
(不要仅仅重新绑定AltGr
到Ctrl
,因为那样会失去目的)
Q 的另一个示例
在 latin 的 XKB 文件中,为我的密钥/usr/share/X11/xkb/symbols/latin
定义了以下行为:Q
key <AD01> { [ q, Q, at, Greek_OMEGA ] };
这表明密钥有四种可能的输出:
- 单独按下它会产生
q
。 - 按下后
Shift
,它会产生Q
。 - 按下后
AltGr
,它会产生@
。 - 按下后
AltGr + Shift
,它会产生Ω
。
本质上我想要实现的是,当Q
按下时AltGr
,它不会产生@
而是Ctrl + Q
。
答案1
有几种工具可以做到这一点,例如柯莫纳德,拦截工具, 和密钥。
我在 Wayland 下取得了巨大的成功keyd
,所以我描述了我是如何做到的。我建议阅读简短的自述文件寻找灵感。守护进程可以做的事情比这里所用的要多得多。
当前解决方案满足了我的要求,但使用AltGr
绕行方式绕过。它在其他所有地方都将其视为CapsLock
,Control
但在 中除外h ,j ,k , l
,它将 更改为箭头键。
1. 安装
我keyd
从源代码构建,因为那很容易。接下来的几行首先安装依赖项(包括 C 编译器),下载源代码,构建并安装它,并将其启用为服务,然后在启动时启动并运行它。
完成后,它会告诉您安装的位置,以便您可以删除它以进行卸载。安装后,您可以删除源代码。
sudo apt install cmake libudev-dev
git clone https://github.com/rvaiya/keyd
cd keyd
make && sudo make install
sudo systemctl enable keyd && sudo systemctl start keyd
2. 找到您要重新映射的键盘的名称
您可以跳过此步骤并重新映射默认键盘,请参阅下文default.conf
你应该找到你的键盘的名称,这样我们就可以为此重新映射。运行
sudo keyd -m
并按下一些键。它会显示键盘的名称和按下的键。记下名称。我的是AT Translated Set 2 keyboard
。
提示:keyd -m
按下按键可以找到按键名称。keyd -l
列出您可以映射的按键名称。
3. 制作配置文件
无论在哪里,创建一个名为 whatever 的配置文件。我们稍后会移动它。假设您使用~/my_keyboard.conf
。
在其中输入以下内容。带 # 的是注释,用于解释所定义的行为:
[ids]
# The keyboards remapped. * for all, else explicit IDs.
*
[main]
### MAIN LAYER
# Make capslock activate the second layer:
capslock = layer(movement_layer)
### SECOND LAYER (called "movement_layer")
# Define the new layer, which while active
# by default treats every key as if Control was pressed,
# (":C" means the layer should inherit the Control layer),
# and overrides this default for only h, j, k and l, which
# are mapped to directions.
[movement_layer:C]
h = left
j = down
k = up
l = right
# In sum, in the main default layer, everything is standard, except
# when CapsLock is pressed, then the second layer is activated.
# When the second layer is activate, everything but h, j, k, l
# acts as if Control is held---e.g., c copies and v pastes,
# which we want, as we are holding down CapsLock.)
4.复制并重命名配置文件并重新启动KEYD
接下来,我们将配置复制到正确的位置并正确命名,即根据我们想要重新映射的键盘。
sudo cp ~/my_keyboard.conf /etc/keyd/AT\ Translated\ Set\ 2\ keyboard.conf
注释default.conf
和键盘 ID
您还可以将配置文件复制到,/etc/keyd/default.conf
使其适用于所有键盘。但是,如果您搞砸了并重新映射了 Enter 键,则无法插入另一个键盘来撤消更改……但是,您可以将*
下面的(表示“全部”)替换[ids]
为要应用重新映射的键盘的 ID。从keyd -m
,记下<vendor id>:<product id>
键盘的 。我的是。用您的0002:000a
替换。*
0002:000a
然后我们重新启动keyd
以便加载新的配置:
sudo systemctl restart keyd
您现在已启动并运行:)
5. 创建别名来复制配置并重新启动 KEYD
我最终花了很多时间研究配置文件。我在主文件夹的子目录中编辑了它们,然后将它们复制过来并重新启动 keyd。
为了减少麻烦,~/.bash_aliases
我在 中添加了
alias rekeyd='sudo cp ~/my_keyboard.conf /etc/keyd/AT\ Translated\ Set\ 2\ keyboard.conf && sudo systemctl restart keyd'