可靠地重新映射每个输入设备的按键

可靠地重新映射每个输入设备的按键

我有一台 Mac,键盘上的修饰键从左到右的顺序为:CtrlAltSuper(又名 、CmdWindows-key。我希望顺序改为CtrlSuperAlt,因此我已着手重新映射它们。

问题就出在这里,因为我经常连接外接键盘,而外接键盘的按键顺序已经正确。如果我在这里调换按键,结果就会出错。

所以我想专门为苹果键盘重新映射/交换按键。作为替代方案,我很乐意接受仅为笔记本电脑中特定的键盘重新映射按键(而不是自动为所有苹果键盘重新映射按键)。


经过研究,我最终得到一个只起到一半作用的解决方案。

我在登录时运行以下脚本(~/.kde/Autostart/custom-remap.sh),该脚本仅尝试重新映射我的内部键盘的按键:

#!/bin/bash -e

DIRNAME=$(dirname $0)

# Use xinput to target a specific keyboard only:
APPLE_KEYBOARD_ID=$(
    xinput list |
    grep 'Apple Internal Keyboard' |
    sed -n 's/.*id=\([0-9]\+\).*/\1/p'
)

# Apply mappings from xkb/symbols/custom
# Maps ctrl, win and alt-keys to be in PC standard positions
setxkbmap -device $APPLE_KEYBOARD_ID -print |
    sed 's/\(xkb_symbols.*\)"/\1+custom(apple-keyboard-swaps)"/' |
    xkbcomp -I$DIRNAME/xkb -i $APPLE_KEYBOARD_ID -synch - $DISPLAY

这依赖于以下文件xkb/symbols/custom

xkb_symbols "apple-keyboard-swaps" {
    key <LWIN> { [ Alt_L ] };
    key <LALT> { [ Super_L ] };

    key <RWIN> { [ Alt_R ] };
    key <RALT> { [ Control_R ] };
};

这种解决方案有时很有效,有时则没有效果,最近似乎我的系统中出现了一种混合结果:或Alt键都Super无法正常工作,它们似乎同时起到了两者的作用。

“有时”这个定义确实不太准确。重启后我可能会进入任一状态。连接/断开外接键盘可能会触发状态更改。其他时候,当我使用计算机时,状态似乎会随机切换。多次运行脚本似乎不会影响状态(如果第一次不发生,则下次也不会发生n第二次)。


我如何才能实现相关的重新映射并使其可靠地工作?

(我目前正在运行 Kubuntu 14.04,但在 Kubuntu 13.10 下也有类似的表现)

答案1

我还想在我的 MacBook Pro 上交换 cmd 和 alt 键,但当我插入普通外接键盘时则不行。

从方向这里,以下内容在 14.04 版(可能还有 13.10 版)上“有效”:

  1. 添加,如果文件不存在则options hid_apple swap_opt_cmd=1创建/etc/modprobe.d/hid_apple.conf
  2. 使用以下方法重建 initramfs:sudo update-initramfs -u -k all
  3. 重启

相关内容