Как стать автором
Обновить

GOAPPLE: быстрая настройка I3-wm

Время на прочтение7 мин
Количество просмотров24K

Привет, Хабр! Сегодня я хотел бы рассказать вам о моём переезде на 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)

Код проекта:

GOAPPLE-CLI - консольная версия

GOAPPLE-GUI - графическая версия

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

Как настраивается конфигурационный файл 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 репозиторий проекта - там вы можете ознакомиться с его кодом/скриптами и посмотреть интересующие вас настройки.

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

Теги:
Хабы:
Всего голосов 5: ↑3 и ↓2+1
Комментарии12

Публикации

Истории

Работа

DevOps инженер
42 вакансии
Go разработчик
122 вакансии

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань