在 Linux 系统中配置键盘按键重复时间

最后更新: 23/04/2026
作者: 艾萨克
  • 在 Linux 系统中,可以通过图形环境和控制台工具调整按键重复时间和速度。
  • 该系统使用键盘映射、修饰键和不同的控制台模式,将扫描码转换为键码,然后再转换为字符。
  • kbdrate、setkeycodes、loadkeys 和 dumpkeys 等实用程序允许对键盘行为和特殊按键进行广泛的自定义。
  • 永久配置依赖于启动脚本、/usr/share/kbd 中的映射以及终端模型的 terminfo 数据库。

在 Linux 中配置按键重复

如果你每天都使用 Linux 系统,键盘的响应速度决定了你是能流畅打字还是会感到抓狂。 按键重复时间、初始延迟以及每个按键的行为 无论是通过图形环境、文本控制台还是内核本身,都可以非常精确地调整它们。

此外,在 Linux 系统中,你不仅可以更改按键开始重复所需的时间或按住按键时每秒生成的字符数,还可以 修改键盘布局、重新定义特殊按键、更改布局,甚至分配高级操作发射计划 或者关闭系统。

Linux 中按键重复时间的图形化配置

在大多数现代 Linux 桌面系统(例如 GNOME、KDE ​​Plasma、Cinnamon 等)上,调整关键行为的首选位置是系统设置面板。 这些环境提供了一个专门的键盘区域,可以在其中调整延迟和重复率。 无需与主机对抗。

在 GNOME 类型的环境中,通常的做法是转到 “系统设置 → 键盘 → 按键重复”主要有两个控制项:按住按键后按键开始重复之前的延迟时间,以及 重复速度 (每秒生成多少个字符)。

“重复延迟”控制从你按住按键到它开始不停地发送字符所经过的时间。 如果您难以快速抬起手指,或者您使用键盘精确移动光标,您可能希望增加延迟时间,或者干脆禁用自动重复播放。

“重复率”表示重复开始后产生的字符数。 高速滚动对于快速浏览文本或玩游戏非常有用。但是,如果数值设置过高,也可能导致漏掉太多字符。

就特殊密钥而言,例如 键盘上集成音量旋钮或滚轮您可能需要不同的操作方式。例如,您可能希望在转动滚轮时音量立即增大或减小,而不是像其他按键那样有 600 毫秒的延迟。在标准的图形界面中,通常没有选项可以为每个按键设置不同的延迟,因此这就需要借助系统的底层机制和控制台工具来实现。

调整按键重复延迟和速度

系统键盘控制:扫描码、按键码和BIOS

在图形层之下,Linux 对键盘的处理远比表面看起来要精细得多。当你按下某个键时,设备并不会直接发送字母,而是发送一个…… 扫描码该扫描码到达内核,内核将其转换为 关键代码然后应用键盘映射,最终生成字符或执行操作。

传统上,BIOS 中断 9 处理键盘(这在 MS-DOS 类系统中很常见),但在 Linux 系统中并非如此。 内核会安装自己的键盘中断服务例程该程序遵循与经典程序类似的方案,尽管在扫描码的解释和内部缓冲区的填充方式上有所不同。

大多数按键都会生成两个代码:一个是按下时生成的代码(生成代码),另一个是松开时生成的代码(中断代码)。 实际上,内核通常会忽略中断码以简化处理。除了切换键(Shift、Ctrl、Alt 等)等特殊情况外,某些特殊按键会生成双序列:首先是前缀字节(例如 0xE0),然后是按键代码。

对于范围在 0x01-0x58(十进制 1 到 88)内的扫描码,Linux 默认应用一条非常简单的规则: 密钥码 = 扫描码在其他范围内(例如 0x59-0x7F 或以 0xE0 开头的序列),这种关系并不那么简单,需要使用内部内核表来定义哪个密钥对应于每个扫描码组合。

使用类似的工具 显示键 y 获取密钥代码 您可以清楚地看到键盘正在输入哪些代码。例如,通过运行以下命令 showkey -k 在虚拟控制台(而非图形终端)中,您将看到每次按键生成的键码,并且 显示密钥 -s 您可以查看硬件发送的原始扫描码,这有助于排查诸如以下情况等问题: 笔记本电脑键盘不工作.

  电脑的理想环境温度和相对湿度:完整指南

