Herbstluftwm (Українська)

Related articles
Window manager
Herbstluftwm
— це ручний тайловий віконний менеджер для X11, який використовуе Xlib.
Встановка
Встановить
пакет
herbstluftwm
або
herbstluftwm-git
AUR
для версії у розробці.
Початок
З 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
#herbstluftwm
— IRC-канал на irc.libera.chat
Користувальницький git-репозиторий №1
з autostart, написаний на Perl, та декільками кастомними скриптами
Користувальницький git-репозиторий №2
з автозапуском та панелью, написаними на Python
GitHub-дискусії
Сабреддіт herbstluftwm