Это старая версия документа!
Содержание
Тайловый оконный менеджер i3
i3 — это динамический тайловый оконный менеджер, вдохновлённый wmii и нацеленный на разработчиков и опытных пользователей.
Полные возможности по настройке и использованию i3 описаны в документации. В частности руководство пользователя лежит на этой странице
(!)Note: также с руководством по i3wm на русском языке можно ознакомиться здесь
Мастер настройки и альтернативные раскладки клавиатуры
При первом запуске i3 без готового файла конфигурации он предлагает запустить мастер настройки i3-config-wizard. Этот инструмент создаёт файл ~/.config/i3/config, беря за основу шаблон /etc/i3/config.keycodes.
Он вносит в шаблон два изменения:
- Просит пользователя выбрать клавишу-модификатор по умолчанию. Будет предложено два варианта - Meta (windows кнопка - Mod4) или Alt (Mod1), и выбранный он добавит в шаблон в виде одной строки, например,
set $mod Mod1; - Заменяет все строки bindcode на строки bindsym, соответствующие текущей раскладке клавиатуры пользователя.
Шаг 2 предназначен для того, чтобы гарантировать, что четыре навигационных сочетания клавиш, j, k, l и ; на Qwerty-клавиатуре будут отображены на символы клавиш, которые имеют такое же расположение, например, h, t, n, s на клавиатуре Dvorak.\ Побочным эффектом этого действия является то, что до пятнадцати других клавиш могут быть переадресованы таким образом, что это нарушит мнемонику — так, для пользователя Dvorak «перезапуск» («restart») будет привязан к $mod1+p вместо $mod1+r, «разделение по горизонтали» («split horizontally») будет привязано к $mod1+d вместо $mod1+h, и так далее.
Поэтому пользователи альтернативных раскладок клавиатуры, которым нужны простые привязки клавиш, соответствующие привязкам, приведённым в руководствах, могут предпочесть обойтись без «мастера настройки». Это можно сделать, просто скопировав файл /etc/i3/config в файл ~/.config/i3/config (или ~/.i3/config) и отредактировав его.
Обратите внимание, что также возможна конфигурация на основе кодов клавиш, например, для пользователей, которые часто переключаются между раскладками клавиатуры, но хотят, чтобы привязки i3 оставались неизменными.
Cheatsheet с горячими клавишами принятыми по умолчанию, картинки-подсказки:
Красные клавиши - это модификаторы, которые вам нужно нажать (по умолчанию), синие клавиши - это ваше рабочее пространство .
Использование i3
Открытие терминала и перемещение вокруг
Одной из самых основных операций является открытие нового терминала. По умолчанию комбинация клавиш для этого - $mod+enter, то есть alt+enter (mod1+enter) в конфигурации по умолчанию.\ При нажатии $mod+enter, будет открыт новый терминал, который заполнит все пространство, доступное на вашем экране.
Если теперь открыть ещё один терминал, то i3 поместит его рядом с текущим, разделив размер экрана пополам.\ В зависимости от размеров монитора i3 поместит созданное окно либо рядом с существующим окном (на широких дисплеях), либо под существующим окном (повернутые дисплеи).
Для перемещения фокуса между двумя терминалами можно использовать клавиши со стрелками.\ Для удобства перемещение фокуса также доступно прямо в основном ряду клавиатуры под правой рукой: |$mod+j |left | |$mod+k |down | |$mod+l |up | |$mod+; |right |
Обратите внимание, что это отличается на одну клавишу от популярного текстового редактора vi, который был разработан для терминала ADM-3A и поэтому использует hjkl вместо jkl; — По умолчанию в i3 требуется минимальное движение пальцев, но некоторые пользователи vi меняют конфигурацию i3 для обеспечения единообразия.
На данный момент рабочее пространство на экране разделено на два окна (оно содержит два терминала) в определенном направлении (по умолчанию — горизонтально). Каждое окно можно разделить по горизонтали или по вертикали, как и рабочее пространство.\ В используемой терминологии - «окно» (window) применяется для контейнера, который фактически содержит окно X11 (например, терминал или браузер), и «разделенный контейнер» (split container) для контейнеров, состоящих из одного или нескольких окон.\ Чтобы разделить окно по вертикали, нажмите $mod+v перед созданием нового окна. Чтобы разделить его по горизонтали, нажмите $mod+h
Изменение компоновки контейнера
Разделенный контейнер может иметь одну из следующих компоновок:
- splith/splitv - Деление по горизонтали или вертикали. При этом размеры окон выбираются таким образом, чтобы каждому окну отводилось одинаковое пространство в контейнере. splith распределяет окна по горизонтали (окна расположены рядом друг с другом), splitv распределяет их по вертикали (окна расположены друг над другом).
- stacking - Штабелирование. При этом в контейнере отображается только сфокусированное окно. В верхней части контейнера отображается список всех окон.
- tabbed - С вкладками. Принцип отображения тот же, что и в stacking, но список окон вверху состоит всего из одной строки, разделенной по вертикали.
Для переключения режимов нажмите $mod+e для splith/splitv (переключается), $mod+s для штабелирования и $mod+w для отображения с вкладками.
Переключение полноэкранного режима для окна
Чтобы отобразить окно в полноэкранном режиме или снова выйти из полноэкранного режима, нажмите $mod+f.\ В i3 также есть глобальный полноэкранный режим, в котором клиент будет использовать все доступные выходные данные (команда - fullscreen toggle global).
Закрытие окон
Если приложение не предоставляет свой механизм закрытия (большинство приложений предоставляют меню, клавишу Escape или сочетание клавиш, например Control+w, для закрытия), то можно нажать $mod+Shift+q, чтобы закрыть окно.\ Для приложений, поддерживающих протокол WM_DELETE, приложение будет корректно закрыто (с сохранением всех изменений или другой очисткой). Если приложение не поддерживает протокол WM_DELETE, то ваш X-сервер закроет окно, и поведение зависит от приложения.
Открытие других приложений
Помимо открытия приложений из терминала, вы также можете использовать удобное dmenu, которое по умолчанию открывается нажатием клавиш $mod+d. Просто введите название (или его часть) приложения, которое вы хотите открыть. Чтобы это сработало, соответствующее приложение должно быть указано в вашем $PATH.
Кроме того, если у вас есть приложения, которые вы открываете очень часто, вы можете создать привязку клавиш для непосредственно запуска данного приложения. Подробности смотрите в разделе настройка.
Использование рабочих областей
Рабочие области - это простой способ сгруппировать набор окон. По умолчанию пользователь находится в первой рабочей области, о чем свидетельствует панель в левом нижнем углу (индикатор с цифрой 1).\ Чтобы переключиться на другое рабочее пространство, нажмите $mod+num, где num - номер рабочего пространства, которое хотите использовать. Если рабочее пространство еще не существует, оно будет создано.
Распространенная парадигма заключается в размещении веб-браузера в одном рабочем пространстве, коммуникационных приложений (mutt, irssi, …) - в другом, а тех, с которыми вы работаете, - в третьем. Конечно, это не догма.
Если у вас несколько экранов, при запуске на каждом из них будет создано рабочее пространство. Если вы откроете новое рабочее пространство, оно будет привязано к экрану, на котором вы его создали. При переключении на рабочее пространство на другом экране i3 настроит фокус на этот экран .
Перемещение окон в рабочие области
Чтобы переместить окно в другую рабочую область, просто нажмите $mod+Shift+num, где num - это (как при переключении рабочих областей) номер целевой рабочей области. Аналогично переключению рабочих областей, целевая рабочая область будет создана, если она еще не существует .
Изменение размера
Самый простой способ изменить размер контейнера - с помощью мыши: возьмите рамку и переместите ее до нужного размера.
Вы также можете использовать binding_modes, чтобы задать режим изменения размера с помощью клавиатуры. Чтобы увидеть пример этого, посмотрите на предоставленную конфигурацию i3 по умолчанию.
Перезапуск i3 на месте (без выхода из сеанса пользователя)
Чтобы перезапустить i3 на месте (и, таким образом, перейти в чистое состояние, если есть ошибка, или перейти на более новую версию i3), вы можете использовать $mod+Shift+r.
Выход из i3
Чтобы полностью завершить работу с i3, не отключая ваш X-сервер, вы можете использовать $mod+Shift+e. По умолчанию в диалоговом окне пользователю будет предложено подтвердить, действительно ли он хочет завершить работу.
Плавающий режим
Плавающий режим является противоположностью тайлинговому (плиточному) режиму. Положение и размер окна управляются i3 не автоматически, а вами вручную.\ Использование этого режима нарушает парадигму тайлинга, но может быть полезно для некоторых сложных случаев, таких как диалоговые окна «Сохранить как» или окна панели инструментов (GIMP или аналогичные). Эти окна обычно содержат соответствующую подсказку и по умолчанию открываются в плавающем режиме.
Вы можете переключить плавающий режим для окна, нажав $mod+Shift+Space. Перетаскивая строку заголовка окна с помощью мыши, вы можете перемещать окно по кругу. Захватывая границы и перемещая их, вы можете изменять размер окна. Вы также можете сделать это с помощью floating_modifier. Другой способ изменить размер плавающих окон с помощью мыши - щелкнуть правой кнопкой мыши на строке заголовка и перетащить ее.
Чтобы изменить размер плавающих окон с помощью клавиатуры, ознакомьтесь с режимом привязки изменения размера, предоставляемым (конфигурацией i3 по умолчанию)(https://github.com/i3/i3/blob/next/etc/config.keycodes).
Плавающие окна всегда располагаются поверх окон с плитками.
Перемещение тайловых (плиточных) контейнеров с помощью мыши
Начиная с версии i3 4.21, можно перетаскивать контейнеры с плитками с помощью мыши. Перетаскивание может быть инициировано либо перетаскиванием за строку заголовка окна, либо нажатием кнопки floating_modifier и последующим перетаскиванием контейнера с одновременным удержанием нажатой левой кнопки мыши. Смотрите параметр config_tiling_drag для настройки того, какое действие запускает перетаскивание тайлов (плиток).
Как только перетаскивание начато и курсор покинул исходный контейнер, в соответствии с положением курсора относительно целевого контейнера создаются индикаторы перетаскивания. Эти индикаторы помогают вам понять, каким будет результирующий макет дерева после того, как вы отпустите кнопку мыши.
Возможны следующие конечные позиции перетаскивания:
Сброс на контейнер\ Это происходит, когда мышь находится относительно близко к центру контейнера.\ Если отпустить мышь, результат будет таким же, как если бы вы выполнили команду move container to mark. Смотрите move_to_mark.\ Если перед началом перетаскивания нажать модификатор swap (по умолчанию для параметра tiling_drag swap_modifier установлен «Shift»), контейнеры поменяются местами. В этом случае результат будет таким же, как если бы вы запустили команду swap container with mark. Смотрите swapping_containers.
Сброс как родственника\ Это происходит, когда мышь находится относительно близко к краю контейнера.\ Если отпустить кнопку мыши, перетаскиваемый контейнер станет родственным относительно целевого контейнера и будет размещен слева/справа/вверху/внизу в соответствии с положением индикатора. Это может привести к созданию нового v-split (вертикального) или h-split (горизонтального) разделения в соответствии с предыдущим расположением целевого контейнера. Например, если целевой контейнер имеет h-split разделение и вы сбрасываете перетаскиваемый контейнер под ним, новое расположение должно получиться с v-split разделением.
Сброс к родителю\ Это происходит, когда мышь находится относительно близко к краю контейнера (даже ближе к границе по сравнению с описанным выше вариантом) и если этот край также является краем родительского контейнера.\ Например, если три контейнера расположены горизонтально, то ребра, на которых это может произойти, - это левый край левого контейнера, правый край правого контейнера и все нижние и верхние края всех трех контейнеров. Если отпустить мышь, контейнер сначала перемещается как однотипный с целевым контейнером, как в приведенном выше случае, а затем перемещается по направлению, как с помощью команды «move left|right|down|up». Смотрите move_direction.
Цвет индикатора соответствует настройкам client.focused. Смотрите client_colors .
Дерево
i3 хранит всю информацию о выводах X11, рабочих областях и расположенных на них окнах в виде дерева.\ Корневой узел - это корневое окно X11, за которым следуют данные выводимые X11, затем области привязки и контейнер содержимого, затем рабочие области и, наконец, сами окна.
Дерево состоит из контейнеров
Строительными блоками дерева являются так называемые контейнеры. Контейнер может содержать окно (имеется в виду окно X11, которое можно видеть и использовать, как например браузер). В качестве другого варианта, контейнер может содержать один или несколько контейнеров.\ Простым примером является рабочая область: если запустить i3 с одним монитором, одной рабочей областью и открыть два окна терминала, то в итоге получим дерево, подобное этому:
Ориентация и разделенные контейнеры
Вполне естественно использовать так называемые «разделенные контейнеры» (split container) для построения макета при использовании дерева в качестве структуры данных. В i3 каждый контейнер имеет ориентацию (горизонтальную, вертикальную или неопределенную), и ориентация зависит от расположения контейнера (вертикальная для splitv и stacking, горизонтальная для splith и размещения tabbed).
В нашем примере с рабочей областью макет рабочей области по умолчанию имеет разделение splith (большинство мониторов в настоящее время широкоэкранные). Если вы измените макет на splitv (через $mod+v в конфигурации по умолчанию), а затем откроете два терминала, i3 настроит ваши окна следующим образом:
Рисунок 2. Вертикальная ориентация рабочей области
Интересной новой функцией i3, начиная с версии 4, является возможность разделения всего, что угодно:\ Предположим, что у вас есть два терминала в рабочей области (имеющей splith макет разделения, то есть горизонтальную ориентацию) и фокус на правом терминале.
Теперь вы хотите открыть другое окно терминала под текущим. Если бы вы просто открыли новое окно терминала, то оно отображалось бы справа из-за splith макета.
Вместо этого нажмите $mod+v, чтобы разделить контейнер с помощью макета splitv (чтобы открыть контейнер с разделением по горизонтали, используйте $mod+h). Теперь вы можете открыть новый терминал, и он откроется ниже текущего:
Рисунок 3. Контейнер с вертикальным разделением
Как наверное уже можно догадаться: нет предела тому, насколько глубокой может быть ваша иерархия разделений.
Фокусировка родительского контейнера (focus parent)
Остановимся на примере, приведенном выше. У нас есть терминал слева и два вертикально разделенных терминала справа, и фокус на нижнем правом терминале. Когда вы откроете новый терминал, он откроется под текущим.
Но как вы можете открыть новое окно терминала справа от текущего?\ Решение заключается в использовании focus parent, который будет фокусировать родительский контейнер текущего контейнера.\ В конфигурации по умолчанию используйте $mod+a для перемещения по одному контейнеру вверх по дереву (вы можете повторять это несколько раз, пока не дойдете до контейнера рабочей области). В этом случае вы должны получить фокус на контейнере с вертикальным разделением, который находится внутри горизонтально ориентированного рабочего пространства.\ Таким образом, теперь справа от вертикально разделенного контейнера будут открываться новые окна:
Рисунок 4. Фокус на родительском контейнере, затем открытие нового терминала
Неявные контейнеры
В некоторых случаях i3 необходимо неявно создать контейнер для выполнения вашей команды.
Одним из примеров является следующий сценарий: вы запускаете i3 с одним монитором и одной рабочей областью, в которой вы открываете три окна терминала. Все эти окна терминала напрямую привязаны к одному узлу внутри дерева макета i3 — узлу рабочей области. По умолчанию ориентация узла рабочей области горизонтальная.
Теперь вы перемещаете один из этих терминалов вниз (по умолчанию $mod+Shift+k). Ориентация узла рабочей области будет изменена на вертикальную. Окно терминала, которое вы переместили вниз, напрямую прикрепляется к рабочей области и появляется в нижней части экрана. Был создан новый (горизонтальный) контейнер для размещения двух других окон терминала. Вы заметите это при переключении в режим вкладок (например). В итоге у вас будет одна вкладка с представлением разделенного контейнера (например, «H[urxvt firefox]»), а другая будет окном терминала, которое вы переместили вниз.
Настройка i3
Чтобы изменить конфигурацию i3, скопируйте файл /etc/i3/config в файл ~/.i3/config (или ~/.config/i3/config, если вам нравится схема каталогов XDG) и отредактируйте его с помощью текстового редактора.
При первом запуске (и при всех последующих запусках, если у вас нет файла конфигурации) i3 предложит создать файл конфигурации. Вы можете указать мастеру использовать Alt (Mod1) или Meta(Windows) (Mod4) в качестве модификатора в файле конфигурации. Кроме того, в созданном файле конфигурации будут использоваться ключевые символы вашей текущей раскладки клавиатуры.\
Чтобы запустить мастер настройки, используйте команду i3-config-wizard. Обратите внимание, что у вас не должно быть файла ~/.i3/config, иначе мастер завершит работу.
Подключаемые файлы конфигурации (Include directive)
В i3 начиная с версии v4.20, можно подключать другие конфигурационные файлы из вашего файла конфигурации i3.
Синтаксис:
include <pattern>
i3 расширяет pattern, используя shell-подобное расширение слова, специфически используя функцию wordexp(3) стандартной библиотеки C.
Примеры:
# Тильда дополняется путем до домашнего каталога пользователя: include ~/.config/i3/assignments.conf # Дополнение переменными среды: include $HOME/.config/i3/assignments.conf # Дополнение подстановочными знаками: include ~/.config/i3/config.d/*.conf # Замена выводом команды (замена `hostname` на выходные данные соответствующей команды) include ~/.config/i3/`hostname`.conf # i3 загружает каждый путь только один раз, поэтому повторное # подключение файла конфигурации i3 приведет не к бесконечному циклу, а к ошибке: include ~/.config/i3/config # i3 изменяет рабочий каталог при анализе конфигурационного файла таким образом, # что относительные пути интерпретируются относительно каталога конфигурационного файла, # содержащего этот путь: include assignments.conf:
Если указанный файл не может быть прочитан, например, из-за отсутствия прав доступа к файлу или из-за висячей (недействующей) символической ссылки, i3 сообщит об ошибке и продолжит обработку оставшейся конфигурации.
Чтобы просмотреть все загруженные файлы конфигурации, запустите i3 --moreversion:
% i3 --moreversion Binary i3 version: 4.19.2-87-gfcae64f7+ © 2009 Michael Stapelberg and contributors Running i3 version: 4.19.2-87-gfcae64f7+ (pid 963940) Loaded i3 config: /tmp/i3.cfg (main) (last modified: 2021-05-13T16:42:31 CEST, 463 seconds ago) /tmp/included.cfg (included) (last modified: 2021-05-13T16:42:43 CEST, 451 seconds ago) /tmp/another.cfg (included) (last modified: 2021-05-13T16:42:46 CEST, 448 seconds ago)
Переменные являются общими для всех конфигурационных файлов, но следует учитывать следующее ограничение:
- Вы можете определить переменную и использовать ее во включаемом файле.
- Вы не можете использовать (в родительском файле) переменную, которая была определена во включаемом файле.
Это техническое ограничение: расширение переменной происходит на отдельном этапе перед разбором директив include.
По сути, включаемые файлы могут только дополнять конфигурацию, а не отменять эффекты уже обработанной конфигурации. Например, вы можете только добавлять новые привязки клавиш, а не перезаписывать или удалять существующие. Это означает, что:
- Директива include подходит для организации больших конфигураций в отдельные файлы, возможно, для выбора файлов на основе условий.
- Директива include не подходит для выражения “использовать конфигурацию по умолчанию со следующими изменениями”. В этом случае по-прежнему рекомендуется скопировать и изменить файл конфигурацию по-умолчанию.
Комментарии
Возможно и рекомендуется использовать комментарии в файле конфигурации, чтобы правильно документировать настройку для дальнейшего использования. Комментарии начинаются с # и могут использоваться только в начале строки:
Пример:
# Это комментарий
Шрифты
i3 поддерживает как основные шрифты X, так и шрифты FreeType (с помощью Pango) для отображения оконных заголовков.
Для генерации описания шрифта X можно использовать xfontsel(1). Чтобы увидеть специальные символы (Unicode), вам нужно использовать шрифт, который поддерживает кодировку ISO-10646.
Описание шрифтов FreeType состоит из семейства шрифтов (font family), стиля (style), толщины (вес, weight), варианта (variant), растяжки (stretch) и размера (size). Шрифты FreeType поддерживают отображение справа налево и чаще всего содержат больше Unicode-символов, нежели основные шрифты X.
Если i3 не может открыть заданный в конфигурации шрифт, то он выведет ошибку в log-файл и будет использовать тот, который работает.
Синтаксис:
font <X core font description> font pango:<family list> [<style options>] <size>
Примеры:
font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1 font pango:DejaVu Sans Mono 10 font pango:DejaVu Sans Mono, Terminus Bold Semi-Condensed 11 font pango:Terminus 11px
Привязки клавиатурных клавиш
Привязки клавиш клавиатуры заставляют i3 выполнять команду при нажатии определенной клавиши.\ i3 позволяет делать привязки основанные либо на keycode, либо на keysym (вы также можете использовать оба варианта привязок, хотя i3 не защитит вас от перекрывающихся).
- Keysym (символ ключа) - это описание для конкретного символа, например, «A» или «B», но также и более непривычные, такие как «underscore» вместо «_». Это те, которые вы используете в Xmodmap. Чтобы получить текущее отображение ваших ключей, используйте
xmodmap -pke. Чтобы интерактивно ввести клавишу и посмотреть, на какой Keysym он настроен, используйтеxev. - Keycode не обязательно присваивать символ (это удобно для пользовательских горячих клавиш производителя на некоторых ноутбуках), и они не изменят своего значения при переключении на другую раскладку клавиатуры (при использовании xmodmap).
Если вы часто меняете раскладки клавиатуры, но хотите сохранить привязки в одном и том же физическом месте на клавиатуре, используйте коды клавиш. Если вы не меняете раскладки и хотите получить чистый и простой конфигурационный файл, используйте keysyms.
Некоторые инструменты (например, xdotool) могут не запускаться при нажатии клавиши, поскольку клавиатура по-прежнему удерживается. В таких ситуациях можно использовать флаг --release, который выполнит команду после того, как клавиши будут отпущены.
Синтаксис:
bindsym [--release] [<Group>+][<Modifiers>+]<keysym> command bindcode [--release] [<Group>+][<Modifiers>+]<keycode> command
- Modifiers - клавиши-модификаторы. Доступны Mod1-Mod5, Shift, Control.
- Group1, Group2, Group3, Group4 - При использовании нескольких раскладок клавиатуры (например, с помощью
setxkbmap -layout us,ru) вы можете указать, в какой группе XKB (также называемой “раскладка”) должна быть активирована привязка клавиш. По умолчанию привязки клавиш преобразуются в Group1 и активны во всех группах. Если вы хотите переопределить привязки клавиш в одном из ваших макетов, укажите соответствующую группу. Для обеспечения обратной совместимости группа “Mode_switch” является алиасом (псевдонимом) для Group2.
Примеры
# полноэкранный режим bindsym $mod+f fullscreen toggle # рестарт bindsym $mod+Shift+r restart # специальные горячие клавиши ноутбука bindcode 214 exec --no-startup-id ~/toggle_beamer.sh
Некоторые горячие клавиши, которые приняты по умолчанию:
| Сочетание клавиш | Значение | mod+Enter | открывает терминал | mod+d | запускает dmenu (меню сверху экрана, которое по мере ввода с клавиатуры названия приложения предлагает варианты для запуска) | mod+Shift+Q | закрывает активное окно | mod+v | включает режим вертикального тайлинга (экран будет делиться горизонтально) | mod+h | включает режим горизонтального тайлинга (экран будет делиться вертикально) | mod+w | включает режим вкладок (каждое окно на рабочем столе занимает весь экран, сверху видны вкладки) | mod+s | включает стековый режим (заголовки окон один под другим, каждое окно занимает весь экран) | mod+e | возвращает стандартный режим | mod+Shift+Space | переключает окно в режим плавающего и обратно | mod+Left/Right/Up/Down | перемещает фокус в пределах рабочего стола | mod+Shift+Left/Right/Up/Down | перемещает текущее окно в пределах рабочего стола | mod+1 и т.д. | переключает на рабочий стол с указанным номером | mod+Shift+C | читает настройки из файла конфигурации | mod+Shift+E | выходит из i3wm на экран ввода имени пользователя и пароля |
|---|
Привязки клавиш мыши
Можно управлять контейнерами с помощью мыши. Привязки клавиш мыши заставляют i3 выполнять команду после нажатия определенной кнопки мыши в области нажатого контейнера. Привязки клавиш мыши можно настроить аналогично привязкам клавиатурных клавиш.
Синтаксис:
bindsym [--release] [--border] [--whole-window] [--exclude-titlebar] [<Modifiers>+]button<n> command
- По умолчанию привязка запускается только при нажатии на строку заголовка окна.
- Если указан флаг --release, он запустится, когда кнопка мыши будет отпущена.
- Если указан флаг --whole-window, то привязка также будет выполняться при щелчке по любой части окна, за исключением границы.
- Чтобы привязка выполнялась при щелчке границы, нужно указать флаг --border.
- Если задан флаг --exclude-titlebar, заголовок не будет учитываться для привязки клавиш.
Примеры.
Средняя кнопка на заголовке закрывает окно:\
bindsym --release button2 kill
Средняя кнопка и модификатор над любой частью окна закрывает окно:\
bindsym --whole-window $mod+button2 kill
Правая кнопка мыши переключает плавающий режим:\
bindsym button3 floating toggle bindsym $mod+button3 floating toggle
Боковые кнопки мыши перемещают окно:\
bindsym button9 move left bindsym button8 move right
Режимы привязки
У вас может быть несколько наборов привязок, если вы используете разные режимы привязки.\ При переключении в другой режим привязки все привязки из текущего режима освобождаются, и только привязки, определенные в новом режиме, остаются действительными до тех пор, пока вы остаетесь в данном режиме привязки.\ Единственный заранее определенный режим привязки это стандартный (default). С ним изначально i3 начинает работу и ему же принадлежат все привязки, которые не определены в конкретном режиме.
Работа с режимами привязки складывается из двух частей: определение режима привязки и переключение к нему.\ Для этих задач есть одна конфигурационная директива и одна команда. Оба из них называются режимами. Директива используется для определения привязок, принадлежащих данному конкретному режиму привязки, при этом команда переключится в указанный режим.\
Рекомендуется использовать режимы привязки в паре с переменными, чтобы облегчить поддержку конфигурации. Ниже есть пример того как использовать режим привязки.\
Обратите внимание, что рекомендуется назначить привязки для возврата в режим по умолчанию.
Обратите внимание, что для режимов привязки можно использовать Pango markup, но вам необходимо включить его явно, передав флаг --pango_markup в определение режима.
Синтаксис:
# директива конфигурации mode [--pango_markup] <name> # команда mode <name>
Пример:
# Нажмите $mod+o, а затем f, t, Escape или Return, чтобы
# запустить Firefox,Thunderbid или вернуться в режим по умолчанию.
set $mode_launcher Launch: [f]irefox [t]hunderbird
bindsym $mod+o mode "$mode_launcher"
mode "$mode_launcher" {
bindsym f exec firefox
bindsym t exec thunderbird
bindsym Escape mode "default"
bindsym Return mode "default"
}
Floating-модификатор
Для перемещения плавающих окон можно тянуть их мышью за заголовок или настроить так называемый floating-модификатор, который вы можете затем нажать и щелкнуть в любом месте самого окна, чтобы переместить его. Наиболее распространенной практикой является использование той же клавиши, которой вы используете для управления окнами (Mod1, например).\ Затем вы можете нажать кнопку Mod1, щелкнуть по окну левой кнопкой мыши и перетащить его в нужное положение.
Удерживая floating-модификатор, вы можете изменить размер плавающего окна, нажимая на него правой кнопкой мыши и перемещая курсор, удерживая клавишу. Если при этом зажать клавишу Shift, то изменение размера будет пропорциональным.
Синтаксис:
floating_modifier <модификатор>
Пример:
floating_modifier Mod1
Ограничение размеров плавающего окна
Можно указать максимальные и минимальные размеры плавающих окон.\ Если какое-либо измерение float_maximum_size указано как -1, то это измерение не будет ограничено своим максимальным значением. Если какой-либо размер float_maximum_size не определен или указан как 0, i3 будет использовать значение по умолчанию для ограничения максимального размера.\ float_minimum_size обрабатывается аналогично float_maximum_size.
Синтаксис:
floating_minimum_size <width> x <height> floating_maximum_size <width> x <height>
Пример:
floating_minimum_size 75 x 50 floating_maximum_size -1 x -1
.
Ориентация для новых рабочих мест
Новые рабочие пространства получают разумную ориентацию по умолчанию: широкоэкранные мониторы (все, у которых ширина больше, чем высота) получают горизонтальную ориентацию, повернутые мониторы (все, у которых высота больше, чем ширина) получают вертикальную ориентацию.
С помощью директивы конфигурации default_orientation вы можете переопределить это поведение.
Синтаксис:
default_orientation horizontal|vertical|auto
Пример:
default_orientation vertical
.
Режим раскладки для новых контейнеров
Этот параметр определяет, в каком режиме будут запускаться новые контейнеры на уровне рабочей области.
Синтаксис:
workspace_layout default|stacking|tabbed
Пример:
workspace_layout tabbed
.
Выравнивание заголовков окон
Эта опция определяет выравнивание текста в заголовке окна. По умолчанию установлен left.
Синтаксис:
title_align left|center|right
.
Стилизация границы для новых окон по умолчанию
Эта опция определяет стиль для границ новых окон. Значение по умолчанию – normal. Обратите внимание, default_floating_border применяется только к окнам, которые изначально запущены в режиме floating (например, диалоговые окна) и не применяется к тем, которые стали плавающими позже.
Установка стиля границы в режим pixel исключает заголовки в разделенных макетах. Стиль границы normal позволяет регулировать ширину границы, сохраняя при этом строку заголовка.
Строка заголовка всегда видна в макетах stacking и tabbed, и ее нельзя изменить с помощью конфигурации.
Синтаксис:
default_border normal|none|pixel default_border normal|pixel <px> default_floating_border normal|none|pixel default_floating_border normal|pixel <px>
Обратите внимание, что new_window и new_float устарели в пользу вышеуказанных опций и будут удалены в будущем. Мы настоятельно рекомендуем использовать новые опции вместо них.
Пример:
default_border pixel
Стили границ normal и pixel поддерживают дополнительную ширину границы в пикселях: Пример:
# То же, что и default_border none default_border pixel 0 # Граница в 3 пикселя default_border pixel 3
.
Скрытие границ, прилегающих к краям экрана
Вы можете скрыть границы контейнера, прилегающие к краям экрана, с помощью функции hide_edge_borders (значение по умолчанию равно none). Скрытие границ полезно, если вы используете полосы прокрутки или не хотите тратить впустую даже два пикселя в пространстве отображения.
Параметр «smart» скрывает границы рабочих областей, оставляя видимым только одно окно, но сохраняет их в рабочих областях с несколькими окнами.
Параметр «smart_no_gaps» скрывает границы контейнера, зависящие от его границ, если контейнер является единственным контейнером в рабочей области, а расстояние до края экрана равно 0.
Функция hide_edge_borders заменила старый синтаксис smart_borders. Используйте её вместо последнего.
Синтаксис:
hide_edge_borders none|vertical|horizontal|both|smart|smart_no_gaps
Пример:
hide_edge_borders vertical
.
Произвольные команды для заданных окон (''%%for_window%%'')
С помощью директивы for_window вы можете разрешить i3 выполнять любую команду при обнаружении некоего заданного окна. Это может быть использовано, например, для установки плавающих окон или изменения стиля их границ.
Синтаксис:
for_window <criteria> <command>
Пример:
# включает плавающий режим для всех окон XTerm for_window [class="XTerm"] floating enable # Делает так, чтобы все urxvts использовали рамку в 1 пиксель: for_window [class="urxvt"] border pixel 1 # Менее полезный, но довольно забавный пример: # окно становится плавающим, как только я меняю каталог на ~/work for_window [title="x200: ~/work"] floating enable
Допустимые критерии те же, что и для команд, см. command_criteria. Во время выполнения могут выполняться только команды, а не директивы конфигурации, см. list_of_commands.
Отключить фокусировку на новом окне
Когда появляется новое окно, оно тут же попадет в фокус. Директива no_focus позволяет изменить это поведение и должно быть использовано в комбинации с command_criteria.
Обратите внимание, что это работает не во всех случаях, например, при передаче данных в запущенное приложение, потому что оно требует фокус. Чтобы настроить поведение для таких случаев, обратитесь к разделу Фокус при активации окна.
no_focus будет проигнорирован и в том случае, если открыто первое окно в рабочем пространстве. Это позволяет повысить удобство использования в сочетании с workspace_layout.
Синтаксис:
no_focus <условие>
Пример:
no_focus [window_role="pop-up"]
.
Переменные
Как вы узнали в разделе о привязках клавиатурных клавиш, вам придется настроить множество привязок, включающих в себя клавиши-модификаторы. Если хочется сэкономить время при создании конфигурации и иметь потом возможность поменять используемый модификатор, то вам пригодятся переменные.
Синтаксис:
set $<имя> <значение>
Пример:
set $m Mod1 bindsym $m+Shift+r restart
Переменные заменяются непосредственно в файле при синтаксическом анализе. Расширение переменных не является рекурсивным, поэтому невозможно определить переменную со значением, содержащим другую переменную. Это не представляет никаких сложностей, менять это поведение не планируется.\ Если нужна более динамичная конфигурация, то вам следует создать небольшой скрипт, который генерирует файл конфигурации и запускает его перед запуском i3 (например, в вашем файле ~/.xsession).
Также смотрите Ресурсы X, чтобы узнать, как создавать переменные на основе ресурсов, загруженных из базы данных ресурсов X.
Ресурсы X
Переменные также можно создать с использованием значения, настроенного в базе данных ресурсов X. Это полезно, например, чтобы избежать настройки значений цвета в конфигурации i3. Вместо этого значения можно один раз настроить в базе данных ресурсов X, чтобы обеспечить легко поддерживаемую и согласованную цветовую тему во многих приложениях X.
Указание ресурса приведет к тому, что он будет загружен из БД ресурсов и его значение будет присвоено указанной переменной. Это делается буквально, поэтому значение должно быть в формате, который использует i3. Также должно быть указано запасное значение на случай, если ресурс не сможет загрузиться из базы данных.
Синтаксис:
set_from_resource $<имя> <имя_ресурса> <запасное_значение>
Пример:
# Файл ~/.Xresources должен содержать такую строку, как: # *color0: #121212 # и должен быть загружен правильно, например, с помощью: # xrdb ~/.Xresources # Это значение подхватывается другими приложениями (например, эмулятором терминала URxvt) # и может быть использовано в i3 таким образом: set_from_resource $black i3wm.color0 #000000
.
Автоматическое размещение клиентов в определенных рабочих областях
Чтобы автоматически отобразить определенное окно в определенной рабочей области, вы можете использовать назначение (assignment). Вы можете сопоставить окна по любым критериям, см. command_criteria.\ Разница между assign (назначать) и for_window <criteria> move to workspace (для_окна <критерий> переместить в рабочее пространство) заключается в том, что первое будет выполняться только тогда, когда приложение сопоставит окно (сопоставление означает фактическое отображение его на экране), а второе будет выполняться всякий раз, когда окно изменит свои свойства на что-то, что соответствует указанным критериям.
Таким образом, рекомендуется по возможности сопоставлять классы окон (и экземпляры, когда это уместно) вместо заголовков окон, потому что некоторые приложения сначала создают свое окно, а затем беспокоятся о том, чтобы задать правильный заголовок.\ На ум здесь приходит Firefox с Vimperator. При запуске окно будет называться Firefox, и только после загрузки Vimperator название изменится. Поскольку i3 получит название, как только приложение отобразит окно, в этом случае вам нужно будет соответствовать Firefox.\ Другая известная проблема связана с Spotify, который не устанавливает подсказки по классу при отображении окна, что означает, что вам придется использовать правило for_window, чтобы назначить Spotify определенному рабочему пространству.\ Наконец, использование assign [tiling] и assign [floating] не поддерживается.
Вы также можете назначить окно, которое будет отображаться на определенном выходе. Вы можете использовать имена RandR, такие как VGA1, или имена, относящиеся к выходу с текущей рабочей областью, такие как left и down.
Задания обрабатываются i3 в том порядке, в котором они указаны в конфигурационном файле. Выигрывает первое задание, которое соответствует окну, а последующие задания не рассматриваются.
Синтаксис:
assign <критерии> [→] [рабочая область] [номер] <рабочая область> assign <критерии> [→] output left|right|up|down|primary|nonprimary|<output>
Примеры:
# Назначить терминалы URxvt рабочей области 2 assign [class="URxvt"] 2 # То же самое, но точнее (точное совпадение вместо подстроки) assign [class="^URxvt$"] 2 # То же самое, но с красивой стрелкой :) assign [class="^URxvt$"] → 2 # Назначить именованной рабочей области assign [class="^URxvt$"] → work # Назначить рабочей области с номером 2, независимо от имени. assign [class="^URxvt$"] → number 2 # Вы также можете указать номер + название. # Если рабочая область с номером 2 существует, то при назначении текстовая часть будет пропущена. assign [class="^URxvt$"] → number "2: work" # Старт экземпляра irssi класса urxvt assign [class="^URxvt$" instance="^irssi$"] → 3 # Назначить urxvt выходу справа от текущего. assign [class="^URxvt$"] → output right # Назначить urxvt основному выходу assign [class="^URxvt$"] → output primary # Назначить urxvt первому неосновному выходу assign [class="^URxvt$"] → output nonprimary
Обратите внимание: возможно, у вас еще не настроен основной выход.\ Для этого запустите:
xrandr --output <output> --primary
И стрелка не обязательна, она просто хорошо выглядит . Если вы решите использовать её, это должна быть стрелка в кодировке UTF-8, а не → или что-то в этом роде.
Чтобы получить класс и экземпляр, вы можете использовать xprop. Нажав на окно, вы увидите следующий вывод:
xprop:
WM_CLASS(STRING) = "irssi", "URxvt"
Первая часть WM_CLASS — это экземпляр («irssi» в этом примере), вторая часть — это класс («URxvt» в этом примере).
Если у вас возникнут проблемы с назначениями, обязательно сначала проверьте файл журнала i3 (см. debugging.html). Он включает более подробную информацию о процессе сопоставления, а также о фактическом классе, экземпляре и заголовке окна при запуске.
Обратите внимание, что если вы хотите запустить приложение только один раз в определенной рабочей области, но не хотите назначать ей все его экземпляры постоянно, то вы можете воспользоваться поддержкой уведомлений о запуске в i3 (см. [ exec ]) в вашем конфигурационном файле следующим образом:\ Запуск Iceweasel в рабочей области 3 (один раз):
# Запуск iceweasel в рабочей области 3, и затем переключение обратно в рабочую область 1 # (Являясь утилитой командной строки, i3-msg не поддерживает уведомления о запуске, # отсюда и exec -no-startup-id). # (Запуск iceweasel с помощью команды exec в i3 важен для того, # чтобы заставить i3 создать контекст уведомления о запуске, # без которого окно(окна) iceweasel не могут быть сопоставлены с рабочей областью, # в которой была запущена команда.) exec --no-startup-id i3-msg 'workspace 3; exec iceweasel; workspace 1'
.
Автозапуск программ при старте i3
Используя ключевое слово exec можно настроить, какие команды будут автоматически выполняться при первоначальном запуске i3. Эти команды будут выполняться по порядку.\ Если использовать ключевое слово exec_always, то команда будет запускаться каждый раз при перезапуске i3.
См. command_chaining для получения подробной информации об особом значении символов «;» (точка с запятой) и «,» (запятая): они объединяют команды в i3, поэтому необходимо использовать кавычки (как показано в exec_quoting ), если они встречаются в вашей команде.
Синтаксис:
exec [--no-startup-id] <command> exec_always [--no-startup-id] <command>
Пример:
exec chromium exec_always ~/my_script.sh # Запуск эмулятора терминала urxvt, без уведомления о запуске. exec --no-startup-id urxvt
Флаг --no-startup-id объясняется здесь
.
Автоматическое размещение рабочих областей на определенных экранах
Если вы назначаете клиентов рабочим областям, может оказаться удобным разместить рабочие области на определенных экранах. Кроме того, назначение рабочих пространств экранам будет определять, какое рабочее пространство i3 использует для нового экрана при добавлении экранов или при запуске (например, по умолчанию оно будет использовать 1 для первого экрана, 2 для второго экрана и так далее).
Синтаксис:
workspace <workspace> output <output1> [output2]…
Здесь output - это название вывода RandR, к которому вы подключаете свой экран. На ноутбуке в качестве выходных данных могут использоваться имена VGA1 и LVDS1. Вы можете просмотреть доступные выходные данные, выполнив команду xrandr --current.
Если ваш X-сервер поддерживает RandR версии 1.5 или новее, i3 будет использовать объекты мониторинга RandR вместо объектов вывода. Запустите xrandr --listmonitors, чтобы просмотреть список. Обычно объект monitor содержит ровно один выходной сигнал и имеет то же имя, что и выходные данные; но если это не так, вы можете указать имя либо монитора, либо выходных данных в конфигурации i3. Например, в Dell UP2414Q используются два масштабирующих устройства, поэтому их выходные данные могут быть “DP1” и “DP2”, но название монитора - “Dell UP2414Q”.\ (Обратите внимание, что даже если вы укажете имя вывода, которое не распространяется на весь монитор, i3 все равно будет использовать всю область содержащего его монитора, а не только область вывода.)
Вы можете указать несколько значений для вывода (output). Будет использоваться первый доступный.
Если вы используете именованные рабочие пространства, они должны быть заключены в кавычки:
Примеры:
workspace 1 output LVDS1 workspace 2 output primary workspace 5 output VGA1 LVDS1 workspace "2: vim" output VGA1
.
Изменение цветов
Вы можете изменить все цвета, которые i3 использует для оформления окон.
Синтаксис:
<colorclass> <border> <background> <text> <indicator> <child_border>
прим: <child_border> - граница дочернего элемента, то есть элемента следующего за родительским
где colorclass может быть одним из:
- client.focused - Клиент, который в данный момент находится в фокусе.
- client.focused_inactive - Клиент, который является сфокусированным в своем контейнере, но в данный момент не имеет фокуса.
- client.focused_tab_title - Название контейнера вкладки или стека, который является родителем сфокусированного контейнера, но не сфокусирован непосредственно. По умолчанию используется значение focused_inactive, если не указано иное, и не используются цвета индикатора и child_border.
- client.unfocused - Клиент, который не является сфокусированным своим контейнером.
- client.urgent - Клиент, у которого активирована срочная всплывающая подсказка.
- client.placeholder - Цвет фона и текста используются для отображения содержимого окна заполнителя (при восстановлении макетов). Границы и индикатор игнорируются.
- client.background - Цвет фона, который будет использоваться для создания фона клиентского окна, поверх которого будет отображаться клиент. Только те клиенты, которые не покрывают всю область этого окна, отображают цвет. Обратите внимание, что этот цветовой класс (colorclass) принимает только один цвет.
Цвета представляются в шестнадцатеричном формате HTML (#rrggbb, опционально #rrggbbaa).
Пример (цвета по умолчанию):
# class border backgr. text indicator child_border client.focused #4c7899 #285577 #ffffff #2e9ef4 #285577 client.focused_inactive #333333 #5f676a #ffffff #484e50 #5f676a client.unfocused #333333 #222222 #888888 #292d2e #222222 client.urgent #2f343a #900000 #ffffff #900000 #900000 client.placeholder #000000 #0c0c0c #ffffff #000000 #0c0c0c client.background #ffffff
Обратите внимание, что для оформления окон цвет вокруг дочернего окна - это «child_border», а цвет «border» - это только две тонкие линии вокруг заголовка.
Цвет индикатора используется для указания того, где будет открыто новое окно. Для контейнеров с горизонтальным разделением в цвет индикатора будет окрашена правая граница, для контейнеров с вертикальным разделением - нижняя граница. Это относится только к отдельным окнам внутри разделенного контейнера, которые в остальном неотличимы от отдельных окон за пределами разделенного контейнера.
Следование фокуса за мышью
По умолчанию фокус окна следует за вашей мышью и переключается, когда курсор пересекает границы окон. Однако, если в вашем случае это доставляет неудобства, то вы можете отключить это поведение и контролировать фокус только с помощью клавиатуры. Мышь по-прежнему будет полезна внутри текущего активного окна (например, для перехода по ссылкам в окне вашего браузера).
Синтаксис:
focus_follows_mouse yes|no
Пример:
focus_follows_mouse no
.
Смещение курсора мыши
По умолчанию при переключении фокуса на окно на другом выходе (например, при фокусировке окна на рабочей области 3 на выходе VGA-1, поступающем из рабочей области 2 на LVDS-1) курсор мыши перемещается в центр этого окна.
С помощью параметра mouse_warping вы можете контролировать, когда курсор мыши должен быть перемещен. Значение none полностью отключает перемещение, в то время как output - это описанное выше поведение по умолчанию.
Синтаксис:
mouse_warping output|none
Пример:
mouse_warping none
.
Отображение меток на оформлении окна
Если эта функция активирована, то метки (см. vim_like_marks ) на окнах будут отображаться. Однако любая метка, начинающаяся с подчеркивания в ее названии «_», не будет показана, даже если эта опция активна.
По умолчанию опция имеет значение yes.
Синтаксис:
show_marks yes|no
Пример:
show_marks yes
.
Продолжение строки
Файлы конфигурации поддерживают продолжение строки. То есть, когда вы заканчиваете строку символом обратной косой черты «** \ **», анализатор игнорирует разрыв строки. Эту функцию можно использовать для создания более читаемых файлов конфигурации. Закомментированные строки не продолжаются.
Примеры:
bindsym Mod1+f \ fullscreen toggle # эта строка не имеет продолжения \ bindsym Mod1+F fullscreen toggle
.
Промежутки (Gaps)
Начиная с версии 4.22 в i3 можно настраивать интервалы между окнами. “Промежутки (Gaps)” - это добавленное расстояние между окнами (или разделенными контейнерами) и краями экрана:
Вы можете настроить два разных вида промежутков:
- Внутренние промежутки - это пространство между двумя соседними окнами (или разделенными контейнерами).
- Внешние промежутки - это пространство по краям экрана. Вы можете настроить каждую сторону (левую, правую, верхнюю, нижнюю) отдельно.
Обратите внимание, что внешние промежутки добавляются к внутренним, то есть общий размер промежутка между краем экрана и окном (или разделенным контейнером) будет равен сумме внешних и внутренних промежутков.\
Вы можете определить пробелы как глобально, так и для каждой рабочей области, используя следующий синтаксис.
# Внутренние промежутки для всех окон: пространство между двумя соседними окнами (или разделенными контейнерами). gaps inner <gap_size>[px] # Внешние промежутки для всех окон: пространство по краям экрана. gaps outer|horizontal|vertical|top|left|bottom|right <gap_size>[px] # Внутренние и внешние промежутки для всех окон в определенной рабочей области. # <ws> может быть номером или названием рабочей области. workspace <ws> gaps inner <gap_size>[px] workspace <ws> gaps outer|horizontal|vertical|top|left|bottom|right <gap_size>[px] # Включение “интеллектуальных промежутков” означает, что промежутки не будут отображаться, если # в рабочей области есть только одно окно или разделенный контейнер. # # inverse_outer включает внешние промежутки только в том случае, # если в рабочей области имеется ровно одно окно или разделенный контейнер. smart_gaps on|off|inverse_outer
Внешние промежутки могут быть настроены для каждой стороны индивидуально с помощью директив top, left, bottom и right.\ horizontal и vertical - это обозначения для left/right и top/bottom соответственно.
Настройка i3bar
Полоса внизу вашего монитора рисуется отдельным процессом под названием i3bar. Вынесение этой части «пользовательского интерфейса i3» в отдельный процесс имеет ряд преимуществ:
- Это модульный подход. Если вам вообще не нужна панель рабочей области или вы предпочитаете другую (dzen2, xmobar, может быть, даже панель gnome?), вы можете просто удалить конфигурацию i3bar и вместо этого запустить свою любимую панель.
- Он следует философии UNIX: «Пусть каждая программа хорошо выполняет одну задачу». Если i3 хорошо управляет вашими окнами, то i3bar хорошо отображает панель на каждом мониторе (если вы не настроили иначе).
- Это приводит к созданию двух отдельных чистых кодовых баз. Если вы хотите разобраться в i3, вам не нужно заморачиваться в деталях i3bar и наоборот.
Тем не менее, i3bar настраивается в том же файле конфигурации, что и i3. Это связано с тем, что он тесно связан с i3 (в отличие от i3lock или i3status, которые полезны для людей, использующих другие оконные менеджеры). Поэтому нет смысла использовать другое место настройки, когда у нас уже есть хорошая конфигурационная инфраструктура.
Настройка панели рабочего пространства начинается с открытия блока панели. У вас может быть несколько таких блоков, чтобы использовать разные настройки на разных выводах (мониторах):
Пример:
bar {
status_command i3status
}
.
Команда i3bar
По умолчанию i3 просто пропустит i3bar и предоставит вашей shell-оболочке обрабатывать исполнение, выполняя поиск в $PATH правильной версии. Если у вас i3bar находится в другом месте или нет бинарного файла в $PATH, то вы можете указать i3 напрямую что требуется запустить.
Указанная команда будет передана в sh -c, поэтому вы можете использовать шаблоны поиска, также нужно корректно цитировать пути и т. д.
Синтаксис:
i3bar_command <command>
Пример:
bar {
i3bar_command /home/user/bin/i3bar
}
.
Команда строки состояния
i3bar может запускать программу и выводить каждую строку из ее вывода stdout в правой части панели. Это можно использовать для отображения системной информации, например, ваш текущий IP адрес, состояние батареи или время/дата.
Указанная команда будет передана в sh -c, поэтому вы можете использовать шаблоны поиска, также нужно корректно цитировать пути и т. д. Обратите внимание, что для обработки сигналов, в зависимости от вашей оболочки (известно, что это касается пользователей dash(1)), вы должны использовать команду оболочки exec, чтобы сигналы передавались в вашу программу, а не в оболочку.
Синтаксис:
status_command <command>
Пример:
bar {
status_command i3status --config ~/.i3status.conf
# Для пользователей Dash(1), которые хотят, чтобы работала обработка сигналов:
status_command exec ~/.bin/my_status_command
}
.
Команда кнопок рабочей области
Начиная с i3 версии 4.23, i3bar может запускать программу и использовать ее стандартный вывод stdout для определения кнопок рабочей области, отображаемых в левой части панели. С помощью этой функции вы можете, например, переименовывать кнопки рабочих областей, скрывать определенные рабочие области, всегда показывать кнопку рабочей области, даже если рабочая область не существует, или изменять порядок кнопок.
Также см. status_command для параметра строки состояния и i3bar-workspace-protocol.html для подробного протокола.
Синтаксис:
workspace_command <command>
Пример:
bar {
workspace_command /path/to/script.sh
}
.












