键盘快捷键

出自 ArchWiki

本文列出了(不常用的)默认键盘快捷键,并提供了关于用户自定义的信息。

提示: 如果你喜欢以键盘为中心的工作流程,你可能也会喜欢平铺窗口管理器

标准快捷键

内核 (SysRq)

有几个底层快捷键是在内核中通过 SysRq 键实现的,可用于调试和从无响应的系统中恢复。在可能的情况下,建议您使用这些快捷键,而不是硬关机(按住电源按钮以完全关闭系统)。

有关更多详细信息,请参阅 Wikipedia:Magic SysRq key

启用

systemd 默认将 SysRq 权限位掩码 设置为 0x10,这不允许进程信号或重启等操作。 要允许完全使用系统上的 SysRq 键,请将 kernel.sysrq = 1 添加到您的 sysctl 配置中。 大于 1 的值可用于有选择地启用 SysRq 功能; 有关详细信息,请参阅 Linux 内核文档。 如果您想确保即使在挂载分区之前和在 initrd 中也启用它,请将 sysrq_always_enabled=1 添加到您的 内核参数中。

请注意,通过这些方法更改设置将导致更改在重启后仍然保留。 如果您只想为当前会话尝试更改 SysRq 设置,您可以运行 sysctl kernel.sysrq=1echo "1" > /proc/sys/kernel/sysrq

为了避免完全启用 SysRq 功能所涉及的安全风险,用户可以启用功能子集,如下一节所述。 如果启用对 SysRq 的无限制使用,则允许杀死进程和强制重启,这不会增加桌面和笔记本电脑用户的风险。 但它也可以用于转储 CPU 寄存器的内容,这在理论上可能会泄露敏感信息。 除非您 特意去做,否则这需要物理访问系统。

重启

一个常见的记忆方法是 “Reboot Even If System Utterly Broken”(也称为 “REISUB”)。 或者,可以将其视为 “BUSIER” 的倒序。

注意: 请注意,“REISUB” 本身只是一个助记符,而不是对恢复无响应系统的按键顺序的任何通用建议。 您不应在不了解其在下面注释的实际功能的情况下盲目按下这些序列。
键盘快捷键 描述 启用代码 启用的其他功能
Alt+SysRq+r Unraw 将当前虚拟控制台的键盘模式从原始模式切换到 ASCII 模式(也称为 XLATE 模式)[1] 4 Alt+SysRq+k SAK
Alt+SysRq+e 终止 向所有进程发送 SIGTERM,允许它们优雅地终止。 64 Alt+SysRq+f OOM 杀死
Alt+SysRq+j Thaw
Alt+SysRq+i 杀死 向所有进程发送 SIGKILL,强制它们立即终止。
Alt+SysRq+s Sync 将数据刷新到磁盘。 16 -
Alt+SysRq+u 卸载 卸载并以只读方式重新挂载所有文件系统。 32 -
Alt+SysRq+b 重启 重启 128 -

例如,要选择性地仅启用重启功能,请将 kernel.sysrq 设置为 128。 可以通过将其设置为 244 来启用整套 REISUB 功能,尽管这也启用了其他功能,例如表中最后一列列出的功能。 有关更多文档,请参阅 SysRq 键文档和内核源文件 /drivers/tty/sysrq.c

杀死占用大量内存的进程

Alt+SysRq+f 可用于调用 OOM(内存不足)杀手,而不会在没有任何进程可以被杀死时导致内核崩溃。 OOM 杀手使用一组启发式方法来选择哪个相对不重要的进程正在使用最多的内存并将其杀死。 这对于杀死因过度抖动而导致系统软锁定的进程(例如失控的浏览器脚本)非常有用,并且可以在许多情况下缓解重启的需要。 请注意,尽管 OOM 杀手具有良好的启发式方法,但它可能会针对各种各样的进程,并且可能有些不可预测,因此请谨慎随意调用它。

远程使用

sysrqdAUR 是一个用于远程使用 SysRq 功能的守护进程。 它目前似乎无人维护。 [2]

故障排除

  • 如果 SysRq 操作产生输出,它将被发送到内核环形缓冲区,systemd 日志将拾取它。 当没有任何东西阻止输出显示在 Linux 控制台上时,它也会在那里。 在控制台上没有响应并不能证明 SysRq 命令没有被成功处理。 如果是这种情况,请运行 journalctl -kf 以监视到达内核环形缓冲区的输出。
  • 如果您正在使用显示管理器,并且在 Alt+SysRq+e 之后,您看到的是登录屏幕(如果启用了自动登录,则为完整桌面),则很可能是由相关 服务文件中的 Restart=always 指令引起的。 如果有必要,编辑单元文件,但这不应阻止 “REISUB” 序列工作。
  • 如果除了 Alt+SysRq+b 之外的所有上述组合都有效,请尝试使用相反的 Alt 键。
  • 在使用 Fn 键来区分 SysRqPrintScreen 的笔记本电脑上,可能实际上不需要使用 Fn 键(即,Alt+PrintScreen+字母 可能会起作用)。
  • 在联想笔记本电脑(Legion 系列除外)上,SysRq 通常配置为 Fn+S。 要使用它,请按住 Alt,然后按 Fn+s释放 Fns,仍然按住 Alt,然后按上面的键。
  • 您可能需要同时按下 CtrlAlt,或 AltGr[3]。 完整的快捷键将是 Ctrl+Alt+SysRq+bAltGr+SysRq+b
  • 某些键盘,例如罗技 K835,使用 Fn+Ins 来产生 SysRq

