问题:用于 Linux 的 Karabiner? [关闭]

背景:在过去五年左右的时间里,在使用符合人体工程学键盘的典型 PC 硬件上使用 Gnu/Linux 多年后,我一直在使用 Mac 硬件(大部分是高端 MacBook Pro 笔记本电脑)和软件。更重要的是,作为 Emacs 的重度用户,切换到 Mac 是痛苦的,Apple 标准的短键盘既令人抓狂又不可避免。我通过使用Karabiner工具进行了两个小但非常重要的更改来防止RSI发作:1)更改大写锁定键以在单独按下时生成菜单(f13)键和在按下时更改控制键另一把钥匙; 2)以类似的方式更改返回键,单独按下时返回,当与另一个键按下时,控制键修改了键码。对 Apple 最近在硬件和软件方面的决定感到失望,我现在回到 Gnu/Linux(如果重要的话是 Ubuntu),但坚持使用 Mac 笔记本电脑。

问题:由于 Karabiner 是一个仅适用于 OS X 的工具,没有现成的 Gnu/Linux 对应物,看来我必须编写和/或修改一些代码来实现大写锁定和返回键的双重功能行为 Karabiner 启用。 Karabiner 的作者写道xbindkeys 和 rbindkeys 进行键重映射,但乍一看,它们似乎无法处理双重功能行为。现在我正在努力移植 Karabiner 或完全创建一个新工具。毫无疑问,可能还有其他方法。所以我的问题是:你会建议什么编程建议来解决这个问题?尤其是可以在数小时、数天或数周内而不是数月内开发的产品。

笔记:

  1. 存在涉及行为变化的不同方法,例如交换控制键和命令键。许多人都以不同程度的满意进行了尝试。 Karabiner 的双重功能方法是,恕我直言,最有效的方法是它在键盘主行上提供控制键对称性,并且适用于所有应用程序!

  2. 也可能建议使用不同的硬件。我尝试过戴尔、惠普、联想、宏碁系统并查看了更多。没有一款能与 Apple 高端产品的综合功率、尺寸、手感和风格相媲美,尽管价格较高。例如,Dell Precision 7510 体积庞大,触控板感觉像砂纸; Lenovo X1(一个非常好的系统)没有 Thunderbolt 端口;等等

3)由于笔记本电脑的要求,外接键盘也是不可启动的;飞机或火车上没有外接键盘。

解答

您可以使用 拦截工具WaylanTTYX11 上实现此目的,它直接与 libevdevlibevdev 对话。

Wayland、TTY 或 X11

安装 Interception Tools 和一个插件,例如caps2esc或interception-k2k。然后你需要配置_Interception_来使用这个插件。对于 caps2esc,您可以使用以下/etc/udevmon.yaml文件:

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

然后以root身份运行它:

zoz100027

您应该确保它在登录时开始。对于_systemd_,您可以使用以下服务:

[Unit]
Description=udevmon

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

[Install]
WantedBy=multi-user.target

X11-only

作为替代方案或在没有 udev 的旧系统上,您可以使用setxkbmap和xcape。

首先将Caps Lock更改为Ctrl修饰符:

setxkbmap -option caps:ctrl_modifier

然后将Caps Lock设置为当按下小于超时(默认为 500 毫秒)时充当Menu键:

xcape -e 'Caps_Lock=Menu'

xcape 作为守护进程运行,因此您需要确保它在登录时启动。 setxkbmap 仅设置当前 X 会话的键盘布局,您可以在 xinitrcxprofileX 配置文件 上永久设置。


P.S. 对于那些想要使用外部键盘的人,开源(软件和硬件)Ultimate Hacking Keyboard (UHK) 允许使用此功能。

Logo

更多推荐