Тайловый оконный менеджер i3. Поставил оконный менеджер i3 Установка i3

Логотип i3WM

В современных графических оболочках концепция тайлига очень сильно недооценивается, примитивный тайлинг есть и в Windows и в таких оболочках как KDE, Gnome, XFce. Но все это лишь частичная поддержка тайлинга. По настоящему тайлинг отлично реализован в таких оконных менеджерах как Awesome, DWM, i3WM. И сегодня как раз поговорим о последнем.

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

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

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

  • i3 - Собственно сам оконный менеджер
  • i3bar - «Родная» панель в i3wm все что умеет это отображение рабочих столов и строку терминала
  • i3status - Отображение некоторой информации строчкой терминала
  • i3lock - Экран разблокировки компьютера

Теперь давайте разберемся со всем по порядку.

Настройка i3WM

После запуска нас встретит окно выбора mod клавиши. Будет два варианта Meta (windows кнопка) и Alt. После запуска перед собой мы будем видеть только i3bar с запущенным в ней i3status и больше ничего.

Окно выбора Mod клавиши

В качестве терминала по умолчанию используется xterm - запускается комбинацией Mod+Enter . Не будем пока зацикливаться на управлении, уясним лишь то, что бы закрыть окно нужно нажать Mod+Shift+q , а что бы перезапустить i3 - Mod+Shift+r .

Теперь давайте проясним для себя то что нам надо

  • Обои - Для этого будем использовать Nitrogen
  • Лаунчер приложений - Тут есть много вариантов, рассмотрим мы только самые популярные
  • Анимации и VSync - Для этого нам понадобится композитор, я предлагаю Compton потому что он легкий и стабильный


Памятка стандартных хоткеев i3WM

Устройство конфига в i3WM

По умолчанию конфиг i3WM находится в папке ~/.config/i3

Вообще для того чтобы виртуозно работать с конфигом i3wm надо всего лишь знать что все что идет после # - комментарий, и еще три вещи:
1) Запуск программ происходит с помощью exec, для того чтобы наш оконный менеджер что то запустил используем следующий шаблон

exec <команда>

  1. Пример
    exec compton
    При запуске i3 - запуститься и композитор compton
  2. Пример
    exec ~/script.sh
    При запуске i3 - запуститься скрипт который лежит в домашней папке под именем script.sh
  3. Пример
    exec nitrogen - -restore
    При запуске i3 - запуститься nitrogen с опцией restore

2) Установка переменных. В i3wm можно создать переменные, работает это все как define в C++. На место переменной встанет заданная ей строчка. Переменные можно задать с помощью set.

set $<имя переменной> <значение>

  1. Пример
    set $color #023537
    Переменной $color задано значение #023537
  2. Пример
    set $fileManager pcmanfm-qt
    Переменной $fileManager заданное значение pcmanfm-qt

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

3) Комбинации клавиш задаются с помощью bindsym, синтаксис предельно прост

bindsym <комбинация> <действие>

  1. Пример
    bindsym $mod+1 workspace 1
    При нажатии mod клавиши и цифры 1 - мы перейдем на рабочий стол 1.
  2. Пример
    bindsym XF86Tools exec firefox
    При нажатии кнопки Tools - запустится FireFox
  3. Пример
    set $press XF86Search
    set $search dmenu
    bindsym $press $search
    При нажатии заданной в переменной кнопки - будет выполнена заданная в другой переменной программа.

В начале конфига стоит поправить пару строчек на свой вкус:

set $mod Mod4 # Установка mod клавиши

font pango:xos4 Terminus 8 # Установка шрифта для рамок окна

Теперь давайте поглубже копнем в создание горячих клавиш.
Скорей всего у вас на клавиатуре будет 6той ряд клавиш, который хочется использовать по полной. Что бы узнать имя клавиши я использую xev .
Запустите xev , и наведя на белое окно нажимайте нужную клавишу что бы узнать ее имя. Для удобства анализа 6го ряда запускайте его так

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

