Руководство пользователя i3

Автор: Майкл Штапельберг, michael@i3wm.org

Перевод: Алексей Литовский, a.leetovskiy@gmail.com

Руководство пользователя i31. Стандартные сочетания клавиш2. Использование i32.1. Запуск терминала и переключение между окнами2.2. Изменение раскладки контейнера2.3. Переключение полноэкранного режима окна2.4. Запуск других приложений2.5. Закрытие окон2.6. Использование рабочих пространств2.7. Перемещение окон между рабочими пространствами2.8. Изменение размера2.9. Перезапуск i32.10. Выход из i32.11. Плавающий режим3. Дерево3.1. Дерево состоит из контейнеров3.2. Ориентация и сплит-контейнеры3.3. Фокусировка на родителе3.4. Неявные контейнеры4. Настройка i34.1. Комментарии.4.2 Шрифты4.3. Клавиатурные бинды4.4. Бинды для мыши4.5. Режимы привязки4.6. Floating-модификатор4.7. Ограничение размеров плавающего окна4.8. Ориентация для новых рабочих областей4.9. Режим раскладки для новых контейнеров4.10. Выравнивание заголовков окон4.11. Стилизация границы для новых окон4.13. Произвольные команды для конкретных окон (for_window)4.14. Отключить фокусировку на новом окне4.15. Переменные4.16. Ресурсы X4.18. Автозапуск приложений в i34.19. Автоматизация перемещения рабочих областей на конкретные экраны4.20. Изменение цвета4.21. Межпроцессное взаимодействие4.22. Следование фокуса за мышью4.23. Искажение мыши4.24. Всплывающие окна в полноэкранном режиме4.25. Обертка фокуса4.26. Принудительное использование Xinerama4.28. Задержка сброса метки срочности при смене рабочего места4.29. Фокус при активации окна4.30. Отображение меток на оформлении окна4.31. Продолжение строки5. Настройка i3bar5.1. Команда i3bar5.2. Команда строки статуса5.3. Режим отображения5.4. Команды кнопок мыши5.5. ID панели5.6. Позиция5.7. Вывод(ы)5.8. Вывод трея5.9. Отступ трея5.10. Шрифт5.11. Пользовательский символ разделителя5.12. Кнопки рабочей области5.13. Минимальная ширина для кнопок раб. области5.14. Удалить номер/имя раб. области5.15. Индикатор режима привязки5.16. Цвета5.17. Прозрачность6. Список команд

Эта документация содержит всю информацию, которая пригодится для использования и конфигурации оконного менеджера i3. Если по прочтении у Вас остались вопросы, пожалуйста, загляните сначала на https://www.reddit.com/r/i3wm/, затем свяжитесь с нами по IRC (предпочтительно) или опубликуйте свой вопрос в списке почтовой рассылки.

1. Стандартные сочетания клавиш

Специально для людей, которые не любят много читать, есть небольшая шпаргалка со стандартными сочетаниями клавиш.

Сочетания с использованием клавиши $mod (Alt или Super):

Сочетания с использованием клавиши $mod (Alt или Super)

Сочетания с использованием клавиш Shift+$mod:

Сочетания с использованием клавиш Shift+$mod

Красные клавиши это модификаторы, которые нужно зажать, голубые – домашний ряд.

Обратите внимание, если запуск i3 сопровождается отсутствием конфигурационного файла, i3-config-wizard предложит создать его. Позиции клавиш в этом случае будут совпадать с теми, что изображены на шпаргалке, независимо от раскладки клавиатуры. Если Вы хотите использовать файл конфигурации, где буквенные клавиши совпадают с тем, что вы видите выше, просто отклоните предложение i3-config-wizard и основывайте свою конфигурацию на файле /etc/i3/config (прим. переводчика: имеется ввиду, что во втором случае Вы хотите использовать именно буквенные сочетания вместо позиций клавиш).

2. Использование i3

В этом руководстве ключевое слово $mod ссылается на сконфигурированный модификатор клавиш. По умолчанию это клавиша Alt (Mod 1) или Windows (Mod 4), которая является популярной альтернативой, предотвращающей конфликты между сочетаниями клавиш, используемыми приложениями.

2.1. Запуск терминала и переключение между окнами

Одна из самых базовых операций это запуск терминала. По умолчанию для этого используется сочетание клавиш $mod+Enter или Alt+Enter (Mod1+Enter) в стандартной конфигурации. По нажатию $mod+Enter откроется новый терминал. Он займет все доступное пространство на экране.

Окно терминала

Теперь, если открыть еще один терминал, i3 поместит его после существующего, разделив экран пополам. В зависимости от Вашего монитора, созданное окно появится рядом с существующим окном (на широких экранах) или под ним.

Два терминала рядом

Чтобы переместить фокус между двумя терминалами можно использовать клавиши направления идентичные редактору Vi. Однако, в i3 используется домашний ряд, а в Vi эти клавиши смещены влево на одну для совместимости с большинством клавиатурных раскладок. Следовательно, $mod+j – направление влево, $mod+k – направление вниз, $mod+l – вверх, $mod+; – вправо. То есть, чтобы переключиться между терминалами нужно использовать $mod+k или $mod+l. И, конечно же, Вы можете использовать клавиши стрелок. Сейчас рабочая область разделена (она содержит два окна терминала) в определенном направлении (горизонтальное по умолчанию). Каждое окно можно разделить еще раз по горизонтали или вертикали прямо как рабочую область, которую мы до этого разделили. Термин "окно" используется для контейнера, который на самом деле содержит окно X11 такие, как терминал или браузер, а "split-контейнер" (разделенный контейнер, далее – сплит-контейнер) для контейнеров, которые состоят из одного или нескольких окон. Чтобы разделить окно по вертикали нажмите $mod+v, прежде чем создать новое окно.

2.2. Изменение раскладки контейнера

Сплит-контейнер может иметь одну из следующих раскладок:

