Привет, Хабр! Сегодня я хотел бы рассказать вам о моём переезде на Linux под управлением оконного менеджера I3-wm. Попробую немного раскрыть тему настройки оконного менеджера и поделюсь своим опытом. Надеюсь кому-то будет полезно получить такого рода информацию.

P.s если вы не новичок, то вред ли узнаете много нового, но благодарю за внимание!

И так! Данная программа была разработана в целях бэкапа конфигурации системы, которую я использую каждый день - Manjaro I3. Я приготовил 3 конфигурации оконного менеджера I3-wm для систем: Manjaro, Solus и Fedora, так как они наиболее популярны на мой взгляд. Я использовал каждый из представленных дистрибутивов и временами меняю совой основной дистрибутив на один из них.

Я пользуюсь Linux с 18 февраля 2019 года, но летом 2020 я начал использовать Linux как основную систему (на тот момент ещё Ubuntu 20.04 LTS).

Что меня привело к Linux

Как я уже писал выше, до 2019 года я использовал операционную систему Windows, но в один момент мне захотелось преобразить её и моя затея сильно затянулась, т.к оформление, которое я надумал, требовало большой работы над Windows 10 и некоторые нужные мне задачи реализовались не так удобно и практично, как могли бы. По этому, я решил попробовать что-то новое и открыл для себя Linux, а именно дистрибутив KDE Neon. Я быстро настроил внешний вид системы и решил попробовать использовать её для своих нужд (программирование, серфинг в интернете, игры).

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

Мне очень понравилось так взаимодействовать с системой, и с тех пор я использую Linux, как основную ОС на своем домашнем ПК. В процессе изучения, как и все, сменил много дистрибутивов и через время остановился на Manjaro.

Как зарождался мой проект

В августе 2021 года мне стали интересны тайловые оконные менеджеры, и почему некоторые люди предпочитают их стековым оконным менеджерам. Поразмыслив на эту тему, я решил посмотреть, что в них такого интересного и установил I3-wm на мой дистрибутив. С тех пор я заинтересовался возможными конфигурациями таких систем под управлением I3, так же мне очень понравилось то, что теперь системе нужно намного меньше ресурсов в отличие от Windows 10, которая требует 4гб ОЗУ для нормальной работы с ней.

Вкратце про оконные менеджеры

Оконные менеджеры бывают двух видов:

Стековые - это оконные менеджеры, с плавающими окнами как на OS X или Windows. Самый простой случай, когда это просто обычные окна, которые можно расположить по оси Z (Окна перекрывают друг друга).

Тайловые – разбивают оконное пространство. “Тайловые” в переводе “Мозаичные”, то есть приложения занимают экранное пространство так, как будто оно разбито на “мозаику” из неперекрывающихся областей, окон или фреймов. Главный плюс тайловых оконных менеджеров в скорости работы с ними, невероятной легковесности и гибкой настройке под нужды пользователя.

Fedora KDE (Стековый оконный менеджер KWM)
Fedora KDE (Стековый оконный менеджер KWM)
ARCH Gonome (Стековый оконный менеджер Gnome Shell)
ARCH Gonome (Стековый оконный менеджер Gnome Shell)
Manjaro I3 (Тайловый оконный менеджер I3-wm)
Manjaro I3 (Тайловый оконный менеджер I3-wm)
Solus I3-wm
Solus I3-wm

Так я начал изучать тайловый оконный менеджер I3-wm. Я экспериментировал с его конфигурациями, собрав свою собственную. Через некоторое время я понял, что мне нужен бэкап моей системы, я сохранил мою конфигурацию и все нужные файлы на мой github, чтобы в случае сбоя системы, при очередных экспериментах, я мог быстро восстановить старую сборку.

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

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

Как работает программа

  • Клонировать репозиторий: git clone https://github.com/Avdushin/GOAPPLE

  • Перейти в репозиторий: cd GOAPPLE

  • Запустить утилиту: ./goapple или ./goapple -ru для запуска русифицированной версии

При запуске программы вы видите главное меню:

Главное меню GOAPPLE
Главное меню GOAPPLE
  • DISTROS - открывает меню выбора дистрибутивов

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

меню выбора дистрибутивов
меню выбора дистрибутивов
  • MYOS - выводит информацию о системе

MYOS - информация о системе
MYOS - информация о системе
  • SETTINGS - открывает настройки утилиты (можно выбрать язык)

Меню настроек
Меню настроек

Что я использовал для написания программы