1) Регулировка громкости. Я использую pactl для этих целей, и для работы кнопок +\- и переключения состояния микрофона и звука я использую вот такие бинды

bindsym XF86AudioRaiseVolume exec pactl set-sink-volume 0 +5%

bindsym XF86AudioLowerVolume exec pactl set-sink-volume 0 -5%

bindsym XF86AudioMute exec pactl set-sink-mute 0 toggle

bindsym XF86AudioMicMute exec pactl set-source-mute alsa_input.pci-0000_00_1b.0.analog-stereo toggle

2) Регулировка яркости. Вообще вряд-ли это будет проблемой, но для того что бы более менее избавить вас от гугления - я просто покажу как это делается

bindsym XF86MonBrightnessUp exec xbacklight -inc 6
bindsym XF86MonBrightnessDown exec xbacklight -dec 6

Внешний вид

Рамки окон

Кнопки управления окном в i3wm заменены хоткеями

Изменить размер рамок окна по умолчанию можно с помощью new_window pixel <Размер рамки в пикселях> - я себе поставил 1, только чтобы видеть границы окон.

Цвет рамок окна можно задать по шаблону
<Класс окна> <Цвет границы> <Цвет фона> <Цвет текста> <Цвет индикатора>

Классы окон:
client.focused - окно в фокусе
client.unfocused - окно вне фокуса
client.focused_inactive - окно в фокусе но не активно
client.urgent - окно требует внимания (всплывающее уведомление например)

Пример настройки цвета;

# 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.background #ffffff

Ну и думаю стоит привести пример настройки цветов i3bar - все по той же схеме, только немного другие теги.

Классы индикаторов рабочих столов:

  • focused_workspace - Рабочий стол в фокусе;
  • active_workspace - Активный рабочий стол;
  • inactive_workspace - Неактивный рабочий стол;
  • urgent_workspace - На рабочем столе есть приложение которое требует внимания;

Примернастройки цветов для i3bar:

