i3 (Русский)

i3 — это динамический тайловый оконный менеджер, вдохновлённый wmii и нацеленный на разработчиков и опытных пользователей.

Состояние перевода: На этой странице представлен перевод статьи i3. Дата последней синхронизации: 14 апреля 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Среди заявленных целей i3 — понятная документация, надлежащая поддержка нескольких мониторов, древовидная структура для окон и различные режимы, как в vim.

Установка

Установите пакет i3-wm.

Также есть группа пакетов i3. В её состав входят менеджер окон, блокировщик экрана и две программы, которые записывают строку статуса в i3bar через stdout.

Примечание: i3-wm конфликтует с i3-gaps (форк i3), и при установке этой группы по умолчанию выбирается i3-gaps.

Запуск

Из консоли

Запустите i3 с помощью xinit.

Экранный менеджер

В состав i3-wm входят i3.desktop и Xsession, который запускает оконный менеджер. включает журнал (полезно для отладки). интегрирует i3 с GNOME.

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

Для большей информации смотрите официальную документацию, а именно i3 Пользовательское Руководство.

Назначение клавиш

В i3 команды вызываются с помощью клавиши-модификатора, называющейся . По умолчанию (Mod1) это , но также популярна альтернатива (Mod4), которая известна как Super. Клавиша Super обычно изображается на клавиатуре со значком Windows, а на клавиатуре Apple она представлена в виде клавиши Command.

Смотрите справочную карту i3 и Использование i3 по умолчанию. Смотрите назначение клавиш чтобы добавить новые сочетания/горячие клавиши.

Пользователи не-Qwerty раскладок могут захотеть обойтись без «мастера настройки, как описано ниже.

Если вы переключаетесь между несколькими оконными менеджерами или средами рабочего стола, можно использовать sxhkd или другую программу, не зависящую от среды, для управления сочетаниями клавиш. Дополнительную информацию можно найти в статье Горячие клавиши#Xorg.

Контейнеры

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

Для подробностей смотрите Дерево i3 и Данные древовидной структуры и контейнеров.

Запуск приложений

i3 использует dmenu в качестве запуска приложений, которое вызывается по умолчанию $mod+d. Так как это опциональная зависимость, перед использованием нужно вручную установить пакет .

i3-wm содержит i3-dmenu-desktop, Perl оболочку для dmenu который использует ярлыки приложений для создания списка всех установленных приложений. Кроме того, можно использовать .

rofi — это популярная замена dmenu и других программ, которые могут отображать список ярлыков приложений.

Использование KRunner для запуска приложений в KDE Plasma/i3

Можно запустить i3 вместе с KDE Plasma, как описано здесь: KDE (Русский)#Использование альтернативного оконного менеджера

При запуске Plasma с можно установить KRunner в качестве альтернативной программы запуска приложений с помощью $mod+d, добавив следующее в конфигурацию i3:

Настройка

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

Мастер настройки и альтернативные раскладки клавиатуры

При первом запуске i3 предлагает запустить мастер настройки i3-config-wizard. Этот инструмент создаёт файл , беря за основу шаблон . Он вносит в шаблон два изменения:

  1. Он просит пользователя выбрать клавишу-модификатор по умолчанию, который он добавляет в шаблон в виде одной строки, например, ; и
  2. заменяет все строки bindcode на строки bindsym, соответствующие текущей раскладке клавиатуры пользователя.

Шаг 2 предназначен для того, чтобы гарантировать, что четыре навигационных сочетания клавиш, j, k, и на Qwerty-клавиатуре будут отображены на символы клавиш, которые имеют такое же расположение, например, , , , на клавиатуре Dvorak. Побочным эффектом этой магии является то, что до пятнадцати других клавиш могут быть переадресованы таким образом, что это нарушит мнемонику — так, для пользователя Dvorak "перезапуск" ("restart") будет привязан к вместо , "разделение по горизонтали" ("split horizontally") будет привязано к $mod1+d вместо $mod1+h, и так далее.

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

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

Автозапуск программ

Добавьте команду в файл . Например:

exec terminator

Также можно использовать XDG Autostart.

i3bar

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

За дополнительной информацией обращайтесь в раздел Configuring i3bar официального руководства пользователя.

Альтернативы i3bar

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

Для панели XFCE (), добавьте следующую строку в любом месте :

exec --no-startup-id xfce4-panel --disable-wm-check