Изначально, я решил писать проект на bash, так как подумал что было бы интересно реализовать на нем эту затею (первые версии программы были написаны на bash). Но потом, я решил поработать над интерфейсом, и тут мне на помощь пришёл Python, т.к я понимал как можно реализовать на нём поставленные мной задачи, но через время я решил что python не так эффективен для моей программы и переписал её на GO.

Проект на python (неактуально) - https://github.com/Avdushin/PIN3APPLE

Проект на GO (актуальная версия) - https://github.com/Avdushin/GOAPPLE

Для реализации программы я использовал библиотеки GO:

"os/exec" - для запуска команд

"github.com/mbndr/figlet4go" - для вывода логотипа

"flag" - для запуска с помощью флагов (-ru, -h)

Код проекта - https://github.com/Avdushin/GOAPPLE/blob/main/main.go

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

Как настраивается конфигурационный файл I3

Конфигурация I3 настраивается с помощью всего одного конфигурационного файла, он находится в ~/.config/i3/config

"~" - домашняя директория пользователя

Конфигурационный файл I3
Конфигурационный файл I3

В начале конфига назначается клавиша $MOD - главная клавиша в системе, с помощью которой можно управлять окнами, запуском приложений и другими действиями в системе.

Назначение главных клавиш системы
Назначение главных клавиш системы

Далее я настроил раскладку клавиатуры:

exec --no-startup-id setxkbmap -model pc105 -layout us,ru -variant -option grp:alt_shift_toggle

русский, английский языки и переключение раскладки на alt+shift

Настройка мониторов (экрана)

Настройка рабочих столов для нескольких мониторов:

exec --no-startup-id xrandr --output HDMI-0 --left-of DP-1-1 --auto

set $firstMonitor HDMI-0

set $secondMonitor DP-1-1

# Выбор монитора рабочих для мест

workspace 1 output $firstMonitor

...

workspace 6 output $secondMonitor

...

P.s если у вас один монитор, всё автоматически будет подстроено под него.

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

# перемещение на рабочие места 

bindsym $mod+1 workspace 1

bindsym $mod+2 workspace 2

bindsym $mod+3 workspace 3

...

# перемещение выделенных окон на рабочее место

bindsym $mod+Shift+1 move container to workspace 1; workspace 1

bindsym $mod+Shift+2 move container to workspace 2; workspace 2

bindsym $mod+Shift+3 move container to workspace 3; workspace 3

...

Старт меню запуска программ

Для меню запуска программ я использую приложение rofi

# старт rofi 
bindsym $mod+space exec --no-startup-id rofi -show run -font "Noto Sans 13"

Автостарт программ

Таким образом можно настраивать автоматический старт программ

# Polybar панель

exec_always --no-startup-id ~/.config/polybar/launch.sh &

Запуск программ по горячим клавишам

# запуск терминала kitty

bindsym $mod+Return exec kitty;focus

# сделать скриншот экрана

bindsym Print exec --no-startup-id flameshot gui

Управление плавающими/статичными окнами

# плавающее окно

for_window [class="gcolor3"] floating enable

# статичное окно

for_window [class="Nitrogen"] floating disable

Отступы между окнами

# отступы с помощью I3-gaps

for_window [class="^.*"] border pixel 2

# внутренние отступы

gaps inner 8

# внешние отступы

gaps outer 2

Настройка цвета окна

# Настройка цвета окна

 # class обводка фон текст индикатор

 client.focused #6790EB #6790EB #e5e5e5 #6790EB

 client.unfocused #222222 #222222 #aaaaaa #222222

 client.focused_inactive #222222 #222222 #a9a9a9 #222222

 client.placeholder #222222 #222222 #aaaaaa #222222

 client.urgent #d42121 #d42121 #f7f7f7 #d42121

 client.background #242424

Настройка панели POLYBAR

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

Конйиг файл панели Polybar
Конйиг файл панели Polybar

Конфигурационный файл POLYBAR находится в ~/.config/polybar/config

Как выглядит панель
Как выглядит панель

В конфиге панели я дописал пару тем оформления и несколько модулей (подробнее см. в моём GitHub)

Настройка цветов панели

; Solarized Dark =======
background = #223C43
foreground = #f3f4f5
; ======================

Радиус и отступы

radius = 12

padding-left = 5

padding-right = 5

РАСПОЛОЖЕНИЕ МОДУЛЕЙ

#(Слева, по центру, справа)

modules-left = i3 xwindow 
modules-center = 
modules-right = cpu2 memory3 volume date xkeyboard2 uptime variety trash wireless-network powermenu

