在 Wayland 下将组合键重新映射到另一个组合,例如 AltGr+C -> Ctrl+C

在 Wayland 下将组合键重新映射到另一个组合,例如 AltGr+C -> Ctrl+C

总结

在 Wayland 下,我可以以某种方式绑定AltGr + C到吗Ctrl + C

细节

我主要想问这个问题但对于 Wayland 上的 GNOME. 这意味着涉及自动键绑定键不起作用,因为它们在 Wayland 下都不起作用。

背景

我想重新映射一些键以便最终更好地利用CapsLock

我的计划是映射CapsLockAltGr,然后跟随获得类似 vim 的键绑定。在 Wayland 上,可以通过 XKB 文件进行重新映射(参见链接)。

但是,我还想使用CapsLock它进行复制/粘贴。目前,我已将其映射到Ctrl(使用 XKB 文件)。这使得CapsLock + C整个系统都能顺利运行,我想保留这一点。

因此: 通过CapsLock将 映射到AltGr,我想Capslock (= AltGr) + C充当Ctrl + C

我的问题

在 Wayland 下,我可以以某种方式绑定AltGr + C到吗Ctrl + C

(不要仅仅重新绑定AltGrCtrl,因为那样会失去目的)

Q 的另一个示例

在 latin 的 XKB 文件中,为我的密钥/usr/share/X11/xkb/symbols/latin定义了以下行为:Q

key <AD01>  { [ q, Q, at, Greek_OMEGA ] };

这表明密钥有四种可能的输出:

  1. 单独按下它会产生q
  2. 按下后Shift,它会产生Q
  3. 按下后AltGr,它会产生@
  4. 按下后AltGr + Shift,它会产生Ω

本质上我想要实现的是,当Q按下时AltGr,它不会产生@而是Ctrl + Q

答案1

有几种工具可以做到这一点,例如柯莫纳德拦截工具, 和密钥

我在 Wayland 下取得了巨大的成功keyd,所以我描述了我是如何做到的。我建议阅读简短的自述文件寻找灵感。守护进程可以做的事情比这里所用的要多得多。

当前解决方案满足了我的要求,但使用AltGr绕行方式绕过。它在其他所有地方都将其视为CapsLockControl但在 中除外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'

相关内容