splith/splitvstackingtabbed
Окна масштабируются по принципу, чтобы каждое из них забирало равное пространство контейнера. splith распределяет окна по горизонтали (они находятся рядом друг с другом), а splitv распределяет их по вертикали (окна находятся друг над другом).В контейнере отображается только то окно, которое в фокусе. Также, сверху контейнера появляется список окон.Аналогичен stacking, только список окон отображается горизонтально, как вкладки в браузере.

Чтобы переключаться между режимами раскладки используйте $mod+e для splith/splitv (переключаются между друг другом), $mod+s для stacking и $mod+w для tabbed.

Режимы раскладки контейнера

2.3. Переключение полноэкранного режима окна

Для того, чтобы включить или выключить полноэкранный режим окна используйте $mod+f.

Также, в i3, существует глобальный полноэкранный режим, который охватывает все доступные выводы. Переключается командой fullscreen toggle global.

2.4. Запуск других приложений

Вместо того, чтобы запускать приложения из терминала можно использовать удобный лаунчер dmenu, который по умолчанию открывается сочетанием клавиш $mod+d. Просто наберите имя приложения (или его часть), которое хотите запустить. Для работы требуется, чтобы приложение находилось в переменной $PATH.

Также, для приложений, которые Вы запускаете часто, можно напрямую задать сочетания клавиш. Подробнее в разделе Настройка.

2.5. Закрытие окон

Если приложение не предусматривает механизм завершения (большинство из них предусматривает меню, клавишу escape или горячие клавиши типа Control-w для закрытия), можно использовать $mod+Shift+q, чтобы "убить" окно. Для приложений, которые поддерживают протокол WM_DELETE, это действие правильно закроет окно (сохранит любые изменения и т.п.). Если же приложение не поддерживает WM_DELETE, то X-сервер просто "убьет" окно, а поведение будет зависеть от определенного приложения.

2.6. Использование рабочих пространств

Рабочие пространства (workspaces) это простой способ сгруппировать набор окон. По умолчанию Вы находитесь на первом рабочем пространстве, об этом сообщает индикатор на панели, что находится внизу слева. Чтобы переключиться на другое рабочее пространство нажмите $mod+num, где num это номер рабочего пространства, которое Вы хотите использовать. Если его не существует, оно будет создано.

Простое применение для этого – переместить браузер на одно рабочее пространство, приложения для общения в сети в другое, а те, с которыми Вы работаете, в третье. Конечно же, Вы не обязаны использовать этот подход.

Если у Вас несколько мониторов, рабочее пространство будет создано для каждого из них во время запуска. Если создать новое рабочее пространство, оно будет привязано к тому экрану, на котором было создано. При переключении к рабочему пространству из другого монитора i3 установит фокус на этот экран.

2.7. Перемещение окон между рабочими пространствами

Чтобы переместить окно в другое рабочего пространство просто нажмите $mod+Shift+num, где num это номер нужного пространства. Также как при переключении, нужное пространство будет создано, если его еще не существует.

2.8. Изменение размера

Самый простой способ изменить размер контейнера это использовать мышь: зажмите мышь на границе окна и тяните ее до нужного размера.

Также можно использовать режим привязки клавиш, чтобы менять размеры окна используя клавиатуру. Для примера гляньте на стандартный конфигурационный файл предоставленный i3.

 

2.9. Перезапуск i3

Чтобы перезапустить i3 нажмите $mod+Shift+r. Пригодится, если произошла какая-то ошибка или нужно обновиться до новой версии оконного менеджера.

2.10. Выход из i3

Чтобы выйти из i3 не завершая работу X-сервера можно использовать $mod+Shift+e. По умолчанию появится диалоговое окно, которое попросит подтвердить операцию.

2.11. Плавающий режим

Плавающий (floating) режим является обратным тайловому. Положение и размеры окна регулируются пользователем вручную, а не автоматическим режимом i3. Использование этого режима нарушает парадигму тайлинга, но может быть полезно для некоторых случаев, когда появляются диалоговые окна (например, "Сохранить как") или окна панели инструментов (GIMP или подобные). Такие окна обычно оставляют подсказку для оконных менеджеров и открываются в плавающем режиме по умолчанию.

Переключить плавающий режим для окна можно с помощью сочетаний $mod+Shift+Space. Перетаскивая заголовок окна с помощью мыши можно перемещать окно по рабочему пространству. Чтобы изменить размер нужно зажать и тянуть рамку окна. Также это можно делать с помощью floating_modifier (модификатора плавающих окон). Еще один способ это зажать и тянуть ПКМ в заголовке окна.

Об изменении размера плавающих окон с клавиатуры см. режим привязки изменения размера, предусмотренный конфигурацией i3 по умолчанию.

Плавающие окна всегда находятся поверх тайлинговых.

3. Дерево

i3 собирает всю информацию из вывода X11. Рабочие пространства и расположение окон находятся внутри некоего дерева. Корневым узлом является корневое окно X11, за ним следуют выводы X11, затем области стыковки и контейнер содержимого, рабочие области и, наконец, сами окна.

В предыдущих версиях i3 мы имели несколько списков (выводов, рабочих пространств) и таблицу для каждой рабочей области. Этот подход оказался сложным для использования, понимания и реализации.

3.1. Дерево состоит из контейнеров

Кирпичики нашего дерева это контейнеры. Контейнер может содержать окно. Имеется в виду окно X11, которое можно видеть и использовать (например, браузер). Помимо этого, контейнер может содержать другие контейнеры. Простой пример – рабочее пространство: когда i3 запущен с одним монитором, одним рабочим пространством и открыто два терминальных окна, дерево будет выглядеть так:

Дерево окон

Два терминальных окна в одном контейнере

3.2. Ориентация и сплит-контейнеры

При использовании дерева в качестве структуры данных вполне естественно использовать так называемые сплит-контейнеры (разделенные контейнеры) для построения раскладки. В i3 каждый контейнер имеет свою ориентацию (горизонтальная, вертикальная или неопределенная) и зависит она от раскладки этого контейнера (вертикальная для splitv и stacking, горизонтальная для splith и tabbed). В нашем примере с рабочим пространством раскладкой по умолчанию для контейнера является splith (большинство мониторов в настоящее время широкоэкранные). Если изменить раскладку на splitv ($mod+v по умолчанию) и открыть два терминала, то i3 расположит их таким образом:

