xmodmap-安装与使用

官方文档
xmodmap 是用于修改 Xorg 中键位图和指针映射的工具.

xmodmap 和 XKB (X keyboard extension) 没有直接关系.

注意, xmodmap 设置会被 setxkbmap 重置.

简介

Xorg 中有两种类型的键盘值: 键码和键符.

  • 键码 keycode, 表示按键或鼠标按钮被按下时, 内核收到的表示数字
  • 键符 keysym, 是键码所对应的符号表达式, 意思是可以通过按下相应的键符对应的位置向内核发送 keycode. 如 Shift_L 是键符, 表示的是键盘上的具体位置, 50 和 (0x32) 是同一个意思表示键码

keycode 和 keysym 的映射表可以用 xmodmap 查看.

内核对 keycode 的解释是定死了的, 但是按下什么键发送什么 keycode 是我们可以操控的.

安装

xorg-xmodmap 包提供 xmodmap.

xkeycaps 包提供 xmodmap 的图形前端.

键映射表

以表达式格式呈现:

1
$ xmodmap -pke

表中的 Key 表示 keycode 对应的按键.

如果要跳过一个 keysym, 将其值设置为 NoSymble.

多媒体键有预定义的描述性键符, 如 XF86AudioMute, 可在 /usr/include/X11/XF86keysym.h 中找到.

要永久改变, 可修改 .xprofile.xinitrc 文件.

自定义映射表

创建一个映射列表:

1
$ xmodmap -pke > ~/.Xmodmap

测试更改:

1
$ xmodmap ~/.Xmodmap

激活

~/.xinitrc 中添加:

1
[[ -f ~/.Xmodmap ]] && xmodmap ~/.Xmodmap

临时修改

1
2
$ xmodmap -e "keycode 46 = l L l L lstroke lstroke lstroke"
$ xmodmap -e "keysym a = e E"

修饰键

就是 modkey (mod 是 modifier 的意思).

xmodmap -pm 的输出的理解:

1
2
3
4
5
6
7
8
9
10
11
12
13
$ xmodmap -pm

xmodmap: up to 4 keys per modifier, (keycodes in parentheses):

shift Shift_L (0x32), Shift_R (0x3e)
lock Caps_Lock (0x25)
control Control_L (0x42), Control_R (0x69)
mod1 Alt_L (0x40), Alt_R (0x6c), Alt_L (0xcc), Meta_L (0xcd)
mod2 Num_Lock (0x4d)
mod3 ISO_Level5_Shift (0xcb)
mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf)
mod5 ISO_Level3_Shift (0x5c)

应该是按右侧的键, 都可以表示左侧的修饰键. 就比如:

1
shift       Shift_L (0x32),  Shift_R (0x3e)

表名, 按下左边的 Shift 和按下 右边的 Shift 都会产生 shift 修饰符的作用.

使用 ! 作为注释.

Man page

在 Man Page 中有语法讲解以及示例.

xev 程序

这个软件打开后可用来检测 keycode 和 keysym 等信息.

语法: keycode Num = keysymname …

一个 keycode 最多绑定 8 个 keysym.

一个 key 后面跟着的 keysym 的含义:

1
keycode 57 = n N

这个位置有特别的含义, 出现在第一个位置表明 no modifier key is conjunction with this key, 第二个位置表明和 Shift 一起按, 第三个 with Mode_switch key, 第四个 with both Mode_switch and Shift.

keycode

clear MODIFIERNAME

clear 后面可以跟: Shift, Lock, Control, Mod1, Mod2, Mod3, Mod4, Mod5 (modifier name 可以不区分大小写).

参考一个 Tutorial

参考
xmodmap 不能做的事:

  • 不能将一个键变成, 按下这个键等于多个键的组合
  • 不能执行脚本

xmodmap-安装与使用
http://example.com/2022/09/18/xmodmap-安装与使用/
作者
Jie
发布于
2022年9月18日
许可协议