修改按键分配:setkeycodes 命令

在特殊按键(例如音量滚轮、多媒体键或键盘上的额外按键)无法正确识别的情况下,可以使用 设置键码 调整扫描码和密钥之间的关联。 此命令允许你告诉内核“当看到此扫描码时,将其视为此密钥”。.

基本语法为:

设置密钥扫描码密钥

El 扫描码 它以十六进制表示(例如) e049)和 关键代码 以十进制表示(例如) 112这样,您可以重新分配非常规按键,以便系统将其视为标准按键或其他您感兴趣的按键。

假设你按下物理“Page Up”键时,键盘生成序列 0xE0 0x49。根据内核的默认键码表,这可能对应于键码 104。 如果您希望该键的行为与另一个键相同,您可以运行类似这样的命令:

设置密钥代码 e049 112

更改之后,按下该键将生成键码 112 而不是 104。这里重要的是…… 这种重新分配是在内核级别完成的,在键盘映射将键码转换为具体操作之前完成的。从那里,你可以在地图上决定键码 112 的作用。

要检查系统识别哪些键码以及支持哪些范围,您可以使用 获取密钥代码这将显示内部表。这些实用程序通常需要管理员权限,因为 它们会修改所有虚拟控制台中键盘的全局行为。.

Linux 中的键盘布局和高级配置

Linux 控制台操作模式

在文本控制台(通常指您使用以下方式访问的 TTY)中 Ctrl+Alt+F1…F6Linux 键盘和控制台驱动程序可以以多种模式运行,这些模式决定了应用程序接收的内容。 这些模式会影响扫描码、按键码和字符的解释方式。.

主要模式有:

RAW模式(扫描模式)驱动程序不会进行任何转换;它会将扫描码原封不动地发送给应用程序。这是最低级别的模式,通常用于图形系统或专用应用程序需要完全控制键盘的情况。

MEDIUMRAW 模式(键码模式)内核将扫描码转换为密钥码,但仅此而已。 应用程序接收密钥并决定执行什么操作。这种方法适用于那些实现自身快捷键和翻译系统的程序。

XLATE 模式(ASCII 模式)这是文本控制台的传统默认模式。在这种模式下,扫描码会根据 8 位键盘映射(通常基于 ISO-8859-1)转换为键码,然后再转换为字符。 这是直接在 TTY 中使用 shell 时最常用的方法。.

Unicode 模式 (UTF-8)与前一种模式类似,但使用 Unicode 字符集,向内核发送 UTF-8 序列来表示大于一个字节的字符。这种模式对于需要支持不同字母表或扩展符号的现代系统至关重要。

控制台的有效模式与环境变量有关 学期如果你这样做 printenv TERM在虚拟控制台中,您通常会看到“linux”,而在 X 或 Wayland 的图形终端中,您会看到“xterm”、“xterm-256color”或类似内容。 当 X 服务器运行时,X 本身会管理键盘 内核通常会将控制台保持在 RAW 模式,并将解释工作委托给图形服务器。

关键 其他 在这种情况下,它被称为 Meta 键,Alt+X 组合键通常写作 MetaX。可以使用实用程序调整这些 Meta 键的行为。 设置元模式这样,您可以选择按下 Alt+X 是否发送序列号。 ESC X (转义符后跟字符)或值为 X 加 128 的字符,即第 7 位激活的字符。

终端模型和终端信息数据库

Linux 继承了 UNIX 的一个经典概念: 该系统将每次会话视为一种终端。它具有一些众所周知的特性(特殊按键、色彩功能、光标控制等)。即使您只有一台显示器和一个键盘,内核也会将您视为通过特定的终端型号连接的。

数据库中描述了每种终端型号的功能。 术语信息通常位于 /usr/share/terminfo/该数据库包含按首字母组织成子目录的文件(例如,vt100 文件位于以终端名称的首字母开头的子目录中)。

  FC25 游戏无法加载:原因、解决方案和修复技巧