Трей

По умолчанию системный трей в polybar включен, но я не использую его. Чтобы его включить, вам нужно раскомментировать строки:

; комментарий выглядит так ";"

tray-detached = false

tray-offset-x = 0

tray-offset-y = 0

tray-padding = 2

tray-maxsize = 20

tray-scale = 1.0

tray-position = right

tray-background = ${colors.background}

Значки рабочих мест

# ЗНАЧКИ РАБОЧИХ СТОЛОВ

(Иконки используют шрифт Awesome)

ws-icon-0 = 1;
ws-icon-1 = 2;
ws-icon-2 = 3;
ws-icon-3 = 4;
ws-icon-4 = 5;
ws-icon-5 = 6;
ws-icon-6 = 7;
ws-icon-7 = 8;
ws-icon-8 = 9;
ws-icon-9 = 10;
ws-icon-default = ""

Модуль корзины

[module/trash]

type = custom/script

interval = 1

exec = ~/.config/polybar/trash

format-prefix = "  "

format-prefix-padding-left = 0

format-prefix-padding-right = 0

format-prefix-foreground = ${colors.foreground}

label-padding = 0

label-foreground = ${colors.foreground}

click-left = rm -rf ~/.local/share/Trash/files/* ;exec notify-send 'Корзина пуста'

format-background = 

format-underline = #FF7676

Модуль даты и времени

(По умолчанию я добавил 12-часовой формат, он меняется при клике на модуль на самой панели)

[module/date]
type = internal/date
interval = 1
date = " %d-%m-%Y "
date-alt = " %d-%m-%Y"
time = %l:%M:%S %p
#time = %H:%M:%S

time-alt = %H:%M:%S

format-prefix = " "
format-prefix-foreground = #c1941a
format-underline = #6C6565
format-foreground = ${colors.foreground}
format-background = ${colors.background}
label =  %time% |  %date% 

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

Приглашаю вас на GitHub репозиторий проекта - там вы можете ознакомиться с его кодом/скриптами и посмотреть интересующие вас настройки.

Благодарю за внимание! Надеюсь, я поделился чем-то новым и интересным для вас.

Комментарии (6)


  1. vanyas
    16.05.2022 15:32
    +3

    для систем: Manjaro, Solus и Fedora, так как они наиболее популярны на мой взгляд

    Серьёзно? Про Solus я впервые тут прочитал, при этом зная с пару десятков других дистрибутивов, уверены, что он входит в тройку самых популярных, обгоняя Убунту?


  1. vanyas
    16.05.2022 15:35

    но через время я решил что python не так эффективен для моей программы и переписал её на GO

    А можно подробнее, чем тут питон менее эффективен чем go?


    1. garwall
      17.05.2022 16:50

      да тут и баша за глаза хватит. )


  1. vtb_k
    16.05.2022 17:00
    +1

    Добро пожаловать в пользователи линукса.
    Добавлю несколько замечаний.
    Нет смысла привязывать настройки к какому-то дистрибутиву. Настройки — просто текстовые файлы и будут одинаковые на любом дистре. А вот версии приложения могут быть разные. Я долгое время хранил все файлы в обычном git репозитории. Год или 2 тому я пересел на менеджер dotfiles — chezmoi (есть десятки разных). Вся прелесть в том, что можно менять настройки в зависимости от хоста, оси и множества других факторов, используя стандартные go-templates
    Советую вместо bash попробовать zsh, он мощнее по возможностям и конфигурациям.
    Я кстати с і3 перелез на swaywm на Wayland, но это уже по вкусу


  1. mc2
    16.05.2022 21:33

    Посоветуйте пожалуйста что то подобное i3 для Windows?:)


    1. saidelman
      16.05.2022 22:28

      Под другим постом на хабре (ровно год назад, какое забавное совпадение) уже всплывала эта тема, и я тогда оставил комментарий, но комментов там 1800+, так что ссылка только для приличия: habr.com/ru/company/ruvds/blog/556124/#comment_23044066

      Потому просто процитирую тот мой коммент:

      что там с тайловостью у Винды?
      Сразу скажу, что сам не пользовался и не знаю, что там под капотом, как хорошо работает и т.д. Но с месяц назад внезапно обнаружил несколько репозиториев, которые себя называют TWM для Windows. Чтобы не быть голословным:


      Спустя год могу только добавить, что из этих четырёх репозиториев только один обновлялся за последние полгода. Я их все по-прежнему не пробовал :)