(Если не воспроизводится гифка, кликните по ней)
Работаю я на ноутбуке, и у меня постоянно открыто много рабочих столов в i3, поэтому свободного места в панельке i3bar у меня впритык. Когда же в трей ещё залетают 3-4 приложения, то строка статуса в принципе перестает помещаться и съедается кнопками рабочих столов.
Кроме того, постоянно торчащие значки в трее, каждый в своём стиле и размере, выглядят колхозно, выбиваются из общей стилистики и просто меня бесят. Но трей - полезная штука, позволяет следить за программами, которые запущены на фоне и получать к ним быстрый доступ, поэтому полностью отказываться от него я не хочу.
К сожалению, в i3 нет возможности в рантайме менять поведение i3bar, разрешая или запрещая отображение трея. Однако после часа поисков и экпериментов, я смог найти обходной путь.
Суть метода состоит в том, что i3 поддерживает несколько панелей. В моём случае надо создать две панели:
bar-primary
(трей отключен, i3status включен). Видна по-умолчанию.bar-tray
(i3status отключен, трей включен). По-умолчанию скрыта.
Отобразить вторую панель можно или зажав клавишу-модификатор, или путём специальной команды. Первый случай оказался неудобным для меня дефолтом - поэтому я его сразу же отключил, и для отображения/скрытия панели использую сочетание клавиш: Ctrl+]
.
Не знаю, баг это или фича, но панель bar-tray
отображается поверх панели bar-primary
, что создает ощущение бесшовного включения-отключения трей-иконок.
Конфигурация:
bar {
id bar-primary
tray_output none
status_command i3status
}
bar {
id bar-tray
tray_padding 1
tray_output primary
mode hide
modifier none
}
bindsym $mod+bracketright bar hidden_state toggle bar-tray