跳转至内容

spectrwm

来自 ArchWiki

来自 spectrwm 官网

spectrwm 是一个为 Xorg 设计的小巧的动态平铺窗口管理器。它尽可能地保持低调,以便将宝贵的屏幕空间用于更重要的事情。它拥有合理的默认设置,且无需学习某种语言即可进行配置。它是由黑客为黑客编写的,致力于做到小巧、紧凑且快速。

Spectrwm 使用 C 语言编写,并通过文本配置文件进行配置。它之前的名称是 scrotwm。

安装

安装 spectrwmAUR 软件包。

启动

使用 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 对于闲置一段时间后的屏幕保护、电源管理以及屏幕锁定也非常有用。

有关如何为 xtermxscreensaver 设置字体、颜色和其他设置的详细信息,请参阅 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)
  • 10: 选择工作区 1 到 10
  • Shift+1Shift+0: 将窗口移动到工作区 1 到 10
  • RightLeft: 选择下一个或上一个工作区
  • Shift+RightShift+Left: 选择下一个或上一个屏幕
  • Space: 循环切换布局 (垂直, 水平, 最大化)
  • jk: 正向或反向循环切换窗口
  • TabShift+Tab: 与 Meta+jMeta+k 相同
  • Enter: 将当前窗口移动到主区域
  • hl: 增加或减少主区域的大小

高级堆叠 (同样配合 Meta 键)

  • ,.: 增加或减少主区域中的窗口数量 (默认为 1)
  • Shift+,Shift+.: 在垂直(水平)模式下,增加或减少堆叠区域中的列(行)数 (默认为 1)
  • Shift+jShift+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 来排查故障。

参见

  • dmenu - 由 dwm 开发者制作的简单应用启动器

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.