Herbstluftwm (Русский) - ArchWiki

Jump to content

# Herbstluftwm (Русский)

From ArchWiki

Перевод этой статьи или раздела не отражает оригинальное содержание.

Причина: Очень много орфографических и пунктуационных ошибок. (Discuss)

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 (Русский)

Hidden category:

- Pages or sections flagged with Template:Bad translation (Русский)

Herbstluftwm (Русский)
Add topic