spectrwm
来自 spectrwm 官网
- spectrwm 是一个为 Xorg 设计的小巧的动态平铺窗口管理器。它尽可能地保持低调,以便将宝贵的屏幕空间用于更重要的事情。它拥有合理的默认设置,且无需学习某种语言即可进行配置。它是由黑客为黑客编写的,致力于做到小巧、紧凑且快速。
Spectrwm 使用 C 语言编写,并通过文本配置文件进行配置。它之前的名称是 scrotwm。
安装
启动
使用 xinit 运行 spectrwm。
配置
spectrwm 会在 ~/.config/spectrwm/spectrwm.conf 和 ~/.spectrwm.conf 中寻找用户配置文件。如果这些文件都不存在,它将打开全局配置文件 /etc/spectrwm.conf。它还支持 XDG 基础目录 (XDG Base Directory) 路径。
可选地,spectrwm 可以调用 baraction.sh(位于用户的 PATH 路径中),该脚本应向 stdout 输出一段文本状态消息,用于显示在状态栏上。
fc-list 命令检查已安装的字体,并在本地配置文件的 bar_font 字段中设置一个。例如~/.spectrwm.conf
bar_font = xos4 Terminus:pixelsize=14
修饰键 (modkey,用于发出命令的主键) 被设置为 Mod4,通常就是 Super 键(Windows 键)。
还有一个屏幕锁定键绑定,默认调用 xlockmore 软件包中的 xlock。
xscreensaver 对于闲置一段时间后的屏幕保护、电源管理以及屏幕锁定也非常有用。
有关如何为 xterm 和 xscreensaver 设置字体、颜色和其他设置的详细信息,请参阅 Xdefaults。运行 xscreensaver-demo 来选择动画(或空白屏)和显示电源管理(推荐)。
按键绑定
默认键绑定位于 /etc/spectrwm/spectrwm_<<键盘布局>>.conf。为了自定义键绑定:
- 在你的
~/.spectrwm.conf中将keyboard_mapping设置为/dev/null
- 将
/etc/spectrwm/spectrwm_<<键盘布局>>.conf的内容复制粘贴到你的~/.spectrwm.conf末尾。
多显示器 (Xinerama)
对于非 Xrandr 的多显示器设置,请创建区域 (regions) 将总桌面区域划分为每个显示器一个区域
region = screen[1]:1280x1024+0+0 region = screen[1]:1280x1024+1280+0
状态栏
要启用状态栏,请取消 /etc/spectrwm.conf(或 ~/.spectrwm.conf)中这两项的注释。默认情况下它们是被注释掉的,状态栏处于禁用状态。
bar_action = baraction.sh bar_delay = 5
Bash 脚本
要测试状态栏,请将以下简单的 baraction.sh 放在 ~/scripts(或 ~/bin)目录中,并且该目录此前已添加到 ~/.bashrc 文件的 $PATH 中。
#!/bin/bash
# baraction.sh script for spectrwm status bar
SLEEP_SEC=5 # set bar_delay = 5 in /etc/spectrwm.conf
COUNT=0
#loops forever outputting a line every SLEEP_SEC secs
while :; do
let COUNT=$COUNT+1
echo -e " Hello World! $COUNT"
sleep $SLEEP_SEC
done
按下 Modkey+Q 重启 spectrwm,几秒钟后你应该能在状态栏中看到输出。如果你在这一步遇到问题,请确保脚本具有可执行权限,在命令行中测试它,并检查你在 bar_action 中指定的路径/文件名。
这里有一些状态栏项的其他创意:以太网、邮件通知、磁盘空间、挂载点、当前播放 (mpc current)。
脚本也可以显示日期,在这种情况下,可以禁用内置时钟
clock_enabled = 0
Conky
除了 bash 脚本,也可以使用 Conky。它应该像下面那样在非图形模式下使用,以向 stdout 输出一个可被 spectrwm 读取的文本字符串。首先安装 conky。没有必要安装精简版的 conky-cliAUR(虽然那样也可以)。
在 ~/.spectrwm.conf 中设置
bar_action = conky
然后在每个用户的 ~/.conkyrc 文件中放置,例如
out_to_x no
out_to_console yes
update_interval 1.0
total_run_times 0
use_spacer none
TEXT
${time %R %a,%d-%#b-%y} |Mail:${new_mails} |Up:${uptime_short} |Temp:${acpitemp}C |Batt:${battery_short} |${addr wlan0} |RAM:$memperc% |CPU:${cpu}% | ${downspeedf wlan0}
替代状态栏
另一种方案是使用 dzen2 来创建状态栏。这样做的好处是可以使用颜色甚至图标,但缺点是该状态栏与 spectrwm 不集成。因此无法显示当前工作区编号、布局,且不支持状态栏切换键绑定。可以使用 "region" 选项来预留所需的屏幕空间。
例如,要在屏幕顶部预留 14 像素
spectrwm.conf
bar_enabled = 0 region = screen[1]:1024x754+0+14
(根据你的屏幕分辨率进行调整)。
然后,例如使用 i3status 来提供信息
$ i3status | dzen2 -fn -*-terminus-medium-*-*-*-*-*-*-*-*-*-*-* &
Spectrwm 自己的状态栏仍然可以通过 Meta+b 来启用或禁用。
屏幕截图
Spectrwm 具有通过键绑定执行名为 screenshot.sh 脚本的功能
Meta+s− 全屏截图Meta+Shift+s− 单个窗口截图
首先安装 scrot,然后将 spectrwm 软件包中提供的默认脚本复制到你的 $PATH 路径中的某个位置,例如
$ cp /usr/share/spectrwm/screenshot.sh ~/bin
屏幕锁定
默认情况下,锁定键绑定 Mod+Shift+Delete 执行 xlock
program[lock] = xlock
另一种方案是,如果 xscreensaver 已经在运行,可以使用
program[lock] = xscreensaver-command -lock
使用 spectrwm
- 为了节省空间,不显示窗口标题栏。窗口边框宽度为 1 像素。边框会改变颜色以指示焦点。
- 布局是动态处理的,可以随时更改。有三种标准布局(堆叠算法):垂直、水平和最大化(在状态栏中分别用
[|],[-]和[ ]表示) - 这里有一个主区域 (master area,工作区) 的概念。任何窗口都可以切换为“主窗口”,然后将在主区域中显示。在垂直(水平)模式下,主区域是屏幕的左(上)部分。主区域的大小可以通过按键调整。默认情况下,主区域包含一个窗口,但可以增加。
- 除主区域外的区域称为堆叠区域 (stacking area)。新窗口会被添加到堆叠区域。默认情况下,堆叠区域在垂直(水平)模式下有一列(行),但这也可以增加。
- 窗口可以被移动到浮动层,即从平铺管理中移除。这对于不适合平铺的程序非常有用。
一些最常用的 Meta 键绑定
Shift+Enter: 打开终端p: 调用 dmenu (在这里你可以输入程序名称的开头并按Enter)1到0: 选择工作区 1 到 10Shift+1到Shift+0: 将窗口移动到工作区 1 到 10Right或Left: 选择下一个或上一个工作区Shift+Right或Shift+Left: 选择下一个或上一个屏幕Space: 循环切换布局 (垂直, 水平, 最大化)j或k: 正向或反向循环切换窗口Tab或Shift+Tab: 与Meta+j或Meta+k相同Enter: 将当前窗口移动到主区域h或l: 增加或减少主区域的大小
高级堆叠 (同样配合 Meta 键)
,或.: 增加或减少主区域中的窗口数量 (默认为 1)Shift+,或Shift+.: 在垂直(水平)模式下,增加或减少堆叠区域中的列(行)数 (默认为 1)Shift+j或Shift+k: 与下一个或上一个窗口交换位置t: 在浮动和平铺之间切换
鼠标绑定
鼠标悬停 (Mouseover): 聚焦窗口Meta+左键+拖拽: 移动窗口 (如果是平铺状态则变为浮动)Meta+右键+拖拽: 调整浮动窗口大小Meta+Shift+右键+拖拽: 调整浮动窗口大小并保持居中
其他有用绑定 (配合 Meta 键)
x: 关闭窗口Shift+x: 强制杀死窗口b: 隐藏或显示状态栏q: 重启 spectrwm (重置桌面并重新读取 spectrwm 配置,而无需停止运行中的程序)Shift+q: 退出 spectrwm
故障排除
救命,我刚登录完,看到的只有个空白屏幕
按下 Shift+Super+Enter 将启动一个 xterm。其他默认键绑定请参阅 手册。同时检查你的配置文件。
为什么我的窗口会在当前活动桌面以外的桌面打开?
目前使用窗口的 PID 来决定新窗口所属的桌面。例如对于终端,可以通过传递参数来在新的进程中打开终端来绕过此问题。
救命,运行 startx 后 Xorg 终止了
确保所有依赖项(如 xlockmore)已安装。
你也可以在另一个 xsession 中使用 Xephyr 运行你的 xinitrc 来排查故障。
参见
- spectrwm - spectrwm 官方网站