每个 terminfo 文件都描述了终端名称、别名以及大量的功能: 哪些转义序列对应于 功能键光标如何移动,行如何清除等等。一个典型的经典终端标头示例是“vt100|vt100-am|dec vt100(带高级视频)…”。

要从命令行与终端功能进行交互,您可以使用以下几种工具:

姿势用于查看和调整终端参数(回显、流量控制、删除字符等)。

设定项此命令允许您修改控制台属性,例如视频行为、闪烁、颜色等等。如果运行命令时不带任何参数,它通常会列出当前终端中所有可调整的功能。

投入它依靠 terminfo 向终端发送标准控制序列,例如清除屏幕、移动光标或更改属性,而无需手动编写 ANSI 序列。

系统启动时的键盘配置

根据规格 Linux 标准库 (LSB)系统启动脚本位于 /etc/init.d/ 并由……直接或间接发起 /sbin/初始化它是所有其他进程的父进程。在这个结构中,定义了初始化硬件、网络、控制台以及键盘的步骤。

通常情况下,位于启动序列中的脚本会被执行。 /etc/init.d/boot.d/ 或者根据发行版的不同,使用等效路由。这些脚本处理诸如以下元素: 串行端口、网卡、CMOS时钟、逻辑卷 以及其他基本组件。最终,脚本通常会被执行。 /etc/init.d/boot.local 管理员可处理定制订单。

关于文本控制台键盘,许多发行版都使用配置文件,例如: /etc/sysconfig/键盘它指定了关键参数,包括启动时要加载的键盘映射和重复设置。

该文件包含如下指令:

键值表:表示键盘映射文件,通常位于 /usr/share/kbd/keymaps/一个典型的值可能是“es.map.gz”,它指向西班牙语键盘的映射。

KBD_RATE y KBD_延迟:定义重复频率(例如每秒 2.0 到 30.0 个字符)和初始延迟(以毫秒为单位)(250、500、750、1000 等)。 如果希望系统在启动时运行 kbdrate 命令,则必须设置这两个值。.

此外,还有一些初始关键状态设置,例如 数字锁定键、滚动锁定键和大小写锁定键这些设置可以设为“是”、“否”或“BIOS”(遵循BIOS配置)。甚至还有一个选项可以禁用大写锁定功能,并将大写锁定键转换为普通的Shift键。

键盘整体行为最重要的代码行是定义映射关系的那行,类似这样:

KEYTABLE="es.map.gz"

此映射决定了每个键码的功能,即当每个键与修饰键(Shift、AltGr、Control 等)组合按下时,将生成什么字符或操作。 之后,您可以使用 loadkeys、dumpkeys、showkey 和 kbdrate 等工具实时调整按键行为。.

关键工具:showkey、loadkeys、dumpkeys 和 kbdrate

系统启动运行后,您可以使用多种强大的工具来实时操控键盘。 这些是控制台实用程序,如果使用得当,可以让您根据几乎任何需求调整键盘。.

显示键这是用来检查键盘实际生成的代码的。 显示密钥 -s 您看到的扫描码与硬件输出的完全一致; showkey -k 显示内核例程在第一次转换后生成的密钥。

加载键:在虚拟控制台中加载新的键盘映射。需要 root 权限,应谨慎使用,因为 它会影响所有 TTY,包括登录 TTY。配置错误的地图可能会导致输入密码甚至登录都非常困难。

转储钥匙这允许您查看当前键盘布局和其他相关详细信息,例如功能定义、字符组合和符号等效性。选项包括: dumpkeys –长信息, dumpkeys –funcs-only o dumpkeys – 仅组合 您可以获得关于地图结构的详细信息列表。

kbdrate它是改变现状的直接工具 重复频率和初始键盘延迟在许多系统中,默认值与 IBM 键盘标准类似:每秒约 10 个字符,延迟约 250 毫秒。使用 kbdrate,您无需重启即可更改这些设置,这有助于了解辅助功能选项,例如: Windows 中的筛选键.

例如,对于非常短的延迟和快速重复,您可以使用类似这样的方法:

kbdrate -d 200 -r 30