Вертикальная ориентация

С версии 4 i3 имеет интересную возможность – разделять все что угодно: представим, что у нас есть два терминала в рабочем пространстве (в раскладке splith, что является горизонтальной ориентацией), фокус окна стоит на правом терминале. Теперь давайте откроем еще один терминал ниже существующего. Если бы мы просто открыли новое окно терминала, то оно отобразилось бы справа благодаря splith-раскладке. Вместо этого нажмите $mod+v, чтобы разделить контейнер следуя splitv-раскладке (чтобы открыть горизонтальный сплит-контейнер используйте $mod+h). Теперь можно открыть терминал и он появится ниже существующего:

Вертикальный сплит-контейнер

Дерево окон

Вы, наверное, уже догадались, что нет ограничения в том, насколько глубокой может быть иерархия сплитов.

3.3. Фокусировка на родителе

Давайте оставим вышеуказанный пример. У нас есть терминал слева и два вертикально разделенных терминала справа, фокус на нижнем правом. При открытии нового окна оно откроется ниже текущего.

Как открыть терминальное окно справа от существующего? Для этого нужно переместить фокус на родительский контейнер. В конфигурации по умолчанию для этого используется $mod+a, чтобы переместиться на один контейнер выше по дереву (эту операцию можно повторить несколько раз, пока Вы не попадете на контейнер рабочего пространства). В нашем случае вы переместите фокус на вертикальный контейнер, который находится внутри горизонтально ориентированной рабочей области. Теперь новые окна будут открываться справа от вертикального сплит-контейнера:

shot3

3.4. Неявные контейнеры

В некоторых случаях i3 необходимо неявно создать контейнер для выполнения команды пользователя.

Например: вы запускаете i3 с одним монитором и одной рабочей областью, на которой открываете 3 терминальных окна. Все эти окна напрямую прикрепляются к одному узлу внутри дерева раскладки i3 – узлу рабочей области. По умолчанию узел рабочей области ориентирован горизонтально.

Теперь вы перемещаете один из этих терминалов вниз ($mod+Shift+k по умолчанию). Ориентация узла рабочей области изменится на вертикальную. Окно терминала, которое вы переместили вниз, прикреплено непосредственно к рабочей области и появляется в нижней части экрана. Для размещения двух других окон терминала был создан новый (горизонтальный) контейнер. Вы заметите это при переходе в режим вкладок (например). В результате у вас появится одна вкладка с изображением разделенного контейнера (например, "H[urxvt firefox]"), а другая - терминальное окно, которое вы переместили вниз.

4. Настройка i3

Здесь начинается настоящее веселье! У каждого имеется свое представление идеального рабочего окружения, поэтому мы не можем сделать разумные настройки по умолчанию для всех пользователей.

Несмотря на то, что i3 не использует язык программирования для конфигурации, он остается достаточно гибким для того, что вы обычно хотите от оконного менеджера.

Например, вы можете настроить: сочетания клавиш для отдельных окон, горячие клавиши для запуска определенных приложений на определенном рабочем пространстве, автоматический запуск приложений, внешний вид i3, установить ваши собственные сочетания клавиш для каких-нибудь полезных вещей.

Чтобы изменить конфигурацию i3 скопируйте файл из /etc/i3/config в ~/.i3/config (или в ~/.config/i3/config, если вам нравится схема директорий XDG) и отредактируйте его любым текстовым редактором.

При первом запуске (и любом другом, если у вас нет конфигурационного файла) i3 предложит создать конфигурационный файл. В мастере настроек можно выбрать между использованием Alt (Mod1) или Windows (Mod4) в качестве модификатора. Кроме того, созданный конфигурационный файл будет использовать ключевые символы, основываясь на вашей текущей раскладке клавиатуры. Чтобы запустить мастер настройки используйте команду i3-config-wizard. Обратите внимание, что у вас не должно быть файла ~/.i3/config, иначе мастер настройки просто закроется.

i3, начиная с версии 4.0, использует новый формат конфигурации. i3 попытается автоматически определить версию формата конфигурационного файла, основываясь на нескольких различных ключевых словах, но если вы хотите убедиться, что ваш конфигурационный файл читается в новом формате, включите следующую строку в ваш конфигурационный файл:

# i3 config file (v4)

4.1. Комментарии.

Рекомендуется использовать комментарии в конфигурационном файле, чтобы правильно задокументировать ваши настройки для последующего использования. Комментарии начинаются с символа # и могут быть использованы только в начале строки:

# Это строка с комментарием

4.2 Шрифты

i3 поддерживает как основные шрифты X, так и шрифты FreeType (с помощью Pango) для отображения оконных заголовков.

Для генерации описания шрифта X можно использовать xfontsel(1). Чтобы увидеть специальные символы (Unicode), вам нужно использовать шрифт, который поддерживает кодировку ISO-10646.

Описание шрифтов FreeType состоит из семейства шрифтов (font family), стиля (style), толщины (вес, weight), варианта (variant), растяжки (stretch) и размера (size). Шрифты FreeType поддерживают отображение справа налево и чаще всего содержат больше Unicode-символов, нежели основные шрифты X.

Если i3 не может открыть заданный в конфигурации шрифт, то он выведет ошибку в log-файл и будет использовать тот, который работает.

Синтаксис:

Примеры:

4.3. Клавиатурные бинды

Клавиатурные бинды (привязки клавиш) говорят i3, что нужно запустить команду (см. ниже) при нажатии определенной клавиши. i3 позволяет вам забиндить (привязать) как на конкретный keycode (клавиатурный код), так и на keysym (определенный символ). Вы также можете смешивать эти два подхода, но i3 не защитит вас от случая, когда бинды пересекаются.

