Herbstluftwm
Herbstluftwm 是一个使用 Xlib 的 X11 手动平铺窗口管理器。
安装
安装 herbstluftwm 软件包或 herbstluftwm-gitAUR 开发版本。
启动
从 tty 启动
使用 xinit 运行 herbstluftwm
。
显示管理器
herbstluftwm 包含 herbstluftwm.desktop
作为 Xsession,用于启动窗口管理器。
从其他窗口管理器内部启动
如果您已在窗口管理器会话中,可以通过运行 herbstluftwm --replace
将该窗口管理器替换为 herbstluft。
第一步
阅读 herbstluftwm(1) 和 herbstclient(1) 手册页,它们包含大量信息,从布局所保留的二叉树的解释到配置文件选项和可能的值。
配置
复制 /etc/xdg/herbstluftwm/autostart
文件到 ~/.config/herbstluftwm/autostart
。您可以根据需要编辑该文件。确保 autostart 文件是可执行的,否则您可能会最终没有快捷键!
herbstluftwm 的配置可以通过运行 herbstclient reload
动态更新(参见 #命令)。Autostart 在每次重新加载时都会被调用,因此在 autostart 中,您通常首先取消映射所有现有配置。
多显示器支持
Herbstluftwm 支持多个显示器作为虚拟概念;herbstluftwm 中的显示器不必与 xrandr 报告的真实显示器配置相匹配。它带来了很大的灵活性,并让用户可以更好地控制其显示器布局。您可以使用 herbstclient detect_monitors
自动适应物理设置。否则,请参阅手册页,了解如何添加、删除、调整大小和移动显示器。多显示器设置中的标签页不归任何显示器“拥有”。这意味着当一个显示器切换到另一个显示器中处于活动状态的标签页时,两个显示器将交换标签页。
命令
Herbstclient 是一个非常强大的工具,因为它使您可以从命令行完全控制窗口管理器。
herbstclient 的参数有 Tab 补全功能。尝试 herbstclient list_commands
以显示所有参数。
如果您在命令中使用错误的参数,目前没有错误消息,但只有一个非零返回值。如果您无论如何都不显示命令的返回值(例如在您的 $SHELL 提示符中),您可能需要 echo $?
来查找上一个命令的返回值。
脚本和钩子
控制 herbstluftwm 的主要方法是通过向 herbstclient 发送命令。由于可以从任何脚本调用 herbstclient,因此您可以非常灵活地以这种方式控制 herbstluftwm。此外,您可以监听窗口管理事件并相应地做出反应。
Herbstluftwm 包含许多示例脚本:/usr/share/doc/herbstluftwm/examples/
或 https://github.com/herbstluftwm/herbstluftwm/tree/master/scripts
切换到下一个空标签页的脚本
以下 python 脚本允许您切换到(下一个或上一个)(满或空)标签页。使用参数(+1 或 -1)和(full 或 empty)调用它。例如,如果您将脚本保存为 herbst-move.py,则
python3 herbst-move.py +1 full
将使您移动到下一个满标签页。我使用以下快捷键绑定。
hc keybind $Mod-Left spawn herbst-move.py -1 empty hc keybind $Mod-Right spawn herbst-move.py +1 empty hc keybind $Mod-Up spawn herbst-move.py -1 full hc keybind $Mod-Down spawn herbst-move.py +1 full
这是脚本。
#!/usr/bin/env python3 def run(*cmd): from subprocess import Popen, PIPE proc = Popen(cmd, shell=False, stderr=PIPE, stdout=PIPE) return proc.stdout.read() import sys tag_offset, mode = sys.argv[1:] tag_offset = int(tag_offset) if mode == 'full': ch = {'.'} elif mode == 'empty': ch = {':', '!'} else: raise Exception('Unknown type ' + mode) tag_list = run('herbstclient', 'tag_status', '0').strip().decode('ascii').split('\t') tag_curr = int(run('herbstclient', 'attr', 'tags.focus.index').strip()) tag_next = (tag_curr + tag_offset) % len(tag_list) while (tag_next != tag_curr) and (tag_list[tag_next][0] in ch): tag_next = (tag_next + tag_offset) % len(tag_list) if tag_next != tag_curr: run('herbstclient', 'use_index', str(tag_next))
循环切换边距(或其他设置)的脚本
这是一个 ruby 脚本,用于循环切换一组边距,尽管您可以修改它以循环切换任何设置集合。该脚本通过查找 /tmp 中是否存在两个虚拟文件来了解先前的布局。
#!/usr/bin/ruby file1 = "/tmp/herbst-padding-1" file2 = "/tmp/herbst-padding-2" pad1 = 'pad 0 0 0 0 0' pad2 = 'pad 0 0 20 0 200' pad3 = 'pad 0 0 0 0 150' files = [file1, file2].map{|f| File.exist? File.expand_path(f)} if files == [false, false] # 0 files system "herbstclient #{pad2}" system "touch #{file1}" elsif files == [true, false] # 1 file system "herbstclient #{pad1}" system "touch #{file2}" else # 2 files system "herbstclient #{pad3}" system "rm #{file1} #{file2}" end
根据标签页更改装饰的脚本
以下 Perl 脚本演示了如何使用钩子来响应窗口管理事件。可以在 autostart 中调用它(在后台运行)。
#!/usr/bin/perl # This script watches for tag changes and gives visual feedback ## Configuration (fill with your tag names) my %colors = ( main => '#DD0000', devel => '#13B8E0', write => '#96E013', admin => '#C713E0' ); ## Apply tag color # Right now we change the active window's border color to the tag's color. sub redecorate { my ($foo, $activity) = @_; system("herbstclient", "set", "window_border_active_color", "$colors{$activity}"); } ## main routine use v5.20; # set up a pipe for reading hooks open HOOKS, "herbstclient -i '(tag_changed|reload)'|" or die "can't fork: $!"; # process incoming messages OUTER: while (<HOOKS>) { chomp; for ($_) { redecorate(split(/\t/)) when /^tag_changed/; last OUTER when /^reload/; # quit on reload } } close HOOKS or die "unfinished love story: $! $?"; # happens on hlwm crash
故障排除
- 安装后,
$mod+enter
快捷键未启动终端:herbstluftwm autostart 配置文件默认使用 xterm 终端。确保已安装 xterm 或编辑 autostart 文件以使用其他终端。 - 要注销 herbstluftwm,请使用命令
herbstclient quit
或默认快捷键$mod+shift-q
参见
- herbstluftwm 首页
- Arch Linux BBS 帖子
/usr/share/doc/herbstluftwm/examples/
- 各种脚本/usr/share/doc/herbstluftwm/BUGS
- 错误- CrunchBang 论坛上的 herbstluftwm 帖子
- 屏幕截图和配置文件: 在 Arch Linux 论坛上,在 DotShare.it 上
#herbstluftwm
- irc.libera.chat 上的 IRC 频道- 用户 git 仓库 #1,其中 autostart 用 Perl 编写,并包含一些自定义脚本
- 用户 git 仓库 #2,其中 autostart 和面板用 Python 编写
- Github 讨论区
- Herbstluftwm Subreddit