Bar { colors { background #000000 statusline #ffffff separator #666666 focused_workspace #4c7899 #285577 #ffffff active_workspace #333333 #5f676a #ffffff inactive_workspace #333333 #222222 #888888 urgent_workspace #2f343a #900000 #ffffff } }

Внешний вид приложений

Логотип Qt

Для настройки внешнего вида приложений надо будет попотеть.
Начнем с простого - настройки GTK+
Все что нам надо, это лишь программа lxappearance ,в ней можно настроить иконки, тему GTK и курсора.

Теперь сложнее - настройка Qt.
Для настройки Qt нам нужно будет всего два приложения qt4config и qt5ct .
Запускаем qt4config - выбираем тему, шрифт и т. п. - все.
Но вот если мы запустим qt5ct то увидим сообщение о отсутствии переменной среды. Чтобы исправить нам надо будет отредактировать файл Xsession , т.к я использую sddm - то у меня он находиться по адресу /usr/share/sddm/scripts/Xsession. В него нам надо добавить строчку export QT_QPA_PLATFORMTHEME="qt5ct" - после чего перелогинимся и уже спокойно можем запустить qt5ct и там провести настройку

По мимо стандартных тем для Qt можно выбрать движок тем. Советую обратить внимание на Kvantum - это SVG based движок для Qt. Простой в настройке, тем пока что мало, но то что есть выглядят очень круто и футуристично.

Анимации и VSync

Логотип CompizFusion

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

Добавим в конфиг exec compton -f --vsync drm
И после перезапуска получаем красивые переходы, прозрачность и главное вертикальную синхронизацию, все очень просто!

Обои

Интерфейс Nitrogen

Про обои мы тоже договорились что будем использовать nitrogen. Запускаем его, выбираем обоину и радуемся, все что остается, это только добавить в конфиг exec nitrogen --restore

Conky

Conky достаточно популярный виджет в мире Linux

Это необязательный пункт, но я подумал что стоит и его упомянуть, тут я просто покажу как надо запускать коньки в i3wm
exec conky -c ~/.config/i3/conky_c
Информации по настройке коньков в интернете уйма, от себя добавлю лишь то - что стоит исключить их из обработки теней в compton.

Лаунчер Приложений

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

  • Dmenu - каноничный лаунчер, по факту это выпадающая строка терминала с автодополнением. Минималистичный и легкий.
  • Xfce AppFinder - лаунчер приложений из окружения XFace, основан на GTK+ , не сказать что удобное решение, но он простой и понятный.
  • Rofi - Достаточно гибкий лаунчер, по мимо простого запуска приложений умеет навигацию по окнам и ssh клиент.

Вывод

Прочитав этот гайд вы точно сможете настроить оконный менеджер i3WM под себя, и иметь неповторимую среду рабочего стола. Лично от себя могу добавить что именно благодаря знакомству с i3WM я осознал насколько гибок Linux, и что можно работать именно с теми инструментами которые тебе удобны. В этом плане i3WM тебя не ограничивает, надо лишь только посидеть за конфигом.

Ну раз уж такое дело, то думаю ShowMyDesktop тред в комментариях будет не лишнем.
Спасибо за внимание!

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

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

Ставим i3, а также дополнительные пакеты:

$ sudo apt-get install i3 i3status i3lock dmenu

После логинимся под i3 … вуаля. При первом запуске i3 задаст несколько вопросов (где хранить конфиг и что считать mod-клавишей, то есть клавишей - модификатором. Я назначил win-клавишу, это, кстати, предлагается по умолчанию).

Основные сочетания клавиш:

  • Mod + Enter - открыть новый терминал;
  • Mod + D - запустить любую программу через dmenu;
  • Mod + 0..9 - переключение между workspace’ами (их, кстати, 10. Номер текущего высвечивается в левом нижнем углу);
  • Mod + Shift + 0..9 - перемещение окон в заданный workspace;
  • Mod + Shift + Q - закрыть текущее окно;
  • Mod + Стрелочки - перемещение между окнами, вместо стрелочек также могут быть использованы клавиши «J» (влево), «K» (вниз), «L» (вверх) и «;» (вправо);
  • Mod + Shift + Стрелочки - перемещение окон в пределах workspace’а, вместо стрелочек также могут быть использованы буквненные клавиши и точка с запятой;
  • Mod + V - использовать вертикальное разбиение;
  • Mod + H - использовать горизонтальное разбиение (отмечу, что можно запросто комбинировать вертикальное и горизонтальное разбиение, благодаря чему можно достичь интресных эфектов);
  • Mod + E - размещение окон по-умолчанию (default layout);
  • Mod + S - стековое размещение (stacking layout);
  • Mod + W - размещение с табами (tabbed layout);
  • Mod + F - раскрыть окно во весь экран или свернуть его обратно;
  • Mod + Shift + Пробел - разрешить свободное перемещение окна (floating mode) или вернуть его в мозаику;
  • Mod + Shift + R - рестарт i3 (например, после обновления конфига);
  • Mod + Shift + E - выйти из i3;
Настраивается i3 через простые конфиг-файлы: ~/.i3/config и ~/.i3status.conf (ура! никакого lua и пересборки исходников!!!)

Кстати, ~/.i3/config - получаем путем копирования из /etc/i3.. по умолчанию ~/.i3/config отсутствует.

$ cp /etc/i3status.conf ~/.i3/i2status.conf

Ставим xxkb и загоняем его в автостарт (exec в ~/.i3/config):

Exec xxkb &

Также ставим и вписываем на автозапуск необходимые апплеты:

Exec nm-applet & exec blueman-applet &

Затем - клавиши управления звуком:

# Volume settings bindsym XF86AudioRaiseVolume exec amixer -q sset Master 3%+ bindsym XF86AudioLowerVolume exec amixer -q sset Master 3%- bindsym XF86AudioMute exec amixer -q set Master toggle

Там в общем - всё понятно. Вообще, i3 отличается редкой юзабельностью и понятностью конфигов.

Но и это, как говорится, “еще не всё”. Конфиги хорошо документированы. Достаточно посмотреть на http://i3wm.org/i3status/manpage.html (для затравки: там описано, например, как использовать dzen2 с i3) и http://i3wm.org/docs/userguide.html , чтобы понять - документировано всё, достаточно хорошо. Да, и всё, что описано в документации - работает!

  • Если хочется попробовать тайлинговый менеджер, то имеет смысл посмотреть на i3 - он, на данный момент, по моему скромному мнению, наиболее прост с точки зрения настройки
  • Придется чуть “перестроить голову”. Тайлинговый менеджер - это другой способ организации взаимодействия ПК - человек, хотим мы этого или нет. Просто - другой. Больше клавиатуры, минимум мыши. На рабочий стол файл не положить (да и сам рабочий стол так… весьма относителен).
  • Тем не менее, жить можно, и достаточно комфортно. Хотя по первости кажется - ну его нафиг! Но если это пережить (до состояния “пальцы помнят”), то становится достаточно удобно.

Лично я поработал под i3 около недели, вернулся назад (openbox и панели xfce), но вот серьезно подумыаю, что на нетбуке (стареньком 8" sony, широкоформатном до безобразия) i3 пропишется основным менеджером... причем, видимо, надолго.

Вот уже несколько месяцев прошло как Я перешел на "оконный менеджер" вместо "окружения рабочего стола". Более техническую и точную разницу между этими двумя понятиями можете нагуглить. С точки зрения обычного пользователя (по крайней мере с того, что мне почувствовалось) - WM (оконный менеджер) лишь управляет окнами, а значит:

1) меньше жрет ресурсов;

2) основная работа будет с клавиатурой, мышкой лишь в браузере тыкать и в Gimp;

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

Для обычного пользователя это всё может показаться сложным и ненужным - ну и что, что жрет меньше ресурсов, ведь у меня 100500 ГБ оперативки и чуть меньше ядер процессора. А вот мой старый ноутбук получил вторую жизнь, голая система (Ubuntu 16.04) без DE съедает лишь чуть более чем 200 МБ оперативки. Ну и тайловый оконный менеджер i3 (i3wm - improved windows manager), которому посвящен этот пост, предоставляет ещё одну чудесную возможность - настройка нескольких мониторов с разнымы разрешениями реально проще пареной репы.

Итак, знакомство можете начинать с официального сайта - https://i3wm.org/docs/userguide.html . Для начала можно поставить его дополнительно к обычному DE и выбирать сессию i3 при логине. А когда хватит сил пересесть полностью, можно поставить голый дистрибутив линукса без DE и тогда сразу ставить этот WM. Перед загрузкой сессии i3 обязательно выпишите себе пару комбинаций клавиш и команд, ибо так и застрянете с пустым чёрным экраном и будете делать хард ресет:)

При первом запуске i3 спросит клавишу-модификатор, Я себе выбрал клавишу "win" - хоть какая-то польза и не будет перебивать другие комбинации. Теперь Вы можете запустить терминал комбинацией "win+Enter", а если есть терминал - есть всё.

Кстати, насчёт эмулятора терминала, мой выбор в i3 - urxvt , а для полного счастья нужно ставить пакет rxvt-unicode-256color . Он не такой функциональный как, например, стандартный гномовский, зато быстрее и красиво выглядит в тайловых WM. Все настройки urxvt правите в ~/.Xresources, после редактирования файла - выполнить команду:

xrdb ~/.Xresources

Следующий важный для меня шаг - настройка статусной строки, особенно хотелось иметь рабочие иконки Dropbox и Skype. Конечно же, хотелось настроить имеющуюся с коробки строку статуса - i3bar, хоть она немного багнутая. Если не понравится, ставьте что-либо другое, i3wm не будет обижаться.

Как работает i3bar: утилита i3status читает конфиг файл /etc/i3status.conf и скармливает полученные статусы в виде строки утилите i3bar. Конечно же, адекватные статусы хочется получать за приемлемое время, не более секунды. Поэтому в конфиг файле в секции general, опции interval нужно задать значение 1. Ещё быстрее нет смысла, только лишняя нагрузка процессора. Но из-за того, что эти статусы то ли стают в очередь, то ли ещё чего, а мой старый нетбук до того тормозной, что не успевал каждую секунду обрабатывать всё и обрабатывал статус где-то за 1,1 секунды, они отображались не вовремя. Через час работы разница во времени (между настоящим и тем, что показывал в строке статуса) ставала очень велика, около 15-20 минут. Поэтому нужно было придумать что-то другое. К счастью, i3 позволяет написать свой скрипт для получения статусов и использовать его совместно со встроенным, либо даже без встроенного. Итак, первая версия скрипта:
#!/bin/sh # shell script to prepend i3status with more stuff i3status | while: do read line datetime = $(date +"%Y-%m-%d %H:%M:%S") echo "$datetime | $line" || exit 1 done

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

Чтобы этот скрипт запускался вместо стандартного i3status, нужно в ~/.config/i3/config править секцию bar:

Bar { status_command ~/i3status.sh tray_output primary position top } В опции status_command нужно указать полный путь к своему скрипту (ну или поместить его по одному из путей в переменной PATH).

Следующее, что мне страшно нехватало - отображение раскладки, языка. Опять-таки, i3wm не для новичков, придется потратить много времени и нервов. Но настроив единожды, можно легко переносить свои настройки на любую другую машину. Также можно заливать конфигурационные файлы и автоматические скрипты на GitHub и выполнять любую настройку с нуля за считанные минуты. Для управления раскладками (чтобы в каждом приложении была своя раскладка), нужно поставить kbdd. Сами же раскладки, метод переключения и запуск kbdd настраиваем в ~/.xinitrc:

Setxkbmap "us,ua,ru" ",winkeys" "grp:shift_caps_toggle" kbdd exec i3

Что это всё значит:

1) 3 раскладки - us, ua, ru, переключение комбинациией shift+caps lock (по аналогии можете себе настраивать всё, что угодно)

