Herbstluftwm (Русский)

Перевод
этой статьи или раздела не отражает оригинальное содержание.
Причина:
Очень много орфографических и пунктуационных ошибок. (
Discuss
)
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