注意:我大约一个月前在超级用户中问过这个问题,但直到那时还没有回复,并且该问题与linux有关,所以我将其发布在这里。
我想交换键盘上的 esc 和 caps_lock 键。setxkbmap -option caps:swapescape
完成工作,但仅限于 X。按键在虚拟控制台上以原始方式运行。我怎样才能让它们在 vc 上以所需的方式运行?
答案1
Debian 和console-setup
在 Debian Linux 和 Debian FreeBSD 上,设计是让 X 服务器和内核虚拟终端共享一组配置信息。该console-setup
软件包提供了工具和启动脚本,用于获取 X 服务器的键盘/字体配置,对其进行转换,并使用它来配置内核虚拟终端。
具体来说:该console-setup
服务调用该setupcon --save
命令,该命令生成包含/etc/console-setup
转换后的键盘和字体设置指令的脚本,这些脚本根据 udev 规则针对内核虚拟终端设备运行。键盘映射从 XKB 转换为loadkeys
format 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 Lock和Escape并将其放在loadkeys
可以找到它的地方。
为了获得更多联合设置,必须涉及另外两项服务systemd-localed
和桌面总线。一个人跑步,比如说,
localectl set-x11-keymap pl pc105 "" "caps:swapescape"并且区域设置 D-BUS 服务会
/etc/vconsole.conf
根据其最佳猜测进行重写最接近的等价物内核虚拟终端的映射。这个最接近的等价物可能不是确切地不过,您可能会发现它完全忽略了选项等。
当然,您也可以手动使用 Debianckbcomp
直接转换 XKB 键盘映射。 ☺
进一步阅读
- https://superuser.com/questions/709616/
- https://wiki.debian.org/Keyboard
systemd-vconsole-setup-service
。 systemd 手册页。 Freedesktop.org。vconsole.conf
。 systemd 手册页。 Freedesktop.org。- 卡斯滕·希尔伯特(2014-08-29)。 带 systemd 的控制台设置忘记了字体设置。 #759657。 Debian 错误跟踪器。
localectl
。 systemd 手册页。 Freedesktop.org。- https://unix.stackexchange.com/a/479720/5132
答案2
使用loadkeys
。
要交换Esc和Caps Lock在控制台中,运行
printf 'keycode 1 = Caps_Lock Caps_Lock\nkeycode 58 = Escape Escape\n' | sudo loadkeys -