一篇文章详解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

  ‍

相关文章
|
7月前
|
Unix 编译器 开发者
Qt5.14.2 轻松掌握Qt中的压缩与解压缩:QuaZIP的神秘面纱与实战演练之windows环境编译
Qt5.14.2 轻松掌握Qt中的压缩与解压缩:QuaZIP的神秘面纱与实战演练之windows环境编译
655 0
|
7月前
|
人工智能 自然语言处理 安全
面向AIGC的内容风控新技术
【1月更文挑战第19天】面向AIGC的内容风控新技术
335 1
面向AIGC的内容风控新技术
|
6月前
|
Ubuntu Linux 测试技术
探索Linux中的`dbus-send`命令
`dbus-send`是Linux中用于进程间通信的D-Bus系统的命令行工具,允许应用程序通过消息总线相互交互。要安装它,可以使用包管理器(如`apt-get`或`dnf`)。基本语法包括指定总线类型、目标服务、消息类型、对象路径、接口及方法等。示例用法包括使用`dbus-send`来锁定屏幕(通过调用`org.gnome.ScreenSaver.Lock`)和设置音量(通过与PulseAudio服务交互)。在使用时,需了解目标服务的接口和方法,并确保具备相应权限。
336 10
|
Web App开发 域名解析 缓存
如何在 Ubuntu 20.04 上安装 Node.js 和 npm
本文我们主要为大家介绍在 Ubuntu 20.04 上安装 Node.js 和 npm 的三种不同的方式。
140155 7
如何在 Ubuntu 20.04 上安装 Node.js 和 npm
|
5月前
|
安全 Ubuntu Linux
6 个受欢迎且好用的轻量级Linux桌面环境
Linux被认为是最安全的系统,但这并不意味着它不受恶意软件或其他安全漏洞的侵害。Linux系统的使用范围非常广泛,因此防范潜在威胁至关重要。在这里,将探索 2024 年适用于 Linux 的最佳防病毒软件。根据评级、功能以及与其他 Linux 发行版的兼容性列出了十款最佳防病毒软件,内容仅供分享,不做其它用途。
1798 1
6 个受欢迎且好用的轻量级Linux桌面环境
|
7月前
|
存储 搜索推荐 Linux
|
6月前
|
机器学习/深度学习 Ubuntu Shell
深度学习环境配置(Ubuntu+Anaconda)
深度学习环境配置(Ubuntu+Anaconda)
125 3
|
Ubuntu Linux iOS开发
Linux (Debian 系) 安装官方微信 (Electron,非 wine 版)
最近才发现微信有推出基于 Electron.js 的一款桌面程序,不需要依赖 Wine 那复杂和冗余的依赖,只需要装一个稍微“大”一点的 deb 包就可以。
16228 0
|
Shell 测试技术 Python
如何在Bash Shell脚本中使用`exec`命令?
如何在Bash Shell脚本中使用`exec`命令?
278 0
|
IDE 编译器 开发工具
统信UOS系统开发笔记(四):从Qt源码编译安装之编译安装QtCreator4.11.2,并配置编译测试Demo
上一篇已经从Qt源码编译了Qt,那么Qt开发的IDE为QtCreator,本篇从源码编译安装QtCreator,并配置好构建套件,运行Demo并测试。