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

Jump to content

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

From ArchWiki

Related articles

- Window manager

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
- `#herbstluftwm` — IRC-канал на irc.libera.chat
- Користувальницький git-репозиторий №1 з autostart, написаний на Perl, та декільками кастомними скриптами
- Користувальницький git-репозиторий №2 з автозапуском та панелью, написаними на Python
- GitHub-дискусії
- Сабреддіт herbstluftwm

Category:

- Tiling window managers (Українська)

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