Linux 的登山扣?

Karabiner for Linux?

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

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

备注:

1) 有不同的方法涉及行为的改变,例如交换控制键和命令键。许多人已经尝试过不同程度的满意。恕我直言,Karabiner 的双重功能方法是最有效的,因为它在键盘主行上提供控制键对称,适用于所有应用程序!

2) 也可能会建议使用不同的硬件。我试过 Dell、HP、Lenovo、Acer 系统并查看了更多。 None 可与 Apple 高端产品的综合性能、尺寸、手感和风格相媲美,尽管价格较高。例如,Dell Precision 7510 体积庞大,触摸板感觉像砂纸; Lenovo X1(一个非常好的系统)缺少 Thunderbolt 端口;等等

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

您可以在 WaylanTTYX11 上使用 Interception Tools,直接与 libevdevlibudev.

对话

Wayland、TTY 或 X11

安装拦截工具caps2esc or interception-k2k等插件。然后你需要配置 Interception 才能使用这个插件。对于 caps2esc,您可以使用以下 /etc/udevmon.yaml 文件:

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

然后 运行 它作为 root:

nice -n -20 /usr/bin/udevmon -c /etc/udevmon.yaml

你应该确保它 starts on login。对于 systemd,您可以使用以下服务:

[Unit]
Description=udevmon

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

[Install]
WantedBy=multi-user.target

仅限 X11

作为替代或在没有 udev 的旧系统上,您可以使用 setxkbmap and xcape.

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

setxkbmap -option caps:ctrl_modifier

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

xcape -e 'Caps_Lock=Menu'

xcape 运行s作为守护进程,所以需要保证starts on loginsetxkbmap 仅为当前 X 会话设置键盘布局,您可以在 xinitrc[=] 上永久设置 76=]、xprofileX 配置文件.


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