Рекомендация от автора документации: если вы часто меняете раскладку клавиатуры, но хотите оставить бинды в том же физическом расположении клавиатуры, используйте keycodes. Если вы не меняете раскладку и хотите иметь чистый и простой конфигурационный файл, то используйте keysyms.

Некоторые утилиты (такие как import или xdotool) могут не запускаться при нажатии клавиш, потому что клавиатура/курсор все еще удерживаются. Для подобных ситуаций может быть полезен флаг --release, который выполнит команду после того, как клавиши будут отпущены.

Синтаксис:

Примеры:

Доступные модификаторы

От Mod1 до Mod5, Shift, Control – стандартные модификаторы, см. xmodmap(1).

Group1, Group2, Group3, Group4

При использовании нескольких раскладок клавиатуры (например setxkbmap -layout us,ru) можно указать в какой группе XKB должна быть активна раскладка клавиатуры. По умолчанию бинды клавиш переведены в Group1 и активны во всех группах. Если вы хотите переопределить бинды клавиш в одной из ваших раскладок, установите соответствующую группу. Для обратной совместимости используйте "Mode_switch" в качестве алиаса для Group2.

4.4. Бинды для мыши

Бинды для мыши сообщают i3 о том, что нужно выполнить определенную команду, когда нажата заданная кнопка мыши в рамках контейнера, где вы кликнули (см. [command_criteria] TODO: добавить ссылку на раздел). Вы можете настроить бинды для мыши таким же образом, как и для клавиатурных клавиш.

Синтаксис:

По умолчанию бинды будут работать тогда, когда вы кликаете по заголовку окна. Если установлен флаг --release, то команда будет запущена после того, как кнопка мыши будет отпущена.

Если установлен флаг --whole-window, бинд выполнится в любой части окна, за исключением границы. Чтобы изменить поведение с границей окна установите флаг --border.

Если установлен флаг --exclude-titlebar, то строка заголовка не будет учитываться.

Примеры:

4.5. Режимы привязки

Используя разные режимы привязки вы можете установить несколько наборов биндов. При переходе в другой режим привязки все бинды из текущего режима освобождаются, и только бинды, определенные в новом режиме, будут действительны до тех пор, пока вы остаетесь в нем. Единственный заранее определенный режим привязки это стандартный (default). С ним изначально i3 начинает работу и ему же принадлежат все бинды, которые не определены в конкретный режим.

Работа с режимами привязки складывается из двух вещей: определение режима привязки и переключение к нему. Для этих задач есть одна конфигурационная директива и одна команда. Оба из них называются режимами. Директива используется для определения биндов, принадлежащих конкретному режиму привязки, при этом команда переключится в заданный режим.

Рекомендуется использовать режимы привязки в паре с переменными, чтобы облегчить поддержку конфигурации. Ниже есть пример того как использовать режим привязки.

Обратите внимание, что рекомендуется назначить бинды для возврата в режим по умолчанию.

Для режимов привязки можно использовать [pango_markup(TODO: указать ссылку)], но необходимо будет включить его, передав флаг --pango_markup в определение режима.

Синтаксис:

 

Пример:

4.6. Floating-модификатор

Для перемещения плавающих окон можно тянуть их мышью за заголовок или настроить так называемый floating-модификатор, который вы можете затем нажать и щелкнуть в любом месте самого окна, чтобы переместить его. Наиболее распространенной практикой является использование той же клавиши, которой вы используете для управления окнами (Mod1, например). Затем вы можете нажать кнопку Mod1, щелкнуть по окну левой кнопкой мыши и перетащить его в нужное положение.

Удерживая floating-модификатор, вы можете изменить размер плавающего окна, нажимая на него правой кнопкой мыши и перемещая курсор, удерживая клавишу. Если при этом зажать клавишу Shift, то изменение размера будет пропорциональным.

Синтаксис:

Пример:

4.7. Ограничение размеров плавающего окна

Можно указать максимальные и минимальные размеры для плавающих окон. Если из размерностей floating_maximum_size указан в значении "-1", то эта размерность будет неограниченной по отношению к ее максимальному значению. Если же размерность не определена или указана как "0", то i3 будет использовать значение по умолчанию для ограничения максимального размера. Это же относится и к параметру floating_minimum_size.

Синтаксис:

Пример:

4.8. Ориентация для новых рабочих областей

Новые рабочие области по умолчанию получают разумную ориентацию: широкоэкранные мониторы (когда ширина больше высоты) получают горизонтальную ориентацию, поворачивающиеся дисплеи (когда высота больше ширины) – вертикальную.

С помощью директивы default_orientation можно изменить это поведение.

Синтаксис:

Пример:

4.9. Режим раскладки для новых контейнеров

Эта опция определяет в каком режиме будут запускаться новые контейнеры на уровне рабочей области.

Синтаксис:

Пример:

4.10. Выравнивание заголовков окон

Эта опция определяет выравнивание текста в заголовке окна. По умолчанию установлен left.

Синтаксис:

4.11. Стилизация границы для новых окон

Эта опция определяет стиль для границ новых окон. Значение по умолчанию – normal. Обратите внимание, default_floating_border применяется только к окнам, которые изначально запущены в режиме floating (например, диалоговые окна) и не применяется к тем, которые стали плавающими позже.

Установка стиля границы в режим pixel исключает строки заголовков. Стиль normal позволяет регулировать ширину границы, сохраняя при этом строку заголовка.

Синтаксис:

Обратите внимание, что new_window и new_float устарели в пользу вышеуказанных опций и будут удалены в будущем. Мы настоятельно рекомендуем использовать новые опции вместо них.

Пример:

Опции "normal" и "pixel" поддерживают ширину границ в пикселях, хотя это не обязательно указывать.

Пример:

4.13. Произвольные команды для конкретных окон (for_window)

Используя директиву for_window можно позволить i3 выполнить любую команду при столкновении с определенным окном. Например, это можно использовать, чтобы установить окна в плавающий режим или изменить стиль его границ.

Синтаксис:

Пример:

