如何在 Linux 中交换 Ctrl 和 Caps Lock 键

Linux 桌面环境让您可以轻松地按需设置键盘。 这是方法。
167 位读者喜欢这篇文章。

1995 Sun Workstation keyboard

对于许多使用电脑“相当一段时间了”的人来说,自从第一批 PC 键盘下线后,Ctrl 和 Caps Lock 键的位置就放错了。 对我来说,正确的定位出现在这张 1995 年老式 Sun 工作站键盘的图片中。(请原谅图像的模糊;它是在弱光下用 Minox 间谍相机拍摄的。)

如果您有兴趣,可以阅读关于 Ctrl 键位置的历史。 我不打算讨论将 Ctrl 键放在 “a” 键旁边与 Shift 键下方的各种理由; 我不打算评论 Caps Lock 键的总体无用性(哎呀); 我也不会与那些主张用手掌根部激活 Ctrl 键的人争论,即使在某些笔记本电脑键盘上,按键都嵌入在腕托下方,根本不可能做到这一点(哎呀)。

相反,我假设我不是唯一一个喜欢 Ctrl 键在 “a” 旁边的人,并描述如何利用 Linux 带来的出色灵活性来交换各种桌面环境中的 Ctrl 和 Caps Lock 键。 请注意,这类建议似乎有保质期限制,因为用于调整桌面设置的工具经常更改。 但我希望这能为您提供一个良好的起点。

使用 GNOME 3

GNOME 3 桌面环境用户可以使用 Tweaks 工具来交换 Caps Lock 和 Ctrl 键,如下所示。

GNOME Tweaks Additional Layout Options

操作步骤如下

  1. 从您的发行版的存储库中安装 Tweaks 工具。
  2. 启动 Tweaks 应用程序。
  3. 从左侧菜单中选择 “键盘和鼠标”。
  4. 单击 “附加布局选项”。
  5. 在打开的窗口中单击 “Ctrl 位置”,然后选择 “交换 Ctrl 和 Caps Lock”。

就这么简单! 顺便说一句,您可以使用 Tweaks 工具做很多很酷的事情。 例如,我将我的右 Ctrl 键设置为组合键,这使我可以使用键盘快捷键输入各种字符,例如 ç、é、ô 和 ñ,以及按键组合 Compose+c+逗号; Compose+e+右引号; Compose+o+扬抑符; 和 Compose+n+波浪号。

使用 KDE

我不使用 KDE,但我的同事 Seth Kenlon 关于 可以改变您生活的 KDE 微调技巧 的文章中的第 5 项将向您展示如何重新映射您的按键。

使用 Xfce

据我所知,Xfce 桌面环境没有用于管理此类设置的便捷工具。 但是,setxkbmap 命令的 ctrl:swapcaps 选项将帮助您进行这些更改。 这种类型的修改分为两个部分

  1. 弄清楚命令的用法;
  2. 弄清楚在何处调用命令,以便在桌面启动时激活它。

第一部分非常简单:命令是

/usr/bin/setxkbmap -option "ctrl:nocaps"

值得在终端窗口中执行此命令,以确保结果符合您的预期。

假设它有效,您应该在哪里调用该命令? 这需要一些实验; 一种可能性是在用户主目录中的 .profile 文件中。 另一种选择是将命令添加到 Xfce 中的自动启动工具中(在设置管理器中查找 “会话和启动”)。

另一种可能性是在文件 /etc/default/keyboard 中使用相同的选项,该文件最终可能如下所示

# KEYBOARD CONFIGURATION FILE

# Consult the keyboard(5) manual page.

XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT=""
XKBOPTIONS="ctrl:swapcaps"

BACKSPACE="guess"

请注意,这种更改将影响所有用户,因此如果您与他人共享您的计算机,请准备好进行一些解释。 此外,系统更新可能会覆盖此文件,因此如果您的设置停止工作,您需要再次编辑它。 将相同的信息放在用户主目录中的 .keyboard 文件中可能会代表用户完成相同的任务。

最后,请注意,这些类型的更改需要您重新启动 Xfce(除非在终端窗口中的命令行上运行命令,但这不会持续到会话结束)。

使用 LXQt 和其他桌面环境

我没有尝试过 LXQt,但如果我没记错 LXDE,我会尝试上面用于 Xfce 的相同方法。 我也希望 Xfce 方法可以用于其他 Linux 桌面环境,但是,当然,您最喜欢的搜索引擎永远是您的朋友。

控制台