Можно отключить i3bar, закомментировав секцию в , или добавить сочетание клавиш для его переключения:

Таким образом, вы можете показать или скрыть бар когда пожелаете.

Альтернативы, не привязанные к среде рабочего стола:

  • excalibar Лёгкий, но настраиваемый статус-бар, написанный на языке C.
https://github.com/cylgom/excalibar || excalibar-gitAUR

i3status

Скопируйте файлы настроек по умолчанию в домашний каталог:

$ cp /etc/i3status.conf ~/.config/i3status/config

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

Замены i3status

  • i3pystatus Расширяемый Python 3 статус бар со множеством плагинов и опций настроек по умолчанию.
https://github.com/enkore/i3pystatus i3pystatus || i3pystatus-gitAUR
  • Barista Замена i3status, написанная на языке Go.
https://github.com/soumya92/barista || not packaged? search in AUR

Оболочки для i3status

Шрифты-иконки в строке состояния

Поддержка иконочных шрифтов встроена с i3 версии 4.20.

  • .
  • .

Чтобы использовать несколько шрифтов, в файле настроек укажите резервные шрифты через запятую:

В соответствии с синтаксисом pango, размер шрифта задается только один раз, в конце списка шрифтов. Установка размера для каждого шрифта приведёт к тому, что все шрифты, кроме последнего, будут игнорироваться.

Добавьте иконки в формат строки в ~/.config/i3status/config используя числа Unicode, приведенные в шпаргалке, указанной выше. Метод ввода будет варьироваться между текстовыми редакторами. Например, чтобы вставить значок "heart" (номер unicode f004):

  • в различных текстовых редакторах графического интерфейса (например gedit, Leafpad) и терминалов (например GNOME Terminal, xfce4-terminal): , , Enter
  • в Emacs: , , Enter, , Enter
  • в Vim (Русский) (в режиме вставки): ,
  • в urxvt (Русский): удерживая , наберите

Эмулятор терминала

По умолчанию при нажатии запускается — скрипт, вызывающий терминал. Порядок терминалов, которые он пытается запустить, описан в i3-sensible-terminal(1).

Чтобы вместо него запускался выбранный вами терминал, измените эту строку в :

bindsym $mod+Return exec i3-sensible-terminal

В качестве альтернативы можно установить переменную окружения .

Отключение клика по заголовку

Добавьте bindsym button1 nop, чтобы не переключать фокус на окно, когда вы щелкёете по его заголовку. Полезно, если ваша разметка по умолчанию имеет вкладки, и вы часто не успеваете щёлкнуть вкладки i3, а не что-то в приложении.

Советы и рекомендации

Быстрый переход к открытому окну

Быстро перейти к необходимому окну

Добавьте в :

bindsym $mod+x [urgent=latest] focus

Сохранить и восстановить расположение окон

Начиная с версии 4.8, i3 может сохранить и восстановить рабочее пространство слоёв (лэйаутов). Чтобы это сделать, необходимы пакеты perl-anyevent-i3 и .

Сохранить текущее расположение окон одного рабочего пространства

Чтобы сохранить текущее расположение окон, выполните следующие действия:

  1. Во-первых, выполните различные команды, чтобы открыть окна в предпочтительной рабочей области и измените их размер, если это необходимо. Совершите запись каждой выполненной команды для каждого окна.
  2. Теперь, в новой рабочей области откройте терминал и запустите следующее: где N есть число предпочтительной рабочей области. Это позволит сохранить текущую структуру рабочей области N в файл .
  3. Вновь созданный файл должен быть отредактирован, однако это может быть сделано с помощью следующих команд:
    $ sed -i 's|^\(\s*\)// "|\1"|g; /^\s*\/\//d' ~/.config/i3/workspace_N.json

Восстановить расположение окон на рабочем пространстве

Есть два способа восстановить расположение окон на рабочем пространстве: написать скрипт или отредактировать для автоматической загрузки макета. В этом разделе будет рассмотрен только первый случай; обратитесь к официальной документации для второго случая.

Для восстановления сохраненного макета в предыдущем разделе, создайте файл с именем со следующим содержанием:

  • Первые строки:

где М - номер рабочей области, в которую вы хотели бы загрузить ранее сохраненный макет, и N это номер рабочей области сохранённой в предыдущем разделе.

  • И команды исполльзуемые в предыдущей секции чтобы получить нужные окна, но заключённые в круглые скобки и амперсандом (&) перед последней скобкой.

