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