Действующие критерии (условия) и команды см. в разделе command_criteria (TODO: добавить ссылку на раздел 6). Выполняться могут только команды, а не директивы конфигурации, см. раздел list_of_commands (TODO: добавить ссылку).

4.14. Отключить фокусировку на новом окне

Когда появляется новое окно, оно тут же попадет в фокус. Директива no_focus позволяет изменить это поведение и должно быть использовано в комбинации с command_criteria (TODO: добавить ссылку).

Обратите внимание, что это работает не во всех случаях, например, при передаче данных в запущенное приложение, потому что оно требует фокус. Чтобы настроить поведение для таких случаев, обратитесь к разделу Фокус при активации окна.

no_focus будет проигнорирован и в том случае, если открыто первое окно в рабочем пространстве. Это позволяет повысить удобство использования в сочетании с workspace_layout.

Синтаксис:

Пример:

4.15. Переменные

Как вы узнали в разделе о клавиатурных привязках, вам придется настроить множество биндов, включающих в себя клавиши-модификаторы. Если хочется сэкономить время при создании конфигурации и иметь потом возможность поменять используемый модификатор, то вам пригодятся переменные.

Синтаксис:

Пример:

Переменные заменяются в файле во время парсинга. Переменные разбираются не рекурсивно, поэтому невозможно определить переменную со значением, содержащим другую переменную. Это совершенно не доставляет никаких проблем, менять это поведение не планируется. Если же вы хотите более гибкую конфигурацию, то вы должны создать небольшой скрипт, который генерирует конфигурационный файл и запускается раньше, чем i3 (например, в файле~/.xsession ).

Смотрите Ресурсы X, чтобы узнать как создавать переменные на основе ресурсов, загруженных из базы данных xresources.

4.16. Ресурсы X

Переменные также могут быть созданы с помощью значений, настроенных в базе данных ресурсов X. Например, это полезно, чтобы избежать настройки значений в конфигурации i3. Вместо этого, значения можно задать единожды, в базе данных ресурсов X, для достижения легко поддерживаемой, согласованной цветовой темы во многих X-приложениях.

Указание ресурса приведет к тому, что он будет загружен из БД ресурсов и присвоит его значение указанной переменной. Это делается буквально, поэтому значение должно быть в формате, который использует i3. Также должно быть указано запасное значение на случай, если ресурс не сможет загрузиться из базы данных.

Синтаксис:

Пример:

4.18. Автозапуск приложений в i3

Используя ключевое слово exec, отдельно от объявления бинда, вы можете задать команды, которые выполнятся во время начального запуска i3. Команды exec не будут запущены во время перезапуска i3, но если вам это нужно, используйте exec_always. Также, все эти команды будут выполняться по порядку.

Смотрите command_chaining(TODO: добавить ссылку на раздел 6) для получения подробной информации об особом значении символов ; (точка с запятой) и , (запятая). Они связывают вместе команды в i3, поэтому необходимо использовать кавычки (как показано в exec_quoting(TODO: добавить ссылку на раздел 6.1)), если они используются в вашей команде.

Синтаксис:

Примеры:

Про флаг --no-startup-id рассказывается в exec(TODO: добавить ссылку на раздел 6.1).

4.19. Автоматизация перемещения рабочих областей на конкретные экраны

Если вы используете несколько экранов, то может быть удобно разместить каждую рабочую область на отдельном экране. Кроме того, распределение рабочих областей на экраны будет влиять на то, какая область i3 будет использовать для нового экрана при его добавлении или запуске самого i3 (например, по умолчанию i3 использует 1 раб. область для первого экрана, 2 для второго и так далее).

Синтаксис:

Выход является именем RandR выхода, который прикреплен к вашему экрану. На ноутбуках могут быть такие имена как VGA1 и LVDS1. Посмотреть доступные выходы можно с помощью команды xrandr --current.

Если ваш X-сервер поддерживает RandR 1.5 или выше, i3 будет использовать объекты RandR-монитора вместо объектов вывода. Запустите xrandr --listmonitors, чтобы увидеть список. Обычно объекты монитора содержат только один вывод и их имена, объектов и вывода, совпадают. Но если это не так, в конфигурации i3 вы можете указать либо имя монитора, либо имя выхода. Например, внутри Dell UP2414Q используются два сканера, поэтому его выходные имена могут быть "DP1" и "DP2", а имя монитора - "Dell UP2414Q".

(Обратите внимание, что даже если вы укажете имя выхода, который не охватывает весь монитор, i3 все равно будет использовать всю область содержащего монитора, а не только выходные данные).

Вы можете указать несколько выходов. Будет использоваться первый доступный.

Если вы используете именованные рабочие пространства, они должны быть процитированы:

Примеры:

4.20. Изменение цвета

Вы можете изменить все цвета, которые i3 использует для отрисовки оформления окон.

Синтаксис:

(пояснение переводчика: "ребенок" – это, следующий за родительским элементом, элемент)

Класс цвета может быть одним из этих:

