一篇文章详解xmodmap

简介:  ​xmodmap​ 是一个用于修改键盘映射和指针按钮映射的实用程序,通常在 X Window 系统上使用。

xmodmap

  ‍

简介

  ​xmodmap​ 是一个用于修改键盘映射和指针按钮映射的实用程序,通常在 X Window 系统上使用。

原理

X11是什么

  X11,通常被称为 X Window System,是一种提供窗口系统的软件。它广泛用于 Unix 和 Unix-like 操作系统(比如 Linux),为用户提供图形界面。X11 基于客户端-服务器模型:

  • 服务器:在用户的机器上运行,管理屏幕、键盘、鼠标等输入输出设备。
  • 客户端:应用程序,连接到服务器并通过服务器显示图形界面。

什么是键盘映射

  键盘映射: 指的是按键和字符(或功能)之间的映射关系。在 X11 中,每个按键被赋予一个 keycode,而每个 keycode 可以映射到一个或多个 keysyms(键符)。

  • Keycode:是一个数字,代表物理键盘上的一个特定的按键。每个按键的 keycode 是固定的,不会随不同的键盘布局或语言设置而改变。
  • Keysym:是一个表示按键功能的符号名。比如,字母 "A" 的 keysym 是 XK_A​,回车键的 keysym 是 XK_Return

X11 如何处理键盘输入

  当你在键盘上按下一个键时:

  1. 键盘硬件生成一个 keycode。
  2. X 服务器接收到这个 keycode,并根据当前的键盘映射,将它转换成一个或多个 keysyms。
  3. 如果有程序(X 客户端)注册了对这些 keysyms 的兴趣,这些 keysyms 将被发送到这些程序。

安装

sudo apt-get update
sudo apt-get install x11-xserver-utils

  安装完毕后,你可以通过在终端输入 xmodmap​ 来检查 xmodmap​ 是否成功安装。

使用

查看命令帮助

xmodmap -h
usage:  xmodmap [-options ...] [filename]

where options include:
    -display host:dpy            X server to use
    -verbose, -quiet             turn logging on or off
    -n                           don't execute changes, just show like make
    -e expression                execute string
    -pm                          print modifier map
    -pk                          print keymap table
    -pke                         print keymap table as expressions
    -pp                          print pointer map
    -help                        print this usage message
    -grammar                     print out short help on allowable input
    -version                     print program version
    -                            read standard input
  • -display host:dpy​: 此选项指定要使用的主机和显示器。
  • -grammar​: 此选项指示应在标准错误上打印描述文件中使用的表达式语法和带有 -e 表达式的帮助消息。
  • -verbose​: 解析输入时打印日志记录信息。
  • -quiet​: 此选项将关闭详细日志记录。这是默认设置。
  • -n​: 这个选项表明 xmodmap 不应该改变映射,而应该显示它会做什么,就像 make(1) 在给定这个选项时所做的那样。
  • -e expression​ : 此选项指定要执行的表达式。可以从命令行指定任意数量的表达式。
  • -pm​: 此选项指示应在标准输出上打印当前修改器贴图。
  • -pk​: 此选项指示当前键盘映射表应打印在标准输出上。
  • -pke​: 此选项指示当前键盘映射表应以表达式的形式打印在标准输出上,这些表达式可以反馈给 xmodmap。
  • -pp​: 此选项指示当前指针映射应打印在标准输出上。
  • -​: 单破折号表示应将标准输入用作输入文件。

示例

# 禁用左Alt键
xmodmap -e 'keycode 64 = ' 
# 禁用右Alt键
xmodmap -e 'keycode 108 = '
xmodmap -e 'keycode 67= '
xmodmap -e 'keycode 68= '
xmodmap -e 'keycode 69= '
xmodmap -e 'keycode 70= '
xmodmap -e 'keycode 71= '
xmodmap -e 'keycode 72= '
xmodmap -e 'keycode 73= '
xmodmap -e 'keycode 74= '
xmodmap -e 'keycode 75= '
xmodmap -e 'keycode 76= '
xmodmap -e 'keycode 95= '
xmodmap -e 'keycode 96= '
xmodmap -e 'keycode 133= '
xmodmap -e 'keycode 134= '