我没有尝试过这个,因为我很少有机会与控制台进行交互(在服务器上或当您的窗口系统无法正常启动时您看到的内容)。 上面介绍的方法以人们希望的方式影响终端窗口,即与其他应用程序一致。

但是,如果文件 /etc/default/keyboard~/.keyboard 已经被编辑过(如上所述),则实用程序 setupcon 旨在更改控制台键盘设置,使其功能相同。 这篇 StackExchange 文章, 另一篇, 和 第三篇 文章给出了一些关于如何从这两个文件中进行这些更改的想法。 第三篇文章还讨论了使用 dumpkeysloadkeys。 阅读 setupcon 手册页 也是值得的 — 它简短而切中要点,并结合 StackExchange 文章中的评论,应该足以找到解决方案。

最后,值得在此强调 StackExchange 文章中提到的观点 - 配置控制台与配置终端窗口不同; 后者通过前面描述的桌面管理器进行配置。

当所有其他方法都失败时

setxkbmapxkeyboard-configkeyboardconsole-setupsetupcon 的手册页都是有用的参考资料。 或者,如果您不喜欢阅读手册页,可以查看 这篇很棒的文章

Chris Hermansen portrait Temuco Chile
自从 1978 年毕业于不列颠哥伦比亚大学以来,我几乎一直离不开各种计算机。从 2005 年至今,我一直是全职 Linux 用户,从 1986 年到 2005 年,我一直是全职 Solaris 和 SunOS 用户,在此之前是 UNIX System V 用户。

12 条评论

“请原谅图像的模糊;它是在弱光下用 Minox 间谍相机拍摄的。”

我一直想要一台 Minox,但不得不随身携带一张办公桌和一盏灯,似乎有点不方便 :)
PS 我有一件风衣和一顶软呢帽,我快要准备好了。

感谢您有趣的评论,MartyMonroe! 出于好奇,您在哪里买到您的软呢帽? 我在当地找不到...

回复 作者 MartyMonroe

我有时使用 Xmodmap 来做到这一点。

理论上,您必须使用 `xev` 来找出键盘的正确键码,但老实说,我在三个系统中使用相同的代码,没有问题。

将类似这样的内容放在名为 ~/.xmodmap 的文件中
"""
remove Lock = Caps_Lock
remove Control = Control_L
keycode 66 = Control_L
keycode 37 = Control_L
add Control = Control_L
"""

这将删除 CapsLock 键的 “锁定” 性质,
然后从左侧 control 中删除 control 以提供一个干净的状态。
然后它将键码 66(我键盘上的 caps lock)分配给 Control_L 信号。
然后它将键码 37(我键盘上的左侧 control)分配给 Control_L 信号。
然后它确保 Control_L 是一个 Control 键。

严格来说,这有点矫枉过正,但我发现在某些顽固的环境中,增加的显式性很有用。

要在您的会话中体现这一点,请运行

$ xmodmap ~/.xmodmap

要使其在登录时生效,请在您的 .bash_rc 或 .bash_profile 或 .profile 或您喜欢的任何自动启动脚本中运行 xmodmap 命令。

这可能是您链接到的存档中的相关引述

> 原则上,Xkb 应该接管。 实际上,只有
> 在已知宇宙中有三个人了解 Xkb,而且没有人
> 完全确定他们是谁。

当然,那是 2008 年写的,所以现在可能已经有 4 个人了。

无论如何,存档中提供的 URL 包含大量有用的信息,尽管是法语的。 我必须复习一下才能阅读。

感谢您的文章和链接。

回复 作者 clhermansen

从表面上看,这是一篇相当不错的文章。 我没有尝试她的建议,但它们非常详细,并且没有留下太多想象空间。 正如您所说,需要一些法语 :-)

回复 作者 sethkenlon

还有一个精彩的可编程键盘世界。 请参阅:https://qmk.fm/

我不得不在我买的一台笔记本电脑上做类似的事情。 这台笔记本电脑的键盘发送了反斜杠键 (\\) 的错误键码。 此键上的 “shift” 是竖线符号 (|)。

为了修复,我必须使用 “setkeycodes 56 43” 来重置该键的正确键码。 这是系统范围的。 为了在每次启动时进行修复,只需创建一个新的 /etc/rc.d/rc.local 文件,如下所示

#!/bin/bash
setkeycodes 56 43
exit 0

sudo chmod 750 /etc/rc.d/rc.local

这样,您就不需要在用户级别做任何事情。 请注意,此修复不会影响我的外接键盘上的反斜杠或竖线,它们是正确的。

© . All rights reserved.