2) запуск kbdd после установления раскладок

3) запуск сесии i3

При этом это всё запустится при выполнении команды "startx". А startx придется выполнять, ибо компьютер будет грузиться в режиме без иксов и вместо окошечка с логином будет консоль с логином. Кстати, это тоже надо настроить правильно:

1) нужно поправить конфиг grub

ищем строку

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

и меняем на

GRUB_CMDLINE_LINUX_DEFAULT="text"

после чего обновить груб:

sudo update-grub

2) Для систем, которые используют systemd надо сделать дополнительные настройки:

Sudo systemctl enable multi-user.target --force sudo systemctl set-default multi-user.target

3) сам блокиратор экрана с логином тоже нужен консольный, для этого хорошо подойдет vlock, но надо ставить версию 2.2.2-3, никак не 2.2.2-5 (в этой более новой версии почему-то можно зайти без пароля с другого tty). Ну и потом надо будет сказать своему пакетному менеджеру, чтобы не обновлял vlock. Далее вешаем блокирование экрана на стандартную комбинацию (CTRL+ALT+L), для этого в ~/.config/i3/config добавляем строчку:
bindsym ctrl+Mod1+l exec vlock -an

Теперь надо настроить отображение раскладок в строке статуса, поэтому тот скрипт i3status.sh будет выглядеть примерно так:

