Ratpoison
Ratpoison 是一款用 C 语言编写的手动平铺 窗口管理器,允许用户在没有鼠标的情况下管理图形窗口。其用户界面灵感来自 GNU Screen。
默认情况下,Ratpoison 的快捷键与 Emacs 和 GNU Screen 非常相似。命令由按下前缀键(默认 Ctrl+t)开始,随后跟另一个键组合,例如 Ctrl+Space 移动到下一个窗口。
安装
Ratpoison 与显示管理器
许多 显示管理器(例如 LightDM)从 /usr/share/xsessions/ 获取可用会话,且大多数 窗口管理器 和 桌面环境 将其 桌面条目 安装在该目录下。然而,Ratpoison 则在 /etc/X11/sessions/ratpoison.desktop 中创建 桌面条目 文件。为了让显示管理器能找到 Ratpoison,可能需要将 Ratpoison 的 桌面条目 复制到 /usr/share/xsessions/ratpoison.desktop。或者您也可以使用符号链接。如果 /usr/share/xsessions 目录不存在,请以 root 身份创建它。
使用 Ratpoison
要启动 Ratpoison,您需要先注销,并在 显示管理器 中选择“Ratpoison”。或者,您可以配置 xinit 并使用 startx。
X11 启动后,您将看到一个黑屏,右上角有一个写着“Welcome to Ratpoison”的小文本框。现在输入 Ctrl+t 然后输入 ? 以获取快捷键列表。如果您习惯使用 GNU Screen 或 Tmux,您很快就会感到得心应手。
您可以在 ~/.ratpoisonrc 中定义自定义按键,甚至覆盖现有按键。
这是一个配置文件示例:
~/.ratpoisonrc
startup_message off # run a programs at start. # you can also use ~/.xinitrc exec xsetroot -cursor_name left_ptr exec xterm # Setting the escape key to the Windows key escape Super_L # Keybindings for programs. # "bind" command requires that you first press the prefix key. # Overriding CTRL+t 'c' to start urxvt instead of default xterm. bind c exec urxvt -tr bind f exec firefox # Make a screenshot command for Ratpoison. # Bind it to Meta-Ctrl-PrintScrn. # Note that "definekey top" causes the keybinding to work without prefix key. alias sshot exec import -window root ~/screenshot-$(date +%F).jpg definekey top M-C-Print sshot # Virtual desks. # Note: you probably want to use rpws instead, read below. gnewbg one gnewbg two definekey top M-l exec ratpoison -c "select -" -c "gprev" -c "next" definekey top M-h exec ratpoison -c "select -" -c "gnext" -c "next" # switch between windows with vim-like keys, without having to press prefix key. definekey top M-j next definekey top M-k prev # Alt+Tab now switch to next window. definekey top M-Tab next
实用快捷键
| 按键绑定 | 效果 |
|---|---|
Ctrl+t ! <程序名称> |
启动任何程序 |
Ctrl+t ? |
显示快捷键,包括自定义快捷键! |
Ctrl+t c |
启动 xterm |
Ctrl+t n |
切换到下一个窗口 |
Ctrl+t p |
切换到上一个窗口 |
Ctrl+t 1–9 |
切换到窗口 1–9 |
Ctrl+t k |
关闭当前窗口 |
Ctrl+t Shift+k |
强制杀死当前应用程序 |
Ctrl+t s,Shift+s |
将当前框架垂直或水平分割为两个 |
Ctrl+t Tab, Left, Up, Right, Down |
切换到下一个、左侧、上方、右侧、下方框架。 |
Ctrl+t Shift+q |
使当前框架成为唯一框架 |
Ctrl+t : |
执行 ratpoison 命令 |
技巧与提示
屏幕阅读器辅助功能
默认情况下,Ratpoison 不支持 Orca 屏幕阅读器。在 gitlab.com/stormdragon2976/strychnine 有一个项目,它将默认的 Ratpoison 组件替换为 GTK 组件。
$ git clone https://gitlab.com/stormdragon2976/strychnine.git $ cd strychnine $ ./setup.sh
按照屏幕上的提示操作,您将获得一个在启动时会自动启动 Orca 的 ~/.ratpoisonrc 文件。更多选项请参阅随附的 README.md。
Java 应用程序
Java GUI 应用程序假设使用堆叠式窗口管理器,在默认的 Ratpoison 配置下无法正确全屏。请参阅 Java#Impersonate another window manager 和 Java#Gray window, applications not resizing with WM, menus immediately closing 以获取解决方案。
临时切换到另一个窗口管理器
如果某个程序在 Ratpoison 下运行异常,您可以临时切换到另一个 窗口管理器。您需要确保临时窗口管理器在退出时不会杀死所有程序。值得注意的是,至少 IceWM 已知由于此原因而无法正常工作。
要临时切换到另一个窗口管理器,可以使用 Ratpoison 的 tmpwm 命令:ctrl+t : tmpwm <RET>
多工作区
默认情况下,Ratpoison 只有一个工作区。但 Ratpoison 附带了 rpws 脚本,可用于添加更多工作区。
编辑您的 ~/.ratpoisonrc 并添加:
~/.ratpoisonrc
exec /usr/bin/rpws init 2 -k
这将创建 2 个工作区。默认情况下,您可以使用 Alt+F1 访问第一个,Alt+F2 访问第二个,依此类推。
您也可以为它们添加绑定,如下所示:
bind C-1 exec rpws 1 bind C-2 exec rpws 2
这样就可以通过 Ctrl+t Ctrl+1 访问第一个工作区(假设 Ctrl+t 是您的转义/前缀键)。
URxvt 和 xterm
URxvt 和 xterm 在默认安装时会向窗口管理器发送调整大小提示(resize hints)。这在大多数平铺窗口管理器中有效,但在 Ratpoison 中无效。最终结果是 URxvt/xterm 以字体大小的倍数调整自身大小,而不是调整到整个屏幕,导致出现空白间隙的可能性很高。以下记录了两种解决方案。
安装补丁后的 URxvt
如果您使用 URxvt,rxvt-unicode-fontspacing-noinc-vteclear-secondarywheelAUR 软件包除了其他改进外,不会向 窗口管理器 发送调整大小提示。如果您安装此版本的 URxvt 而非默认版本,URxvt 将在 Ratpoison 中正确调整大小。
调整边框
我们可以使用 URxvt/xterm 的 internalBorder 选项,并将 Ratpoison 的边框设置为 0。
必须通过尝试错误的方法,为每种分辨率和字体大小的组合找到准确的 internalBorder 数值(在测试之前必须将 Ratpoison 的边框设置为 0)。可以使用 term 命令行选项 -b 来测试正确数值,然后将其保存到以下文件中。
~/.Xresources
urxvt*internalBorder: 8 #change urxvt to xterm if necessary. Using the font terminus in urxvt at 14px size, 8 is the correct number here.
~/.ratpoisonrc
set border 0
如果找不到合适的组合,您可以尝试更改字体大小和字体系列(这会改变所需的边框数值)。
自启动
Ratpoison 启动时运行程序的示例。~/.ratpoisonrc 文件在 Ratpoison 启动时被执行。
exec urxvt -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
exec bash -c 'pidof chromium &>/dev/null || exec /usr/bin/chromium --disk-cache-dir=~/tmp/cache'
壁纸与透明度
使用 xcompmgr 和 Nitrogen 设置透明度的示例。首先启动 nitrogen 并设置所需的壁纸。然后在您的 ~/.ratpoisonrc 中使用以下内容:
Wallpaper and transparency
exec xcompmgr -c -f -D 5 & exec nitrogen --restore
焦点随鼠标 (sloppy.c)
sloppy.c 是 Ratpoison 的一个辅助程序,可以在 /usr/share/ratpoison/ 中找到。要启用焦点随鼠标(也称为“sloppy focus”),请运行以下命令:
# cd /usr/share/ratpoison/ # gcc -o sloppy sloppy.c -lX11 # ./sloppy
要自动启动焦点随鼠标功能,请将以下内容添加到您的 ~/.ratpoisonrc:
~/.ratpoisonrc
exec /usr/share/ratpoison/sloppy
ratpoison-sloppymove
Sloppy.c 会抑制通过键盘继续进行焦点更改。一个改进版本的焦点随鼠标(不会干扰键盘驱动的焦点更改)可在 ratpoison-sloppymoveAUR 中获得。
要自动启动 ratpoison-sloppymove,请将以下内容添加到您的 ~/.ratpoisonrc:
~/.ratpoisonrc
exec ratpoison-sloppymove