将 Capslock 映射到 Wayland 上的控制

将 Capslock 映射到 Wayland 上的控制

我已经更新到 Fedora 26,现在我的 Capslock 键行为很奇怪(或者根本没有)。在 Fedora 25 中,xkb 设置非常适合我的 Ctrl 和 Caps 更改。我在 Gnome Tweak Tools 中选择了“Caps as Ctrl”,但 Caps 根本不执行任何操作!使用xev大写键我得到以下输出:

KeyRelease event, serial 36, synthetic NO, window 0x2600001,
    root 0x273, subw 0x0, time 2293119, (164,-21), root:(271,94),
    state 0x10, keycode 66 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

键码后的括号应包含 LCtrl 而不是 NoSymbol。我还尝试过停用和/或激活 Caps。除此之外,我还尝试修改/usr/share/X11/xkb/keycodes/evdev和使用 Caps = 37;这将使 Caps 类似于 Left Control - 但这也没有任何效果。请帮助我 - 自从韦兰以来,我有点迷路了!

我还通过以下方式更改了 Left Control 和 Alt:

<LALT> = 37; //64;
<LCTL> = 64; //37;

在前面提到的文件中 -> 这仍然很有魅力!

答案1

我暂时(希望这会得到一些爱)修复了它:在gnome tweak tools下面Typing我取消选择了每个条目,但是“ Capslock is also Control”。不知道为什么程序将许多选项列为重复项,例如“Capslock - 禁用”和“Capslock 已禁用”,并且大多数选项的标签不明确,因此大写锁定控制被许多选项修改。

答案2

Gnome 调整键盘和鼠标附加布局选项 您将在其中找到 Caps Lock 选项。

答案3

为了完整起见,我留下这个回复,因为处理非 Gnome、KDE ​​环境和 Wayland 的资源并不多。

我使用 Debian Buster,并在 XWayland 之上将 Fluxbox 作为 WM 运行(这意味着它可能不适用于非 XWayland WM)。执行通常的操作,即设置映射.xmodmaprc实际上完成了这项工作:

remove Lock = Caps_Lock
remove Control = Control_L
keysym Control_L = Caps_Lock
keysym Caps_Lock = Control_L
add Lock = Caps_Lock
add Control = Control_L

已更新以反映 Mark 的评论,该评论正确地指出该解决方案可能仅适用于基于 XWayland 的 WM。

答案4

Caps lock另一种解决方案是实现到Ctrl使用caps2esc和的映射interception_tools

以下步骤已采取(并解释)自如何通过 Caps2esc 在 Fedora 上映射大写锁定以转义和控制,如果您需要的话,它会提供更多详细信息。


同时安装caps2escinterception_tools

cd ~/your/code/directory
git clone https://gitlab.com/interception/linux/tools interception_tools
git clone https://gitlab.com/interception/linux/plugins/caps2esc

inception_tools安装依赖的库

sudo dnf install cmake yaml-cpp-devel libevdev-devel systemd-devel -y

构建并安装,caps2esc并在各自的目录中inception_tools运行并验证其安装sudo make install

which udevmon
which caps2esc

配置inception_tools以指定您希望在 中拦截的键/etc/caps2esc.yaml。在这种情况下,键是KEY_CAPSLOCKKEY_ESC

- JOB: "intercept -g $DEVNODE | caps2esc | uinput -d $DEVNODE"
  DEVICE:
    EVENTS:
      EV_KEY: [KEY_CAPSLOCK, KEY_ESC]

现在创建一个守护进程(参见这个答案如何让一个进程成为 systemd 下的服务?有关systemd) 的更多详细信息,请通过创建/etc/systemd/system/caps2esc.service,其中应包含以下内容:

[Unit]
Description=caps2esc

[Service]
ExecStart=/usr/bin/nice -n -20 /usr/local/bin/udevmon -c /etc/caps2esc.yaml

[Install]
WantedBy=multi-user.target

现在用来systemctl管理服务

sudo systemctl daemon-reload
sudo systemctl enable caps2esc # Start on bootup
sudo systemctl start caps2esc # Start now too

现在caps+C应该执行ctrl+ C,这可以在终端中进行验证。

相关内容