#!/bin/sh # shell script to prepend i3status with more stuff i3status | while: do read line datetime = $(date +"%Y-%m-%d %H:%M:%S") layouts=$(setxkbmap -query | awk "/layout/{print $2}") current=$(dbus-send --print-reply=literal --dest=ru.gentoo.KbddService /ru/gentoo/KbddService ru.gentoo.kbdd.getCurrentLayout | awk "{ print $2 }") index=$(($current+1)) lang=$(echo $layouts | cut -d, -f$index) echo "$lang | $datetime | $line" || exit 1 done

То есть, текущая раскладка будет показана перед датой/временем.

Если же Вы таки решились поставить на ноутбук i3wm, Вам скорее всего захочется в строке статуса отображать уровень заряда батареи и уровень сигнала wifi. Отображение уровня заряда батареи можно настроить стандартными средствами в файле /etc/i3status.conf (возможно, поменять надо будет индекс батареи с 0 на 1, или наоборот в зависимости от ноутбука):
battery 1 { format = "%status %percentage - %remaining" low_threshold = 30 threshold_type = time # toggle actual capacity/design capacity #last_full_capacity = true hide_seconds = true integer_battery_capacity = true } Аналогично, возможно надо будет поиграться с индексом звукового устройства для отображения громкости:
volume master { format = "♪: %volume" format_muted = "♪: muted (%volume)" device = "pulse:0" } Саму же громкось в данном случае регулирую через программу pavucontrol (если у вас тоже Pulse, то настройки по сути те же).

Ну а вот уровень сигнала wifi было "достать" не так просто. Лично мне удалось через CLI (Command Line Interface) Network Manager-а. Возможно, найдете лучший способ. Кстати, искать беспроводные сети и подключаться к ним можно через этот же nmcli. Итак, финальная версия скрипта i3status.sh для ноутбука:
#!/bin/sh # shell script to prepend i3status with more stuff i3status | while: do read line layouts=$(setxkbmap -query | awk "/layout/{print $2}") current=$(dbus-send --print-reply=literal --dest=ru.gentoo.KbddService /ru/gentoo/KbddService ru.gentoo.kbdd.getCurrentLayout | awk "{ print $2 }") index=$(($current+1)) lang=$(echo $layouts | cut -d, -f$index) wifi=$(nmcli d wifi | grep "^\*" | grep -v "\*.*SSID" | awk "{ print $8 }") datetime=$(date +"%Y-%m-%d %H:%M:%S") echo "$lang | W: $wifi | $line | $datetime" || exit 1 done Ах, ну и ещё отключить "клик мышки" на тачпаде, это страшно бесит. Нужно добавить строчку (# - комментарий, не обязательно добавлять, но хорошо проясняет следующую строчку) в файл ~/.config/i3/config:
# Turn off tap click (single finger, two finger, and 3 finger) exec synclient TapButton1=0 TapButton2=0 TapButton3=0 Иконки. Почему-то именно иконка Dropbox не хочет нормально отображаться в i3bar. Оказывается, нужно запустить dbus перед стартом dropbox, но в какой только скрипт Я не пробовал это засунуть, а Dropbox по-прежнему запускался без иконки. Пока что решил эту проблему тем, что создал скрипт dropbox_fix.sh и прописал такую строчку:

Dropbox stop; dbus-launch; dropbox start & И теперь каждый раз когда вижу, что нет иконки, запускаю этот скрипт. Иногда бывают проблемы с отображением иконок Skype и даже Thunderbird. Это лечится проще - просто перезагрузкой i3 "на месте" (никак не влияет на все запущенные программы), обычно это комбинация mod+shift+r. Да, ещё раз напомню, что багов таких мелких хватает, но плюсов в i3wm Я увидел больше, да и рабочий компьютер у меня не выключается месяцами, а значит "стартовые багофиксы" выполняю очень редко.

Далее, что ещё нужно знать о настройках - в конфиг файле ~/.config/i3/config ваша выбранная клавиша-модификатор будет обозначаться как $mod, клавиша alt обозначается как Mod1, клавиша win - Mod4. Все остальные клавиши таких специальных обозначений не имеют. Настроить несколько мониторов можно в этом же файле используя команду xrandr.
И ещё одна важная вещь - скриншоты тоже надо настроить! Но и это не проблема. Сначала ставим утилиту scrot - легкая, быстрая и конфигурабельная. Обычний снимок (весь экран) вешаю на кнопку PrintScreen, а на Alt+PrintScreen - снимок текущего (активного) окна. Поскольку клавиша Alt сама является модификатором, то самый легкий способ привязать данную комбинацию - это указать альтернативное значение кнопки PrintScreen, то есть - SysRq. Итого в файл ~/.config/i3/config добавляем следующие строчки:

# Take screenshots bindsym Print exec scrot "%Y-%m-%d_%H:%M:%S.png" -e "mv $f ~/Pictures/" bindsym Mod1+Sys_Req exec scrot -u "%Y-%m-%d_%H:%M:%S.png" -e "mv $f ~/Pictures/" В результате все скриншоты будут попадать в папку ~/Pictures. При желани можно наконфигурить ещё больше гибкости. Вот пример скриншота с i3wm:

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

Напомню, что в данный момент у тебя уже должна быть базовая инсталляция i3 с окном логина slim, терминалом lilyterm, демоном автомонтирования devmon, системой показа уведомлений twmnd, апплетом переключения раскладки gxkb и композитным менеджером compton. Это вполне самодостаточный десктоп, которым можно без проблем пользоваться. Но есть множество более мелких вещей, которые мы не затронули в предыдущей статье. Например, у нас до сих пор нет блокировщика экрана, той самой штуки, которая требует пароль после простоя или пробуждения компа от спячки.

Блокировщик экрана slock

Slock - чрезвычайно простой блокировщик экрана. Настолько простой, что в нем нет даже поля ввода для пароля. Он просто показывает черный экран, цвет которого меняется на синий, когда ты вводишь пароль, и на красный, если пароль неверен.

Slock доступен во многих дистрибутивах в форме обычного пакета. В Arch Linux его можно установить так:

$ sudo pacman -S slock

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

Description=Lock X session using slock for user %i Before=sleep.target User=%i Environment=DISPLAY=:0 ExecStartPre=/usr/bin/xset dpms force suspend ExecStart=/usr/bin/slock WantedBy=sleep.target

Помести эти строки в файл /etc/systemd/system/[email protected] , а затем активируй юнит для текущего пользователя:

$ sudo systemctl enable slock@ИМЯ_ЮЗЕРА.service

Теперь slock будет автоматически активирован при переходе ноутбука в сон.

Настройка строки состояния

Многие пользователи i3 рекомендуют менять стандартную строку состояния i3status на нечто более прогрессивное, функциональное, красивое и замечательное. В этом есть определенный смысл, но стоит учитывать, что, в отличие от простого i3status, многие другие реализации написаны на языках bash и Python, что делает их менее эффективными и более требовательными к ресурсам.

Поэтому я рекомендую использовать i3status, но несколько расширить его функциональность. Первое, что стоит сделать, - это разместить в строке не только время, но и текущую дату и день недели. Для этого надо всего лишь исправить директиву tztime local в файле ~/.i3status.conf так, чтобы она выглядела следующим образом:

Tztime local { format = "%a %Y-%m-%d %H:%M:%S" }

Также ты можешь отключить ненужные тебе разделы строки состояния, просто закомментировав строки, начинающиеся с order:

#order += "run_watch DHCP"

Эта строка отключает показ информации о статусе DHCP. Меняя местами строки order , можно поменять расположение элементов в строке.

Ты можешь столкнуться с тем, что строка не отображает информацию о состоянии сети. Обычно проблема заключается в неверных именах сетевых устройств в конфиге. Стоит запустить команду ifconfig , чтобы узнать правильные имена, а затем прописать их в конфиг i3status. Устройства с именами, начинающимися на en, - это Ethernet-адаптеры, wl - Wi-Fi.

Вот пример настроек i3status для моего ноутбука:

Wireless wlp3s0 { format_up = "W: (%quality at %essid) %ip" format_down = "W: down" } ethernet enp0s25 { format_up = "E: %ip (%speed)" format_down = "E: down" }

Кроме статуса сети, батареи, времени, тебе также может понадобиться инфа о текущем уровне громкости. Ее легко добавить с помощью такого блока:

Volume master { format = "♪ %volume" format_muted = "♪ muted (%volume)" device = "default" mixer = "Master" mixer_idx = 0 }

и соответствующей строки в начале конфига:

Order += "volume master"

Погода в строке состояния

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

Для начала скачаем скрипт weather.py:

$ mkdir ~/bin $ cd ~/bin $ wget https://raw.githubusercontent.com/calzoneman/i3-weather/master/weather.py $ chmod +x weather.py

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «сайт», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score!

В отличие от awesome его настройки записываются в обычном текстовом файле.

Особенности i3wm для пользователя: корректная поддержка нескольких мониторов (смотрите скрин в конце), простой текстовый конфиг-файл, нет необходимости пересобирать wm после изменения настроек, три режима расположения окон, меню запуска приложений dmenu, создает рабочие столы по мере необходимости и удаляет пустые, из коробки имеет отличную информационную панель, показывающую уровень Wi-Fi сети, заряд батареи и много еще чего.

Демонстрация от автора i3

Установка

i3wm представлен в репозиториях Debian, Arch, Gentoo, Ubunto, FreeBSD, NetBSD, OpenBSD, OpenSUSE, Mageia, Fedora и Exerbo. Я буду рассказывать на примере Ubuntu 12.04.

Нужный пакет называется i3, поэтому:

# apt-get install i3

Теперь на экране ввода пользователя и пароля можно выбрать «i3» в качестве оконного менеджера.

Настройка

При первом запуске вам предложат выбрать клавишу-модификатор. Я выбрал win для совместимости с большинством приложений.

Добавим переключение на русскую раскладку по Alt+Shift, автозагрузку dropbox, переключение между рабочими столами по mod+Control+Left/Right, блокировку экрана по mod+Control+l и спящий режим с блокировкой экрана при выходе из него по mod+Control+s.

Переключение раскладки клавиатуры настроено с помощью setxkbmap. Для этого служит

$ setxkbmap "us,ru" ",winkeys" "grp:alt_shift_toggle"

Чтобы не вводить её каждый раз после перезагрузки, создадим в корневой папке пользователя файл.xsessionrc, сделаем исполняемым и приведем к виду:

#!/bin/sh exec setxkbmap "us,ru" ",winkeys" "grp:alt_shift_toggle"

Для автозагрузки Dropbox .xsessionrc будет выглядеть так:

#!/bin/sh exec setxkbmap "us,ru" ",winkeys" "grp:alt_shift_toggle" & dropbox start &

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

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

$ cp /etc/i3/config ~/.i3/config

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

Некоторые стандартные горячие клавиши, которые работают по умолчанию:

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 на экран ввода имени пользователя и пароля

Полные возможности по настройке и использованию i3wm описаны в документации .

Бонус

Если у вас два монитора, или встроенный экран нетбука и внешний монитор, как у меня, то i3wm отлично будет работать на них. Самое главное, что для этого не требуется никаких дополнительных настроек.

Cписок доступных мониторов:

$ xrandr -q

Настроем их работу в паре:

$ xrandr --output LVDS1 --mode 1366x768 --pos 0x0 --output VGA1 --mode 1280x1024 --pos 1366x0

где LVD1 - встроенный в нетбук монитор, его разрешение 1366x768 и он прижат к левому верхнему углу, VGA1 - внешний монитор, его разрешение 1280x1024 и он смещен на 1366 пикселей вправо относительно левого верхнего угла.