如何强制执行系统范围的自定义键盘快捷键/宏?

o_o*_*o-- 6 linux desktop-environment input keyboard-layout

我希望能够将我在文本编辑器上使用的相同自定义键绑定和快捷方式应用于我的整个桌面环境。

我想基本上在系统范围内重新映射我的键盘,而不仅仅是在特定的应用程序窗口中。也就是说,当我重新映射时alt + j = Downalt + j就我的桌面环境而言,我希望按下与按下“向下”键相同。

我使用的快捷键经过优化,可以让双手始终处于靠近主排的自然位置:

# Note how
# system-wide remapping of *single* keys is possible with xmodmap.
Caps Lock           --> Escape
Escape              --> Caps Lock    # Switch caps lock with
                                     # the more useful escape key.
                                     # As far as *all* applications 
                                     # are concerned, pressing caps lock 
                                     # is actually pressing Escape. 

# However, I've not found a good way do the same for multiple keys:
alt + space         --> Right Arrow
alt + Escape        --> Enter
shift + alt + h     --> Backspace
alt + x             --> Delete
shift + alt + l     --> Delete

ctrl + alt          --> Alt           # Default alt functionalities 
                                      # remapped to ctrl + alt
Run Code Online (Sandbox Code Playgroud)

在我的文本编辑器中,这极大地提高了我的准确性、速度,并且极大地帮助了我缓解肌腱疼痛,因为我的手现在几乎不需要离开它们的自然休息位置。

第一次几乎成功的解决方案尝试:

使用 xbindkeys 调用 xvkbd(x 虚拟键盘)。这是我的样本.xbindkeysrc

# h-j-k-l Movement
###################
    "xvkbd -xsendevent -text "\[Down]""
        alt + j

    "xvkbd -xsendevent -text "\[Up]""
        alt + k

    "xvkbd -xsendevent -text "\[Left]""
        alt + h

    "xvkbd -xsendevent -text "\[Right]""
        alt + l
Run Code Online (Sandbox Code Playgroud)

问题:

alt键通常是调用应用程序菜单的默认键(例如,alt + F在大多数应用程序中调出 *F*ile 下拉菜单)。

此外,这似乎适用于某些应用程序,而其他应用程序似乎忽略了它。

xbindkeys 并没有真正重新映射键盘,它只是告诉 xvkbd 发送一个信号,这有时会与活动应用程序产生冲突(与真正重新映射键盘的 xmodmap 不同)。

目标

我的键盘的系统范围的重新映射,以一种易于移植的方式(rc 文件或类似的东西)实现。

alt是选择的最佳键,因为ctrl它在应用程序中大量使用,并且 mod 键被我的 Windows 管理器 (Xmonad) 占用。

我的设置

我正在使用 Xmonad 桌面环境运行 Ubuntu 12.10。


这是可行的吗?我还不太了解操作系统级别的东西以及它如何处理输入。

mic*_*has 1

我看到的唯一机会是配置xkb来相应地映射您的密钥。一些应用程序(例如游戏)可能会直接监听实际按下的按键,但通常其他所有应用程序仅使用 xkb 映射。

有两种不同的配置工具:setxkbmapxmodmap。理论上 xmodmap 已被弃用,应该由 setxkbmap 取代,但有时旧的 xmodmap 也很方便。

您只能使用 xkb 提供的功能,但即使 xmodmap 也提供一组有限的修饰符。您可以为每个键指定四个键符号。引用它的手册页:

The first keysym is used when
no modifier key is pressed in conjunction with  this  key,  the
second  with  Shift, the third when the Mode_switch key is used
with this key and the fourth  when  both  the  Mode_switch  and
Shift keys are used.
Run Code Online (Sandbox Code Playgroud)

也许阅读有关系统详细信息的更多内容是个好主意。我建议阅读这里这里看看有什么可能。