Jump to content

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

From ArchWiki

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.

См. также