Xorg 和 Wayland

键盘快捷键 描述 注释
Ctrl+Alt+F1F2F3、... 切换到第 n 个虚拟控制台 如果不起作用,请尝试 Ctrl+Alt+Fn+F…
Shift+Insert
鼠标中键
粘贴来自 PRIMARY 缓冲区的文本 默认情况下,Qt 将 Shift+Insert 映射到 CLIPBOARD 而不是 PRIMARY 缓冲区(例如,参见 [4]),而 Ctrl+Shift+Insert 映射到 PRIMARY 缓冲区。

自定义

Readline

Readline 是一个常用的行编辑库; 例如,Bash、FTP 和许多其他程序都使用它(有关更多示例,请参阅 readline 软件包下的 “Required By”)。 它具有类似 Emacs 和类似 vi 的编辑模式,可以使用转义序列进行自定义。 默认的按键绑定在 readline(3)Info 文档中列出。

Xorg

有关一些默认情况下禁用的常用快捷键,请参阅 Xorg/键盘配置#常用 XKB 选项

当我们在图形环境时,我们可能希望在按下某些按键组合时执行命令(即,将命令绑定到键符)。 有多种方法可以做到这一点

  • 最便携的方式是使用低级工具,例如 acpid。 并非所有按键都受支持,但可以以统一的方式配置键盘按键、电源适配器连接甚至耳机插孔(拔出)事件。 在 X 会话中正确运行程序也很困难。
  • 通用方法是使用 Xorg 实用程序(例如 xbindkeys)以及最终您的桌面环境或窗口管理器工具。
  • 更快的方法是使用第三方程序在 GUI 中完成所有操作,例如 Gnome 控制中心。

sxhkd

一个简单的 X 热键守护进程,具有强大而紧凑的配置语法。 有关详细信息,请参阅 sxhkd

actkbd

来自 actkbd 主页

actkbdAUR 是一个简单的守护进程,它将操作绑定到键盘事件。 它识别按键组合,并且可以处理按下、重复和释放事件。 目前,它仅支持 linux-2.6 evdev 接口。 它使用纯文本配置文件,其中包含所有绑定。

示例配置和指南可在此处 获取

xbindkeys

xbindkeys 允许独立于桌面环境的高级键符到操作的映射。

提示: 如果您发现 xbindkeys 难以使用,请尝试图形管理器 xbindkeys_config-gtk2AUR

X 选择粘贴的按键绑定

本文或本节的事实准确性存在争议。

原因: Shift+Insert 粘贴 PRIMARY 缓冲区。 (在 Talk:Keyboard shortcuts 中讨论)

本文或本节需要扩充。

原因: 为什么有 100 毫秒的延迟? (在 Talk:Keyboard shortcuts 中讨论)

喜欢使用键盘而不是鼠标的用户可以从绑定到鼠标中键粘贴操作的按键绑定中受益。 这在以键盘为中心的环境中尤其有用。 一个工作流程示例是

  1. 在 Firefox 中,选择您要进行网络搜索的字符串(使用鼠标)。
  2. Ctrl+k 进入 “搜索引擎” 字段。
  3. F9 粘贴缓冲区,而不是将鼠标指针移动到该字段并单击鼠标中键进行粘贴。
注意: Shift+Insert 具有类似但不同的功能,请参阅 #XorgShift+Insert 插入剪贴板缓冲区,而不是 x-selection-paste 缓冲区。 在某些应用程序中,这两个缓冲区是镜像的。

此处建议的方法使用以下三个软件包:

  • xsel 用于访问 x-selection-buffer 内容。
  • Xbindkeys 用于将按键操作绑定到操作。
  • xvkbdAUR 通过模拟键盘输入将缓冲区字符串传递给应用程序。

此示例将 x-selection-paste 操作绑定到 F9

.xbindkeysrc
"xvkbd -no-jump-pointer -xsendevent -text "\D1`xsel`" 2>/dev/null"
    F9

"\D1" 代码在插入选择缓冲区之前添加 100 毫秒的暂停(请参阅 xvkbd 主页)。

注意: 根据您的 X 配置,您可能需要删除 -xsendevent 参数到 xvkbd。

可以使用 xbindkeys -k 确定 F9 以外的键的键代码。

参考文献

参见