持久化

  为了持久化这些改变,你可以在你的 home 目录下创建一个名为 .Xmodmap​ 的文件:

xmodmap -pke > ~/.Xmodmap

  这会将当前键盘映射输出到 .Xmodmap​ 文件。然后你可以编辑这个文件来改变键映射,系统每次启动时都会读取这个文件。

  一些桌面环境可能不会自动加载 .Xmodmap​。如果你发现你的映射在重启后没有被应用,你可以在你的桌面环境的自动启动脚本中添加以下命令:

xmodmap ~/.Xmodmap

调试

  如果你的更改没有如预期那样生效,你可以使用 xev​ 工具来调试。xev​ 创建了一个窗口,可以报告所有从键盘或鼠标收到的事件,非常适合查看按键的 keycode。

  ​#xmodmap#​ #Linux键盘限制#​

附录

keycode 键名 keycode 键名 keycode 键名
9 ESC 49 ~ 22 BacksSpace
67 F1 10 1 23 Tab
68 F2 11 2 66 Caps Lock
69 F3 12 3 50 左Shift
70 F4 13 4 37 左Ctrl
71 F5 14 5 133 左Window
72 F6 15 6 64 左ALT
73 F7 16 7 108 右ALT
74 F8 17 8 65 空格
75 F9 18 9 134 右Window
76 F10 19 0 135 目录键
95 F11 20 - 105 右Ctrl
96 F12 21 = 62 右Shift
24 Q 38 A 36 Enter
25 W 39 S 51 \ \
26 E 40 D 52 Z
27 R 41 F 53 X
28 T 42 G 54 C
29 Y 43 H 55 V
30 U 44 J 56 B
31 I 45 K 57 N
32 O 46 L 58 M
33 P 47 ;: 59 <,
34 {[ 48 "' 60 >.
35 }] 61 ?/
Print Screen 78 Scroll Lock 127 Pause Break
118 Insert 110 Home 112 Page Up
119 Delte 115 End 117 Page Down
82 - 111 86 +
113 116 114
77 Num Lock 106 / 63 *
79 7 80 8 81 9
83 4 84 5 85 6
87 1 88 2 89 3
90 0 91 . 104 Enter

  ‍

相关文章
|
4月前
|
网络协议 关系型数据库 Linux
Debian 13 Trixie 发布 - 通用操作系统
Debian 13 Trixie 发布 - 通用操作系统
688 0
|
NoSQL 关系型数据库 编译器
通过Ftrace实现高效、精确的内核调试与分析(下)
通过Ftrace实现高效、精确的内核调试与分析
|
存储 Shell Linux
【Shell 命令集合 磁盘管理 】Linux 取消挂载 umount命令使用教程
【Shell 命令集合 磁盘管理 】Linux 取消挂载 umount命令使用教程
834 1
|
存储 数据采集 缓存
Linux 设备驱动程序(三)(中)
Linux 设备驱动程序(三)
237 1
|
前端开发 程序员 项目管理
Nuxt3 实战 (二):配置 Eslint、Prettierrc、Husky等项目提交规范
这篇文章介绍了项目规范的重要性和如何配置一些工具来提高代码质量、团队协作、降低维护成本、提升软件可靠性和促进项目管理。工具介绍了Eslint和Prettier,并且提供了安装和配置的步骤。文章还提到了如何配置Husky和Commitlint来检查提交风格的规范性,并最后提到了需要使用 release-it 自动管理版本号和生成 CHANGELOG 的任务。
415 0
Nuxt3 实战 (二):配置 Eslint、Prettierrc、Husky等项目提交规范
|
Ubuntu 网络安全 数据安全/隐私保护
使用SSH隧道将Ubuntu云服务器Jupyter Notebook端口映射到本地
这样,你就成功地将Ubuntu云服务器上的Jupyter Notebook端口映射到本地,使你能够通过本地浏览器访问并使用Jupyter Notebook。
981 1