在虚拟终端中交换密钥

sag*_*aga 3 linux keyboard-shortcuts keyboard

注意:大约一个月前我在超级用户中问过这个问题,但直到那时还没有回复,而且问题与 linux 相关,所以我在这里发布它。

我想交换键盘上的 esc 和 caps_lock 键。setxkbmap -option caps:swapescape完成工作,但仅适用于 X。按键在虚拟控制台上以原始方式运行。如何让它们在 vc 上以所需的方式运行?

Jde*_*eBP 5

Debian 和 console-setup

在 Debian Linux 和 Debian FreeBSD 上,设计是为了让 X 服务器和内核虚拟终端共享一组配置信息。该console-setup软件包提供了工具和启动脚本,这些工具和启动脚本获取 X 服务器的键盘/字体配置,对其进行转换,并使用它来配置内核虚拟终端。

具体来说:该console-setup服务调用该setupcon --save命令,该命令生成/etc/console-setup包含转换后的键盘和字体设置指令的脚本,这些脚本通过 udev 规则针对内核虚拟终端设备运行。键盘映射从 XKB 转换为loadkeys格式 by ckbcomp,并运行从 udev 规则调用的生成脚本loadkeys

因此,在 Debian Linux 和 Debian FreeBSD 上,您需要确保XKBMODEL, XKBLAYOUT, XKBVARIANT,XKBOPTIONS变量在/etc/default/keyboard. 特别是在您的情况下,您需要确保XKBOPTIONS变量具有caps:swapescape. 然后,您需要确保console-setup正确安装了软件包。

Linux系统

在 systemd 操作系统上,东西的集成度比 Debian 少。有一个名为的配置文件/etc/vconsole.conf和一个名为的服务systemd-vconsole-setup.service,用于在系统引导时处理它(响应 udev 规则宣布内核虚拟终端子系统的存在)。但这根本没有与 X 服务器配置相结合。

vconsole.conf文件有一个KEYMAP设置,表示传递给 的键盘映射,loadkeys同样不需要自己显式运行。但它留给完全由你来创建一个(可定制)键盘映射,掉期Caps LockEscape,并把它在那里loadkeys可以找到它。

要获得更多连接设置,必须涉及另外两个服务systemd-localed和桌面总线。一个跑,说,

localectl set-x11-keymap pl pc105"""caps:swapescape"
并且语言环境 D-BUS 服务/etc/vconsole.conf使用其最佳猜测重写内核虚拟终端的最近等效映射。不过,这个最接近的等价物可能并不完全等价,您可能会发现它只是完全忽略了选项等。

当然,您也可以随时ckbcomp手动使用 Debian来直接转换 XKB 键盘映射。☺

进一步阅读