哪里 -d 标记延迟时间(以毫秒为单位) -r 重复率(每秒字符数)。 如果想要整体性能降低,可以增加延迟或降低速率。如果你想要几乎瞬间完成操作,可以将延迟减少到 200 毫秒甚至更少,具体取决于你的硬件允许的范围。

  解决 Windows 10 中 RAM 和 CPU 使用率过高的最佳方法

键盘映射:内部定义和修饰键

“键盘映射”或键盘布局是高级配置的核心。这些映射可以编译到内核中,也可以作为文本文件存储。 /usr/share/kbd/keymaps/,并在诸如以下文件中提供默认配置: /etc/defkeymap.map. 每个版本通常都包含不同语言和布局的地图集。.

键盘映射使用特定的语法定义了每个键码与各种修饰键组合时的功能。一般来说,最多可以定义…… 同一个按键有 256 种不同的操作与修饰键(Shift、Alt、Control、AltGr 等)的可能组合相关。

地图文件使用以下格式的行:

密钥编号 = 符号 符号 符号 …

El 它是密钥的内部标识符(密钥代码),可以用十进制、八进制或十六进制表示。 符号 (键符)表示关联的操作,它可以是一个字符、一个字符序列或一个特殊函数,例如: 移除、启动、控制台_15 以及其他许多算法。通常不使用直接数值编码;而是采用在内核版本间保持稳定的符号常量。

修饰键被视为八位字节中的一位,每一位都有特定的“权重”。例如,Shift 键的权重可能是 1,AltGr 键的权重可能是 2,Control 键的权重可能是 4,Alt 键的权重可能是 8,左 Shift 键、右 Shift 键、左 Control 键和右 Control 键的权重也类似。 当你按下某个键时,实际执行的操作是通过累加激活修饰符的权重并参考相应的列来决定的。 在该键的定义中。

例如,如果您按下 Shift 和 Alt 键,则总和可能为 9,第 9 列中的定义决定了将生成什么。 如果没有修饰符,索引为 0,并取密钥行中定义的第一个符号。.

还有一个特殊的标记,即标志。 + 某些符号前的字母表示它们应被视为字母,这意味着它们对应于大写锁定键和Shift键。一个典型的例子:

键码 30 = +a

这表明该键会生成不带修饰符的小写字母“a”,如果使用大写字母则生成“A”,依此类推。要实现更具体的操作,可以显式定义大写字母列,例如:

密钥 30 = +a A

如果您不希望某个特定的按键组合执行任何操作,请使用关键字 虚空符号例如,要使某个键只在不带修饰符的情况下生成“a”,并且在使用某些特定组合时不生成任何内容,可以使用定义,并在这些情况上标记 VoidSymbol。此外,该语法允许进行简化: 如果定义了一个符号,并且该符号不是 ASCII 字母,则假定该符号在所有指定的列中都会被复制。.

地图的其他部分:包含、按键映射、字符集、函数和组合

键盘映射文件不仅包含键码定义,还包含对整体行为至关重要的其他元素。 这样就实现了模块化、支持不同的字符集,以及定义功能键和重音组合。.

指示 包括 它允许您包含其他文件,类似于“导入”。这对于在多个地图中重复使用公共部分非常有用,例如重音表或一组标准函数。

这条线 键盘映射 定义映射中指定的列(修饰符索引)。通常不会列出所有 256 个可能的列,而是指定范围,例如: 按键映射 0-2、4-5、8、12这意味着使用了第 0、1、2、4、5、8 和 12 列(正常、Shift、AltGr、Control、Control+Shift、Alt 和 Control+Alt)。 如果缺少此行,则假定存在从 0 到 M 的定义,其中 M 为找到的最大索引。 在密钥行中。

字符集定义 它们由以下类型的线条构成:

字符集 «iso-8859-2»

并确定字符的数值对应的代码页。默认情况下通常使用 ISO-8859-1(Latin-1),但也可以使用其他代码页,例如 ISO-8859-2 或 ISO-8859-7。 这对于诸如希腊字母μ之类的符号或某些语言特有的特殊字符尤为重要。.

字符串定义 它们使用以下语法:

字符串 keysym = "文本"

它们用于将功能键或特殊键与特定的字符序列关联起来。例如,您可以指定 F1 键发送“ESC”字符。