Например, если сохранённый макет содержит три окна:

Сделайте файл исполняемым. И, наконец, расположение рабочих областей N может быть загружено в рабочие области М, запустив:

$ ~/load_layout.sh
Примечание: Если скрипт, описанный выше, не работает как следует, обратитесь к официальной документации. Секции swallows в ~/.config/i3/workspace_N.json нужно редактировать вручную.

Контейнер для электронного блокнота

По умолчанию, scratchpads (блокноты) содержат только одно окно. Однако контейнеры также могут быть сделаны блокнотом.

Создайте новый контейнер (например, ), разделите их () и создайте другой контейнер. Сфокусируйтесь на родительском (), разделите в противоположном направлении (), и создайте снова.

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

Совет: При использовании только терминальных приложений подумайте об использовании мультиплексора вроде tmux.

Хранитель экрана и управление питанием

С Power management#xss-lock вы можете зарегистрировать экранный блокировщик для вашего сеанса i3. Кроме того, вы можете использовать для блокировки экрана после заданного периода времени:

xautolock -time 10 -locker "i3lock -i background_image.png" &

Можно использовать service-файл systemd для блокировки экрана перед уходом в ждущий или спящий режим; смотрите Power management#Suspend/resume service files. Обратите внимание, что i3lock требует, чтобы тип службы был .

Смотрите также DPMS.

Другой вариант — использовать xidlehookAUR с или любым другим хранителем экрана. xidlehook — это замена xautolock, написанная на Rust и имеющая дополнительные возможности. Сюда входит возможность отключения блокировки при воспроизведении звука или при полноэкранном режиме. Параметр задаётся в секундах:

xidlehook --not-when-audio --not-when-fullscreen --timer 360 "betterlockscreen -l dim" "" &

Выключение, перезагрузка, блокировка экрана

Так как нет иконок на экране для Выключения, Перезагрузки и Блокировки Экрана, для удобства, мы можем задать комбинацию горячих клавиш. Ниже предпологается, что установлен , чтобы позволять обычным (не привелигелированным) пользователям запускать команды управления питанием.

Добавьте следующие строки в ваш , по завершению вам будет предложен запрос, когда вы нажимаете .

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

Примечание:
  • sleep 1 добавляет небольшую задержку, чтобы предотвратить возможное состояние гонки при уходе в ждущий режим
  • Аргумент -i команды systemctl poweroff позволяет выключить систему, даже если в неё вошли другие пользователи (для этого нужен polkit) или когда logind (ошибочно) предполагает это.

Список альтернативных блокировщиков экрана есть в статье Список приложений/Безопасность#Блокировка экрана.

Перекрытие окна терминала

Подобно dwm, в i3 можно «поглощать» (swallow) текущее окно терминала новым окном программы, запущенной через этот терминал. Это позволяет сделать пакет .

Например, чтобы mpv при запуске перекрыл собой окно терминала:

$ swallow mpv video.mp4

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

Ручное управление внешними дисплеями

Благодаря xrandr есть много способов лёгкого управления дисплеями. Приведённый ниже пример ведёт себя подобно показанному ранее примеру управления питанием.

Пример меню для включения/выключения выходов VGA и HDMI на ноутбуке:

## Ручное управление внешними дисплеями
# Сочетания клавиш и что они делают
set $mode_display Ext Screen (v) VGA ON, (h) HDMI ON, (x) VGA OFF, (y) HDMI OFF
mode "$mode_display" {
    bindsym v exec --no-startup-id xrandr --output VGA1 --auto --right-of LVDS1, mode "default"
    bindsym h exec --no-startup-id xrandr --output HDMI1 --auto --right-of LVDS1, mode "default"
    bindsym x exec --no-startup-id xrandr --output VGA1 --auto --off, mode "default"
    bindsym y exec --no-startup-id xrandr --output HDMI1 --auto --off, mode "default"

    # выход: Enter или Escape
    bindsym Return mode "default"
    bindsym Escape mode "default"
}
# Сочетание клавиш для вызова меню
bindsym $mod+x mode "$mode_display"

Любое окно, которое всё ещё открыто на выключенном дисплее, автоматически возвращается на оставшийся активным дисплей.

Самый простой способ определить имена ваших устройств — подключить устройство, которое вы хотите использовать, и выполнить команду:

$ xrandr --query

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

Список доступных опций есть в статье xrandr (Русский). Смотрите также i3 userguide и/или i3 FAQ на reddit.