Цвета приведены в шестнадцатеричном формате HTML (#rrggbb), см. следующий пример:

Примеры (стандартные цвета):

Обратите внимание, что цвет вокруг окна ребенка – это "child_border", а цвет "border" – это только две тонкие линии вокруг заглавной панели.

Цвет индикатора используется для указания, где будет открыто новое окно. Для горизонтальных сплит-контейнеров будет окрашена в цвет индикатора правая граница, для вертикальных сплит-контейнеров – нижняя. Это относится только к одиночным окнам внутри сплит-контейнера, которые в противном случае неотличимы от одиночных окон за пределами сплит-контейнера.

4.21. Межпроцессное взаимодействие

i3 использует сокеты Unix, чтобы предоставить интерфейс IPC. Это позволяет сторонним программам получать информацию из i3, например, о текущем рабочем пространстве (для отображения панели рабочего пространства), а также управлять i3.

По умолчанию IPC сокет включен и будет создан в $XDG_RUNTIME_DIR/i3/ipc-socket.%p, если эта директория доступна. Запасным вариантом будет /tmp/i3-%u.XXXXXX/ipc-socket.%p. %u – это ваше имя пользователя Unix, %p – это PID для i3 и XXXXXX – это строка со случайными символами из переносного набора символов для наименования файлов (см. mkdtemp(3)).

Вы можете переопределить путь по умолчанию через переменную окружения I3SOCK или указав директиву ipc-socket. Однако это не рекомендуется, так как i3 по умолчанию делает правильные вещи. Если вы решите изменить ее, настоятельно рекомендуется установить ее в таком месте в вашем домашнем каталоге, чтобы ни один другой пользователь не мог создать этот каталог.

Пример:

Далее вы можете использовать приложение i3-msg, чтобы выполнить любую команду из списка команд(TODO: добавить ссылку).

4.22. Следование фокуса за мышью

По умолчанию фокус окна следует за вашей мышью и переключается, когда курсор пересекает границу окон. Однако, если в вашем случае это доставляет неудобства, то вы можете отключить это поведение и контролировать фокус только с помощью клавиатуры. Мышь по прежнему будет работать внутри активных окон (например, чтобы кликнуть на ссылку в браузере).

Синтаксис:

Пример:

4.23. Искажение мыши

По умолчанию при переключении фокуса на окно на другом выходе (например, при фокусировке окна на рабочей области 3 на выходе VGA-1 из рабочей области 2 на LVDS-1), курсор мыши деформируется к центру этого окна.

С помощью опции mouse_warping вы можете контролировать когда курсор должен быть деформирован. none полностью отключает деформацию, в то время как output это стандартное поведение, описанное выше.

Синтаксис:

Пример:

4.24. Всплывающие окна в полноэкранном режиме

Когда вы находитесь в полноэкранном режиме некоторые приложения продолжают открывать всплывающие окна (возьмите Xpdf для примера). Это происходит потому, что эти приложения могут не знать о том, что они развернуты в полный экран (они не читают соответствующую подсказку). Есть 3 варианта того, что делать в данной ситуации:

  1. Отображать всплывающее окно, если оно принадлежит только полноэкранному приложению. Это поведение по умолчанию и должно подходить для большинства пользователей.
  2. Просто игнорировать всплывающее окно. Это не помешает вам, пока вы в полноэкранном режиме, однако, некоторые приложения могут плохо реагировать на это (заблокироваться, когда вы покинете полноэкранный режим).
  3. Выйти из полноэкранного режима.

Синтаксис:

Пример:

4.25. Обертка фокуса

Представим, что есть контейнер с несколькими окнами или дочерними контейнерами. Если попробовать переместить фокус по краю контейнера, то фокус перейдет к противоположному окну, при условии, что других контейнеров в этом направлении нет. Это называется оборачиванием фокуса.

Если хотите, то можно отключить данное поведение установкой директивы focus_wrapping в значение no.

Обертка фокуса не произойдет, если есть другое окно или контейнер в указанном направлении. Фокус просто будет установлен на этом окне. Это поведение по умолчанию, поэтому вы "из коробки" можете перемещаться по всем своим окнам не используя фокус родителя.

Если вы хотите, чтобы фокус всегда был обернут и знаете как пользоваться родительским фокусом для переключения на разные контейнеры, вы можете установить focus_wrapping в значение force.

Чтобы ограничить фокус внутри текущего рабочего пространства установите focus_wrapping в значение workspace. Вам придется использовать родительский фокус до тех пор, пока вы не переключитесь на другую рабочую область с помощью команд фокусировки (команда workspace будет работать как и прежде).

Синтаксис:

Примеры:

4.26. Принудительное использование Xinerama

Некоторые видео-драйвера X11 (особенно бинарный драйвер nvidia) предоставляют поддержку только для Xinerama вместо RandR, об этом подробно написано здесь. В этом случае i3 необходимо явно указать использовать уступающий Xinerama API и, следовательно, перестать поддерживать переконфигурацию экранов "на лету" (они считываются только единожды при запуске).

Для пользователей, которые не могут изменять ~/.xsession файл и, соответственно, добавить параметр --force-xinerama, конфигурация предоставляет отдельную опцию.

Синтаксис:

Пример:

Также обратите внимание, что ваши выводы имеют неочевидные имена при использовании Xinerama, вместо это они отсчитываются с нуля: xinerama-0, xinerama-1 и так далее.

4.28. Задержка сброса метки срочности при смене рабочего места

Если приложение на другом рабочем пространстве имеет метку о срочности, то переключение на это раб. пространство может привести к незамедлительному переключению фокуса на это приложение. Это также значит, что внешний вид окна сбросится до того, что описан в client.focused. Это может усложнить понимание того, в каком окне изначально произошло событие.

Чтобы избежать этого, вы можете указать задержку перед сбросом срочного состояния, используя директиву force_display_urgency_hint. Значение "0" отключает эту функцию.

Задержка по умолчанию – 500 мс.

Синтаксис:

Пример:

4.29. Фокус при активации окна

Если окно активировано, например, через google-chrome www.google.com, оно может запросить фокус. Так как это может быть нежелательно для пользователя, это поведение можно настроить.

Обратите внимание, что это может и не повлиять на открываемые окна. Чтобы выключить фокусировку новых окон, см. раздел Отключить фокусировку на новом окне.

Синтаксис:

Описание режимов:

4.30. Отображение меток на оформлении окна

Если эта функция активирована, то метки (см. vim_like_marks(TODO: добавить ссылку на раздел 6.14)) на окнах будут отображаться. Однако любая метка, начинающаяся с подчеркивания в ее названии ("_"), не будет показана, даже если эта опция активна.

По умолчанию опция имеет значение yes.

Синтаксис:

Пример:

4.31. Продолжение строки

Конфигурационные файлы поддерживают продолжение строки, т.е. когда вы заканчиваете строку символом обратного слеша ("\"), синтаксический анализатор проигнорирует разрыв строки. Эта функция может быть использована для создания более читабельных конфигурационных файлов. Комментированные строки не продолжаются.

Примеры:

5. Настройка i3bar

Панель внизу вашего экрана отрисовывает процесс, который называется i3bar. Он является отдельным процессом и эта особенность имеет ряд преимуществ:

  1. Модульность и модульный подход. Если вам вообще не нужна панель рабочего пространства, или вы предпочитаете другую (dzen2, xmobar, может быть даже gnome-panel?), вы можете просто удалить конфигурацию i3bar и вместо этого запустить вашу любимую панель.
  2. Это соблюдает принцип философии UNIX: "Пусть каждая программа делает одну вещь, но делает ее хорошо". Пока i3 хорошо управляет вашими окнами, i3bar хорошо выполняет функцию отображения панели на каждом мониторе (если только вы не настроите его по-другому).
  3. Такой подход разделяет базу исходного кода и сохраняет чистоту в ней. Если вы хотите понять i3, вам не нужно беспокоиться о деталях i3bar и наоборот.

При этом i3bar настраивается в том же файле конфигурации, что и i3. Это потому, что он тесно связан с i3 (в отличие от i3lock или i3status, которые полезны для людей, использующих другие оконные менеджеры). Поэтому нет смысла использовать другое место настройки, когда у нас уже есть хорошая конфигурационная инфраструктура.

Настройка панели рабочего пространства начинается с открытия блока панели. У вас может быть несколько таких блоков, чтобы использовать разные настройки на разных выводах (мониторах):

Пример:

5.1. Команда i3bar

По умолчанию i3 просто обойдет i3bar и позволит вашей оболочке обрабатывать выполнение, она будет самостоятельно искать в $PATH корректную версию. Если у вас есть i3bar в другом месте или нет бинарного файла в $PATH, вы можете указать i3 напрямую что требуется запустить.

Указанная команда будет передана в sh -c, поэтому вы можете использовать шаблоны поиска (прим. переводчика: про шаблоны поиска см. статью в Википедии), также нужно корректно цитировать пути и т. д.

Синтаксис:

Пример:

5.2. Команда строки статуса

i3bar может запускать программу и выводить каждую строку из ее вывода stdout в правой части панели. Это можно использовать для отображения системной информации, например, ваш текущий IP адрес, состояние батареи или время/дату.

Указанная команда будет передана в sh -c, поэтому вы можете использовать шаблоны поиска, также нужно корректно цитировать пути и т. д. Обратите внимание, что для обработки сигналов, в зависимости от вашей оболочки (известно, что это сказывается на пользователях dash(1)), вы должны использовать именно команду выполнения вашей оболочки, чтобы сигналы передавались не в нее, а в программу.

Синтаксис:

Пример:

5.3. Режим отображения

Вы можете указать i3bar отображаться постоянно в одном из краев экрана – dock-режим или делать его видимым тогда, когда это требуется, по нажатию клавиши-модификатора – скрытый режим. Также возможно насовсем скрыть его – невидимый режим. Клавишу-модификатор можно настроить используя опцию modifier.

Режим можно изменить во время работы, используя команду bar mode. После перезагрузки режим вернется к тому, который задан в конфигурации.

Скрытый режим максимизирует пространство на экране, которое можно использовать для заполнения окнами. Также, i3bar отправляет сигналы SIGSTOP и SIGCONT в строку статуса, чтобы продлить срок жизни батареи.

Невидимый режим навсегда максимизирует свободное пространство на экране, потому что панель никогда не будет видна. Таким образом, вы можете настроить i3bar так, чтобы он не беспокоил вас, не выскакивал из-за подсказки срочности или из-за нажатия клавиши-модификатора.

Чтобы контролировать будет ли i3bar скрыт или показан в скрытом режиме существует опция hidden_state, которая не имеет никакого влияния в невидимом и dock-режиме. Она отвечает за текущий hidden_state панели: (1) панель работает как в обычном скрытом режиме, она скрыта и не скрывается только, если сработала пометка срочности или нажата клавиша-модификатор (hide state), или (2) отрисовывается поверх видимой в настоящее время рабочей области (show state).

Также как и режим, опция hidden_state может контролироваться с помощью i3, этого можно добиться, используя команду bar hidden_state.

По умолчанию работает dock-режим; в скрытом режиме клавиша по умолчанию это Mod4 (обычно это клавиша win). Значение по умолчанию для hidden_state – hide.

Синтаксис:

Пример:

Доступные модификаторы: Mod1-Mod5, Shift, Control (см. xmodmap(1)). Вы также можете использовать "none", если не хотите, чтобы какой-либо менял это поведение.

5.4. Команды кнопок мыши

Можно задать команду, которая будет выполняться при нажатии кнопки в i3bar для переопределения поведения по умолчанию. Это полезно, например, для отключения действия колеса прокрутки или запуска сценариев, реализующих пользовательское поведение этих кнопок.

Кнопки всегда именованы как button<n>, где от 1 до 5 стандартные кнопки, а числа выше могут означать специальные кнопки на устройствах, предлагающих большее количество кнопок:

Обратите внимание, что старые команды wheel_up_cmd и wheel_down_cmd устарели и будут удалены в будущих релизах. Мы настоятельно рекомендуем использовать вместо этого bindsym с button4 и button5.

Синтаксис:

Пример:

5.5. ID панели

Указание идентификатора панели для настроенного экземпляра панели. Если эта опция отсутствует, то ID устанавливается как bar-x, где x соответствует положению блока встраиваемых панелей в конфигурационном файле (bar-0, bar-1, ...).

Синтаксис:

Пример:

5.6. Позиция

Эта опция отвечает за то, где i3bar будет отображаться.

Стандартное значение – внизу.

Синтаксис:

Пример:

5.7. Вывод(ы)

Вы можете ограничить i3bar на один вывод (монитор) или более. По умолчанию обрабатываются все выводы. Ограничение выводов полезно при использовании разных опций для разных выводов с помощью нескольких блоков панели.

Чтобы заставить конкретный экземпляр i3bar обрабатывать несколько выходов, укажите выходную директиву несколько раз.

Синтаксис:

Пример:

Обратите внимание, что, возможно, у вас еще не настроен первичный вывод. Для настройки запустите:

5.8. Вывод трея

i3bar по умолчанию предоставляет место для системного трея, где такие программы, как NetworkManager, VLC, Pidgin и др. могут размещать свои маленькие иконки.

Вы можете настроить на каком выводе (мониторе) иконки будут отображаться или вовсе отключить этот функционал.

Можно использовать несколько директив tray_output в вашей конфигурации, чтобы задать список выводов, на которых вы хотите видеть трей. Первый доступный вывод в этом списке, определенный в порядке директив, будет использоваться для вывода в трей.

Синтаксис:

Пример:

Обратите внимание, что, возможно, у вас еще не настроен первичный вывод. Для настройки запустите:

Обратите внимание, когда вы используете конфигурацию с несколькими блоками панели, нужно указать tray_output primary в каждом из них или явно указать tray_output none в панелях, которые не должны отображать трей. В противном случае различные экземпляры могут конкурировать друг с другом при попытке отображения значков в трее.

5.9. Отступ трея

Трей показан на правой стороне панели. По умолчанию для верхней, нижней и правой стороны области трея и между отдельными иконками используется отступ из 2 пикселей.

Синтаксис:

Пример:

(прим. переводчика: про закон Фиттса в проектировании интерфейсов и веб-дизайне можно почитать здесь)

5.10. Шрифт

Задать шрифт, который будет использоваться в панели можно способом, описанным ниже. См. Шрифты.

Синтаксис:

Пример:

5.11. Пользовательский символ разделителя

Определяет пользовательский символ, который будет использоваться для разделителя в отличие от вертикального разделителя толщиной в один пиксель.

Синтаксис:

Пример:

5.12. Кнопки рабочей области

Задает будут ли отображаться кнопки рабочего пространства или нет. Это полезно, если вы хотите отобразить только строку состояния, содержащую дополнительную информацию.

По умолчанию кнопки рабочих областей отображаются.

Синтаксис:

Пример:

5.13. Минимальная ширина для кнопок раб. области

По умолчанию ширина кнопки рабочей области задается шириной текста, который отображает имя раб. области. Если имя слишком короткое (скажем, одна буква), то кнопка может выглядеть слишком маленькой.

Эта опция задает минимальную ширину кнопки раб. области. Если имя раб. области слишком короткое и не покрывает кнопку полностью, будут добавлены отступы с обеих сторон и, в результате, текст будет центрирован.

Значение по умолчанию это ноль, что значит отсутствие дополнительных отступов.

Настройка также распространяется на индикатор режима привязки.

Обратите внимание, что указанные пиксели обозначают логические пиксели, которые могут преобразоваться в большее количество пикселей на HiDPI-дисплеях.

Синтаксис:

Пример:

5.14. Удалить номер/имя раб. области

Указывает, должны ли номера рабочих областей отображаться в кнопках рабочей области. Это полезно, если вы хотите, чтобы именованная рабочая область оставалась на панели в соответствии с ее номером без отображения префикса номера.

Когда параметр strip_workspace_numbers установлен в yes, в любой рабочей области, имеющей имя по типу "[n][:][NAME]", будет отображаться только имя. Вы можете использовать это, например, для отображения римских цифр вместо арабских, называя рабочие пространства "1:I", "2:II", "3:III", "4:IV", ...

Когда параметр strip_workspace_name установлен в yes, в любой рабочей области, имеющей имя по типу "[n][:][NAME]", будет отображаться только порядковый номер.

По умолчанию отображается полное имя на кнопке. Помните, что двоеточие в имени рабочей области является необязательным, поэтому в [n] [NAME] также будет корректно удалено имя и номер рабочей области.

Синтаксис:

Пример:

5.15. Индикатор режима привязки

Указывает, должен ли отображаться индикатор текущего режима привязки. Это полезно, если вы хотите скрыть кнопки в рабочей области, но при этом видеть индикатор текущего режима привязки. Смотрите раздел Режимы привязки, чтобы узнать, что такое режимы и как их использовать.

По умолчанию индикатор режима отображается.

Синтаксис:

Пример:

5.16. Цвета

Как и в i3, цвета находятся в шестнадцатеричном формате HTML (#rrggbb). На данный момент можно настроить следующие цвета:

Синтаксис:

Пример:

5.17. Прозрачность

i3bar поддерживает прозрачность. Для этого нужно указать флаг --transparency в конфигурации:

Синтаксис:

В конфигурации i3bar вы можете использовать цвета в формате RGBA, т.е. последние две (шестнадцатеричные) цифры указывают на прозрачность. Например, #00000000 будет полностью прозрачным, а #000000FF будет полностью непрозрачный чёрный (тоже самое, что #000000).

Обратите внимание, что в связи с тем, как работает спецификация трея, включение этого флага приведет к тому, что все иконки в трее будут иметь прозрачный фон.

6. Список команд

Команды это то, что вы привязываете к определенным горячим клавишам. Вы также можете отдавать команды во время выполнения без нажатия клавиши, используя IPC-интерфейс. Простой способ сделать это - использовать утилиту i3-msg.

Пример:

Команды могут быть привязаны с помощью символа ; (точки с запятой). Таким образом, чтобы переместить окно в определенную рабочую область и сразу же переключиться на эту рабочую область, вы можете привязать клавишу следующим образом:

Пример:

Кроме того, вы можете изменить область действия команды - т.е. какие контейнеры должны быть затронуты этой командой. Для этого используются критерии. Они указываются перед любой командой в паре квадратных скобок и разделены пробелом.

При указании нескольких команд, отделите их символом , (запятой) вместо точки с запятой. Критерия действует только до следующей точки с запятой, поэтому, если вы используете точку с запятой для отделения команд, только первая из них будет выполнена для выбранных окон.

Пример:

Критерии, которые на данный момент есть:

Критерии class, instance, role, title, workspace и mark на самом деле являются регулярными выражениями (PCRE). См. pcresyntax(3) или perldoc perlre, чтобы узнать как пользоваться ими.