使用CapsLock作为鼠标左键;大部分都可以工作,但有一些事情会失败

使用CapsLock作为鼠标左键;大部分都可以工作,但有一些事情会失败
Linux System Info:
OS:        GNU/Linux x86_64
Kernel:    3.13.0-24-generic
Distro:    Linux Mint 17 Qiana, Cinnamon 64-bit 2.2.16
           [Based On: Ubuntu 14.04.5 LTS, Trusty Tahr]

由于包括手指损伤在内的残疾(脊柱损伤),我进行了一些修改,以便可以使用键盘的 CapsLock 键作为鼠标左键。 NumLock 被重新映射为 CapsLock 功能。

当使用 CapsLock 作为左键单击和左键双击时,几乎一切都可以正常工作,但下面列出的一些情况却不能...

编辑2019-01-10

长篇文章的其余部分已被删除 - 请参阅下面我的答案,了解如何将 CapsLock 键设置为鼠标左键,并将 NumLock 重新映射为 CapsLock。

答案1

回答我自己的问题...

事实证明,将 CapsLock 设置为鼠标左键比预期简单得多。 [注意:物理鼠标左键继续正常运行。]

  1. 将 CapsLock 映射到鼠标左键(66 是 CapsLock 键码):

    $ xmodmap -e“键码 66 = Pointer_Button1”

  2. 将 NumLock 映射到 CapsLock(77 是 NumLock 按键代码):

    $ xmodmap -e "键码 77 = Caps_Lock"

注意:这意味着 NumLock 将充当 CapsLock 替代键,NumLock 的功能将丢失(无论如何我都不会使用它,但如果您使用 NumLock,请使用不同的键,例如 Pause、ScollLock 等)。

  1. 启用鼠标键:

    $ xkbset 鼠标键

注意:某些发行版上默认不安装 xkbset,这与在系统设置的“辅助功能”部分中启用鼠标键不同。

就是这样——一切都完成了。


然而,用户可能希望在启动时自动完成这些任务。这就是我所做的:

创建常规文件/home/user/.Xmodmap并插入以下行。

! 77 is the NumLock key code, 66 is the CapsLock key code.
! Map CapsLock to the left mouse button and map NumLock to
! CapsLock, i.e. NumLock acts as the CapsLock key used to.

keycode 77 = Caps_Lock
keycode 66 = Pointer_Button1

注意:.Xmodmap文件中的注释以!.

事实证明,在启动时运行 xmodmap 来加载~/.Xmodmap文件肯定比预期的要困难 - 问题是它必须在启动序列的最后阶段完成,否则 XKB 将不会启动,并且 XKB 将在加载时覆盖 xmodmap 更改。

放置线条...

/usr/bin/xmodmap /home/user/.Xmodmap
/usr/bin/xkbset mousekeys

...在~/.profile~/.xinitrc、 中~/.xsessionrc都失败了。

创建文件/etc/X11/Xsession.d/80_xmodmap_user_added来运行上面的命令,如建议的那样如何在 Ubuntu 16.04 中持久地重新映射键?不适合我。

我很不情愿地使用了图形启动工具,在 Linux Mint 上如下(您的发行版可能有所不同):

Mint Menu --> Preferences --> Startup Applications

我创建了 2 个条目,其中一个用于调用以下每个命令:

/usr/bin/xmodmap /home/user/.Xmodmap
/usr/bin/xkbset mousekeys

根据记录,我不需要在启动应用程序条目中设置自动启动延迟,但如果这对您不起作用,请尝试添加延迟。 XKB 需要在命令运行之前启动,否则您的更改将被它覆盖。

这一切对我来说都很完美;启动时 CapsLock 用作鼠标左键(单击和双击均可)。

编辑:那些不介意必须按修饰键来打开和关闭 CapsLock 的用户可以将 CapsLock 指定为鼠标左键,并使用下面的行将 CapsLock 切换指定为 Shift+CapsLock。在这种情况下,无需将 CapsLock 切换分配给 NumLock 键(如 Akhil 的非常有用的评论中所建议的)。

keycode 66 = Pointer_Button1 Caps_Lock

相关内容