Вкладки или стековый просмотр веб-страниц

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

Чтобы i3 управлял вкладками веб-браузера (в этом примере для uzbl), добавьте следующую строку в ваш

for_window [class="Uzbl-core"] focus child, layout stacking, focus

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

Если вы предпочитаете вкладки, с окнами в горизонтальном направлении ('tabs'), используйте:

for_window [class="Uzbl-core"] focus child, layout tabbed, focus

Переменные рабочих областей

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

set $WS1 term
set $WS2 web
set $WS3 misc
set $WS4 media
set $WS5 code

Затем замените имена рабочих области в соответствии с их переменной:

bindsym $mod+1          workspace $WS1
...
bindsym $mod+Shift+1    move container to workspace $WS1

Для болшей информации смотрите изменение названий рабочих областей.

Правильное обращение с плавающими диалогами

Хотя диалоги должны открываться по умолчанию в плавающем режиме (floating) , многие до сих пор открываются в тайловом режиме (tiling). Чтобы изменить это поведение, проверьте с помощью xorg-xprop и добавьте правильные правила в (используя pcre синтаксис):

for_window [window_role="pop-up"] floating enable
for_window [window_role="task_dialog"] floating enable

Вы также можете использовать в качестве правила заголовок и регулярные выражения:

for_window [title="Preferences$"] floating enable

или :

for_window [class="(?i)mplayer"] floating enable

Скорость Загрузки/Отдачи сети в statusbar

Можно адаптировать этот скрипт. Для этого:

  • переименуйте обе ваши сетевые карты в соответствии с вашей системой (используйте )
  • найдите их затем замените соответствующими:
$ find /sys/devices -name network_interface

Теперь просто сохраните скрипт в подходящем месте (например ) и пропишите его в вашу программу статуса.

Автоматическое переключение горизонтальной / вертикальной ориентации

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

exec_always --no-startup-id autotiling

Решение проблем

Общее

Часто ошибки уже исправлены в разрабатываемых версиях и , и в апстриме попросят воспроизвести какие-либо ошибки в этих версиях. Смотрите также Отладка/Трассировка#Параметры компиляции.

Искажённый текст

Установите какие-нибудь шрифты TrueType.

Кнопки в строке сообщений i3 не работают

Кнопки, такие как "Edit config" в i3-nagbar вызывают , поэтому убедитесь, что i3 распознаёт ваш #Эмулятор терминала.

Неисправная строка оболочки в тайловом терминале

i3 v4.3 и выше игнорирует размер инкремента подсказки для тайловых окон . This may cause terminals to wrap lines prematurely, amongst other issues. As a workaround, make the offending window floating, before tiling it again.

Курсор мыши остается в режиме ожидания

При запуске приложения или скрипта, которое не поддерживает протокол startup notification, курсор мыши будет оставаться в режиме занят/часы/и т.п. в течение 60 секунд.

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

exec --no-startup-id ~/script
bindsym $mod+d exec --no-startup-id dmenu_run

Чтобы полностью отключить эту анимацию, смотрите Темы курсора#Создание ссылок на недостающие курсоры.

Не реагируют сочетания клавиш

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

bindsym --release Print exec --no-startup-id scrot
bindsym --release Shift+Print exec --no-startup-id scrot -s

Тиринг (разрыв картинки по горизонтали)

i3 не осуществляет двойную буферизацию должным образом следовательно, может появится тиринг или мерцание. Чтобы предотвратить это, установите и настройте picom.

Значки трея не видны

Директива может потребовать установки первичного вывода с помощью xrandr, явного указания вывода или просто удаления этой директивы. Подробности в статье xrandr (Русский). Конфигурация по умолчанию, которую создаёт i3-config-wizard, больше не добавляет эту директиву в конфигурацию, начиная с i3 версии 4.12.

Рабочая область по умолчанию для Spotify

Чтобы назначить рабочую область по умолчанию для окон Spotify, нельзя использовать стандартный путь с командой , а лучше использовать команду , например

~/.config/i3/config
...
for_window [class="Spotify"] move container to workspace $ws10

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

Смотрите также

Arch Linux Forums

Screencasts

gollark: Yes, I indeed have.
gollark: It's lower-level - just channel, reply channel, message.
gollark: But the security part comes from digital signatures, and it can theoretically do nice secure stuff over any protocol.
gollark: You can run your own skynet server if you like.
gollark: ER, I MEAN REDNET.
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.