Herbstluftwm (Русский)
Herbstluftwm — это ручной тайловый оконный менеджер для X11, который использует Xlib.
Установка
Установите пакет herbstluftwm или herbstluftwm-gitAUR для версии в разработке.
Начало
Из tty
Запустите herbstluftwm через xinit.
Для этого используйте команду:
touch ~/.xinitrc (если еще не создан) echo "exec herbstluftwm" >> ~/.xinitrc
Дисплейный менеджер
herbstluftwm включает в себя файл herbstluftwm.desktop как Xsession, который запускает тайловый оконный менеджер.
Из другого оконного менеджера
Если вы уже находитесь внутри другого оконного менеджера, вы можете заменить его на herbstluftwm, используя herbstluftwm --replace.
Первые шаги
Прочтите страницы man herbstluftwm(1) и herbstclient(1). Они содержат большое количество информации — от объяснения бинарного дерева, в котором сохраняются режимы оконного менеджера, до настроек конфигурационного файла и возможных значений параметров.
Конфигурация
Скопируйте /etc/xdg/herbstluftwm/autostart в ~/.config/herbstluftwm/autostart. Вы можете редактировать этот файл под свои нужды. Убедитесь, что файл autostart является исполняемым, иначе вы можете остаться без привязок клавиш!
Конфигурация herbstluftwm может обновляться на лету с помощью herbstclient reload (см. #Команды). Autostart запускается при каждом перезапуске, поэтому во время его выполнения все клавиши и настройки временно удаляются, а затем привязываются заново.
Поддержка нескольких мониторов
Herbstluftwm поддерживает несколько мониторов как виртуальную концепцию: мониторы в herbstluftwm не обязаны соответствовать реальной конфигурации экранов, о которой сообщает xrandr. Это даёт большую гибкость и предоставляет пользователю больше контроля над настройкой мониторов.
Вы можете использовать herbstclient detect_monitors, чтобы автоматически настроить мониторы. Также вы можете прочитать man-страницы о том, как добавлять, удалять, менять разрешения и перемещать мониторы.
Тэги с несколькими мониторами не "принадлежат" конкретному монитору. Это означает, что когда один монитор переключается на тэг, который активен на другом мониторе, мониторы обмениваются тэгами.
Команды
Herbstclient — это мощная утилита, которая предоставляет полный контроль над оконным менеджером из терминала.
Для параметров herbstclient доступно автодополнение по Tab. Попробуйте herbstclient list_commands, чтобы увидеть все доступные команды.
В настоящее время при использовании неверного параметра команда не выводит сообщение об ошибке и просто возвращает нулевое значение. Если вы хотите увидеть код возврата команды (например в ваш $SHELL-prompt), вы можете использовать echo $? для отображения значения, возвращённого последней командой.
Скрипты и хуки
Основной способ управления herbstluftwm — это команды herbstclient. Поскольку herbstclient может быть вызван из любого скрипта, вы получаете большую гибкость в управлении оконным менеджером. Кроме того, вы можете прослушивать события управления окнами и реагировать на них соответствующим образом.
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-скрипт демонстрирует, как использовать хуки для реакции на различные действия с тэгами. Он может быть запущен в автозапуске (в фоновом режиме).
#!/usr/bin/perl
# Этот скрипт отслеживает переключения между тэгами и обеспечивает визуальный отклик
## Конфигурация (заполните именами своих тэгов)
my %colors = (
main => '#DD0000',
devel => '#13B8E0',
write => '#96E013',
admin => '#C713E0'
);
## Применяем цвет тэга
# Здесь мы меняем цвет активной рамки окна на цвет тэга.
sub redecorate
{
my ($foo, $activity) = @_;
system("herbstclient", "set", "window_border_active_color",
"$colors{$activity}");
}
use v5.20;
# Устанавливаем посредника для чтения хуков
open HOOKS, "herbstclient -i '(tag_changed|reload)'|"
or die "can't fork: $!";
# Обработка входящий сообщений
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: $! $?"; # происходит на краше hlwm
Устранение неполадок
- После установки привязка клавиш
$mod+Enterне запускает терминал: файл автозапуска herbstluftwm по умолчанию использует xterm. Убедитесь, что xterm установлен, либо отредактируйте файл autostart для использования другого терминала. - Чтобы выйти из herbstluftwm, используйте команду
herbstclient quitили стандартную привязку клавиш$mod+Shift+Q.
См. также
- Домашняя страница herbstluftwm
- Тред на Arch Linux BBS
-
/usr/share/doc/herbstluftwm/examples/— различные скрипты -
/usr/share/doc/herbstluftwm/BUGS— известные ошибки - Тред herbstluftwm на форуме CrunchBang
- Скриншоты и файлы конфигураций: на форуме Arch Linuxна DotShare.it[dead link 2025-08-15—HTTP 404]
-
#herbstluftwm— IRC-канал на irc.libera.chat - Пользовательский git-репозиторий №1 с autostart, написанным на Perl, и несколькими кастомными скриптами
- Пользовательский git-репозиторий №2 с автозапуском и панелью, написанными на Python
- GitHub-дискуссии
- Сабреддит herbstluftwm