С момента установки первого Arch Linux — я пользуюсь Openbox WM и
tint2
для отображения панелей.
Но tint2
, как где-то писали — «Капризна, как школьница«.
В целом он отлично работает, но вот трей отрисовывает значки запущенных приложений достаточно криво:
Потому, после установки Arch в очередной раз (дома менял диск на SSD, переустанавливал систему) — решил поискать другие варианты.
Попробовал polybar
— очень понравился по функционалу и настройкам, попробую использовать его.
Основной недостаток polybar
— отсутствие панели задач с запущенными приложениями, taskbar, потому — скомбинирую его с tint2
— часть экрана будет под таскбар от tint2
, часть — под трей от polybar
.
Содержание
Установка
Устанавливаем:
[simterm]
$ yaourt -S polybar
[/simterm]
Для проверки — запускаем тестовую панель:
[simterm]
$ install -Dm644 /usr/share/doc/polybar/config $HOME/.config/polybar/config $ polybar example
[/simterm]
Настройка
ОК, теперь настроим polybar
под себя.
Что хочется видеть:
- верхную панельку:
- часики
- иконка звука
- апплет батареи
- температуру
- CPU load и Mem usage
- использование дисков
- меню запуска приложений
- нижняя панель:
- таскбар с открытыми окнами
- системный трей
Документация — на официальной Wiki.
Убиваем все запущенные панели tint2
:
[simterm]
$ killall tint2
[/simterm]
Создаём свой конфиг — ~/.config/polybar/setevoy-polybar.conf
, пока добавляем только цвета, указание монитора, на котором его отображать, поверим вид системного трея и один модуль — date
:
[colors] background = #222 background-alt = #444 foreground = #dfdfdf foreground-alt = #555 primary = #ffb52a secondary = #e60053 alert = #bd2c40 [bar/top] monitor = HDMI-1 width = 100% height = 27 radius = 6.0 fixed-center = false background = ${colors.background} foreground = ${colors.foreground} line-size = 3 line-color = #f00 border-size = 4 border-color = #00000000 padding-left = 0 padding-right = 2 module-margin-left = 1 module-margin-right = 2 font-0 = fixed:pixelsize=10;1 font-1 = unifont:fontformat=truetype:size=8:antialias=false;0 font-2 = siji:pixelsize=10;1 modules-right = date tray-detached = false tray-position = right tray-offset-x = 0 tray-offset-y = 0 tray-maxsize = 16 tray-padding = 0 tray-scale = 1 [module/date] type = internal/date interval = 1.0 date = %Y-%m-%d% time = %H:%M date-alt = %A, %d %B %Y time-alt = %H:%M:%S label = %date% %time% label-font = 3
Запускаем:
[simterm]
$ polybar -c setevoy-polybar.conf top
Батарея
Добавим отображение состояния батареи.
Добавляем новый модуль, пока в минимальной конфигурации:
[module/battery] type = internal/battery ; Use the following command to list batteries and adapters: ; $ ls -1 /sys/class/power_supply/ battery = BAT0 adapter = ADP1
И в modules-right
добавляем его вызов:
... modules-right = battery date ...
Иконки
Рядом с % заряда хочется выводить иконку, отображающую статус.
Для этого потребуется коллекция иконок, документация по шрифтам-иконкам тут>>>, по модулю battery
— тут>>>.
На Arch Linux устанавливаем:
[simterm]
$ sudo pacman -S ttf-font-awesome
[/simterm]
Проверяем:
[simterm]
$ fc-list | grep Awe /usr/share/fonts/TTF/fa-regular-400.ttf: Font Awesome 5 Free:style=Regular /usr/share/fonts/TTF/fa-solid-900.ttf: Font Awesome 5 Free:style=Solid /usr/share/fonts/TTF/fa-brands-400.ttf: Font Awesome 5 Brands:style=Regular
[/simterm]
Добавляем шрифт в конфиг:
... font-0 = fixed:pixelsize=10;1 font-1 = unifont:fontformat=truetype:size=8:antialias=false;0 font-2 = siji:pixelsize=10;1 font-3 = Material Icons:style=Regular font-4 = FontAwesome 5 Free:size=10:style=Solid;3 ...
Находим нужную иконку на странице https://fontawesome.com/cheatsheet, копируем её, вставляем:
... [module/battery] type = internal/battery label-font = 5 ; Use the following command to list batteries and adapters: ; $ ls -1 /sys/class/power_supply/ battery = BAT0 adapter = AC0 label-full = �~I~@ %percentage%
(она и в vim-е так же выглядит, наверно нужен плагин, Sublime Text тоже не отображает)
Ещё один нюанс — тут указывается label-font
+1 от его индекса в списке.
Т.е. если FontAwesome указан как font-4 — то в модуле его указываем как label-font = 5. Но шрифт в модуле можно не указывать вообще — тогда Polybar будет искать иконку во всех загруженных им шрифтах.
Запускаем polybar
, можно с опцией -l info
, что бы вывести список загруженных шрифтов — полезно при дебаге шрифтов:
[simterm]
$ polybar -c setevoy-polybar.conf -l info top * Loading config: setevoy-polybar.conf * Loaded monitor HDMI-1 (1920x1080+0+0) * Bar geometry: 1920x27+0+0 * Starting application * Starting module/battery * Starting module/date * Entering event loop (thread-id=1) * Eventqueue worker (thread-id=4) * Configured DPI = 96x96 * Loaded font "fixed:pixelsize=10" (name=DejaVu Sans, offset=1, file=/usr/share/fonts/TTF/DejaVuSans.ttf) * Loaded font "unifont:fontformat=truetype:size=8:antialias=false" (name=DejaVu Sans, offset=0, file=/usr/share/fonts/TTF/DejaVuSans.ttf) * Loaded font "siji:pixelsize=10" (name=DejaVu Sans, offset=1, file=/usr/share/fonts/TTF/DejaVuSans.ttf) * Loaded font "Material Icons:pixelsize=11" (name=Material Icons, offset=2, file=/usr/share/fonts/TTF/MaterialIcons-Regular.ttf) * Loaded font "FontAwesome 5 Free:size=10:style=Solid" (name=Font Awesome 5 Free, offset=3, file=/usr/share/fonts/TTF/fa-solid-900.ttf) ...
[/simterm]
И получаем иконку батареи:
Теперь добавим анимацию зарядки и разрядки.
Для отображения разряда батареи добавляем label-discharging = %time%
, который будет выводить оставшееся время, animation-discharging-0-4
, в котором перечисляем иконки, animation-discharging-framerate
, где указывается время в мс, через которые анимация будет меняться, и затем в format-discharging
— указываем <animation-discharging>
и <label-discharging>
.
Для указания адаптера и батереи — проверяем их имена в системе:
[simterm]
$ ls -1 /sys/class/power_supply/ ACAD BAT1 hidpp_battery_0
[/simterm]
Получается такой модуль:
... [module/battery] type = internal/battery label-font = 5 ; Use the following command to list batteries and adapters: ; $ ls -1 /sys/class/power_supply/ battery = BAT1 adapter = ACAD label-full = �~I~@ %percentage%% label-discharging = %time% format-discharging = <animation-discharging> <label-discharging> animation-discharging-0 = �~I~@ animation-discharging-1 = �~I~A animation-discharging-2 = �~I~B animation-discharging-3 = �~I~C animation-discharging-4 = �~I~D animation-discharging-framerate = 1000
Иконки для animation-discharging-{1-4}
можно копировать по ссылке выше, или прямо из документации к модулю, хотя Chromium их и не отображает (может его перезапустить надо, что бы шрифты подтянул).
Запускаем, проверяем:
Аналогично делаем для процесса зарядки:
... label-charging = %percentage%% format-charging = <animation-charging> <label-charging> animation-charging-0 = �~I~D animation-charging-1 = �~I~C animation-charging-2 = �~I~B animation-charging-3 = �~I~A animation-charging-4 = �~I~@ animation-charging-framerate = 1000
Форматирование даты и Action
Добавим иконки и форматирование для даты.
... [module/date] type = internal/date interval = 1 time = %d/%m/%Y | %H:%M:%S format-prefix-foreground = ${colors.foreground-alt} label = %time% format = %{A1:zenity --calendar:} <label> %{A} ...
В format
добавляем вызов календаря zenity
по клику левой кнопкой мышки, используя Action.
В time
задаём формат вывода — дату | время, а потом выводим %time%
в format
.
Результат:
Правда — календарь открывается в окне с konsole
… То ли баг, то ли особенность zenity
или самого polybar
— можно поискать другой календарик, попробовать. Пока оставлю так.
Volume
Модуль звука я просто спионерил отсюда>>> (см. больше ссылок на примеры в конце поста), выглядит приятно:
Filesystem
Выводим информацию о смонтированных разделах и свободном месте на них, используя модуль filesystem
:
... [module/filesystem] type = internal/fs interval = 25 mount-0 = / mount-1 = /home label-mounted = %mountpoint% free: %percentage_free%% of %total% label-mounted-padding = 1
CPU/Memory
Добавляем модули для отображения CPU и памяти, рисуем ramp
для наглядности:
... [module/cpu] ; https://github.com/guisilvano/dotfiles/blob/master/polybar/config#L178 format-label = internal/cpu format = <label> <ramp-load> ramp-load-0 = ▁ ramp-load-1 = ▂ ramp-load-2 = ▃ ramp-load-3 = ▄ ramp-load-4 = ▅ ramp-load-5 = ▆ ramp-load-6 = ▇ ramp-load-7 = █ type = internal/cpu interval = 2 label = " %percentage:2:2%%" [module/memory] type = internal/memory interval = 2 label = " %percentage_used%%" format = <label> <ramp-used> ramp-used-0 = ▁ ramp-used-1 = ▂ ramp-used-2 = ▃ ramp-used-3 = ▄ ramp-used-4 = ▅ ramp-used-5 = ▆ ramp-used-6 = ▇ ramp-used-7 = █
Тут есть проблема — когда % CPU становится двумя цифрами, а не одной — то иконка смещается:
Это можно попробовать решить задав минимальный и максимальный размер, см. форматирование:
... type = internal/cpu interval = 2 label = " %percentage:2:2%%" ...
WiFi
Добавляем отображение подключения к WiFi.
Находим интерфейс:
[simterm]
$ ip a s | grep wlp 3: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
[/simterm]
Добавляем модуль:
... [module/wlan] type = internal/network interface = wlp2s0 interval = 3.0 format-connected-padding = 1 format-disconnected-padding = 1 format-connected = <label-connected> label-connected = %essid% label-disconnected =
Температура
Тут в warn-temperature
задаём значение, при достижении которого цвет будет меняться на красный (label-warn-foreground
):
... [module/temperature] type = internal/temperature warn-temperature = 70 units = true format = <label> format-warn = <label-warn> label = TEMP %temperature-c% label-warn = TEMP %temperature-c% label-warn-foreground = #f00
Menu
Очень интересный модуль, недостаток — нельзя использовать больше одного, поэтому всё добавляется в подменюшки.
У меня получился следующим:
... [module/menu] type = custom/menu format = <label-toggle> <menu> label-open = " Apps " label-close = " " menu-0-0 = " Browsers " menu-0-0-exec = menu-open-1 menu-0-1 = " Chats " menu-0-1-exec = menu-open-2 menu-0-2 = " Power " menu-0-2-exec = menu-open-3 menu-1-0 = " Chromium " menu-1-0-exec = chromium & menu-1-1 = " Firefox" menu-1-1-exec = firefox & menu-2-0 = " Skype " menu-2-0-exec = skypeforlinux & menu-2-1 = " Slack " menu-2-1-exec = slack & menu-2-2 = " Viber " menu-2-2-exec = viber & menu-2-3 = " Telegram" menu-2-3-exec = telegram-desktop & menu-3-0 = " shutdown " menu-3-0-exec = shutdown -P now menu-3-1 = " restart " menu-3-1-exec = shutdown -r now menu-3-2 = " cancel"
Добавляем его в левую часть панели:
... modules-right = cpu memory filesystem wlan volume temperature battery date modules-left = menu ...
Script
Последним хочется вывести имя хоста, используем script
модуль:
... [module/hostname] type = custom/script exec = echo $HOSTNAME format = <label>
systray от polybar
+ taskbar от tint2
Т.к. polybar
не умеет taskbar в Openbox — закостылим.
Идея в том, что бы запустить внизу панель tint2
с таскабаром, и одновременно там же — polybar
с отображением раскладки и системного трея.
Выделим 90% под taskbar tint2
, и 10% — под трей polybar
-а.
Конфиг нижней панели tint2
выглядит так:
... #------------------------------------- # Panel panel_items = T panel_size = 100% 32 panel_margin = 0 0 panel_padding = 4 2 4 panel_background_id = 1 ...
Меняем его на:
... #------------------------------------- # Panel panel_items = T #panel_size = 100% 32 panel_size = 90% 32 panel_margin = 0 0 panel_padding = 4 2 4 panel_background_id = 1 wm_menu = 0 panel_dock = 0 panel_position = bottom left horizontal ...
В конфиг polybar
добавляем модуль для отображения раскладки клавиатуры:
... [module/keyboard] type = internal/xkeyboard blacklist-0 = num lock blacklist-1 = scroll lock
Добавляем новый bar
:
... [bar/bottom] monitor = HDMI-1 bottom = true width = 10% height = 32 radius = 0.0 fixed-center = false override-redirect = false ;offset-x = 1700 offset-x = 90% ;tray-transparent = true tray-detached = false tray-position = left tray-offset-x = 0 tray-offset-y = 0 tray-maxsize = 16 tray-padding = 0 tray-scale = 1 modules-right = keyboard ...
Указываем ему размер 10%, и смещение по оси x в 90%.
Результат:
Добавляем всё в автозапуск Openbox — ~/.config/openbox/autostart
(ещё не проверял, как сработает, может надо будет очередь поменять):
... tint2 -c /home/setevoy/.config/tint2/MY-horizontal-dark-transparent.tint2rc & polybar -c /home/setevoy/.config/polybar/setevoy-polybar.conf bottom & polybar -c /home/setevoy/.config/polybar/setevoy-polybar.conf top &
В целом — весьма доволен панелькой, надо будет ещё поиграться с цветами. А больше всего геморроя было со шрифтами и отображением иконок 🙂
Ещё надо поиграть со шрифтами tint2
, что бы везде были одинаковые.
Дома получилось вот так:
Файлы конфигов polybar
и tint2
доступны в репозитории тут>>>.
Ссылки по теме
Скрипты для polybar, ещё не пробовал
Примеры конфигов:
https://github.com/pseudophpt/dotfiles/blob/master/polybar-config
https://github.com/guisilvano/dotfiles/blob/master/polybar/config
https://gitlab.com/sj1k/gorice/blob/master/examples/polybar.template