IT Notes

Настройка Openbox: Conky

Conky - очень многофункциональное приложение для создания панелей. Если поискать в интернете, то можно найти массу очень красивых примеров конфигураций conky с использованием lua. Мы же поговорим о создании панелей, включающих только текст (дешево и практично).

Наша первая conky-панель

Создадим простую панель в нижней части экрана с помощью следующего кода:

background yes
use_xft yes
xftfont Droid Sans Mono:size=8:bold
update_interval 0.5
total_run_times 0
own_window yes
own_window_class Conky
own_window_type desktop
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
own_window_argb_visual yes
own_window_argb_value 255
double_buffer yes
minimum_size 1090 0
default_bar_size 100 10
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders yes
default_color white
default_outline_color white
alignment bl
gap_x 0
gap_y 0
no_buffers yes
uppercase no
cpu_avg_samples 2
net_avg_samples 1
override_utf8_locale yes
use_spacer right

TEXT
CPU_0: ${color lightGreen}${cpubar cpu0} ${color green}${execi 300 sensors | grep Core\ 0 | cut -c18-19}°C$color \
${offset 50}RAM:  ${color #00FFFF}${membar} ${color #007FFF}$mem / $memmax$color \
${offset 50}/home: ${color #E75480}${fs_bar /home} ${color red}${fs_used /home} / ${fs_size /home}$color \
${offset 50}Volume: ${color #AAAAAA}${mixerbar}$color ${mixer vol}%
CPU_1: ${color lightGreen}${cpubar cpu1} ${color green}${execi 300 sensors | grep Core\ 1 | cut -c18-19}°C$color \
${offset 50}SWAP: ${color #00FFFF}${swapbar} ${color #007FFF}$swap / $swapmax$color \
${offset 50}/:     ${color #E75480}${fs_bar /} ${color red}${fs_used /} / ${fs_size /}$color \
${offset 50}Uptime: $uptime

Конфигурационный файл состоит из двух частей: описание свойств панели и само содержимое (после слова TEXT). Можете сохранить этот файл в домашнем каталоге под именем .conkyrc. Это имя конфигурационного файла по умолчанию. Если вы решите, что вам хватит одной панели, то можете просто запускать conky без дополнительных параметров. Если же вам требуется несколько панелей, то нужно использовать ключ -c. Например:

conky -c ~/.conkyrc1 # где conkyrc1 - конфигурационный файл для еще одной панели.

Разберем наиболее интересные параметры первой части:

  1. xftfont - шрифт, применяемый по умолчанию для отображения содержимого панели;
  2. update_interval - временной интервал между обновлениями содержимого. Обычно с помощью conky отображают полезную системную информацию, которая периодически меняется. Сам conky не может узнать, что выводимые значения изменились, поэтому он сам вынужден регулярно себя перерисовывать, чтобы показывать актуальные данные;
  3. own_window_argb_visual и own_window_argb_value. Первый включает возможность управлению прозрачностью панели, а второй - задает значение прозрачности (от 0 до 255). Значение 255 означает, что панель полностью НЕ прозрачна;
  4. minimum_size - задает минимальные размеры панели. Требует указания двух значений: минимальная ширина и минимальная высота. В примере выше для ширины выбран размер экрана виртуальной машины, а для высоты - 0. Ноль в данном случае означает, что масштабирование по высоте будет осуществляться на основании содержимого. Если вы решите использовать приведенную конфигурацию, то вам придется подправить этот параметр, чтобы панель соответствовала размерам экрана;
  5. default_bar_size - размер индикаторов, который будет использован по умолчанию. Индикаторы в conky чем-то похожи на индикаторы прогресса, но могут отображать всевозможные данные;
  6. alignment - определяет относительно какой позиции осуществлять выравнивание панели на экране. Допустимы значения bl (bottom_left), bm (bottom_middle), br (bottom_right), tl (top_left), tm (top_middle), tr (top_right), ml (middle_left), mm (middle_middle), mr (middle_right). Например, если выбрано значение bl, то левый нижний угол панели окажется в левом нижнем углу экрана, а если выбрано mm, то панель окажется ровно по середине и т.д.;
  7. gap_x и gap_y - отступ от точки выравнивания по оси x и по оси y. Например, если точка выравнивания - правый нижний угол, то отступы будут сделаны влево и вверх;
  8. own_window_colour - цвет фона. Этот параметр в примере не приводится, но может кого-то заинтересовать, поэтому я не мог его не указать;
  9. use_spacer - определяет необходимость использования заполнителей для выдерживания постоянной ширины выводимых на панели значений (например, объем доступной оперативной памяти или объем занятого swap-пространства). Без этого параметра надписи в панели будут "плавать".

Панель закреплена вдоль всей нижней части экрана, чтобы она располагалась в противовес панели задач tint2, которая находится сверху:

Чертик РУ.

conky-first

Теперь немного относительно содержимого. Если вы хотите вывести какой-то текст, то можете его набрать и он отобразится в левом верхнем углу панели. Все просто, но не особо интересно. Гораздо больший интерес для нас представляют conky-переменные:

  1. cpubar - индикатор нагрузки на процессор. В качестве параметра принимает имя ядра;
  2. membar - индикатор использования оперативной памяти;
  3. swapbar - индикатор использования swap-раздела;
  4. fs_bar - индикатор занятого пространства файловой системы, указанной в качестве параметра;
  5. mixerbar - индикатор громкости;
  6. mem и memmax - объем занятой и доступной памяти;
  7. swap и swapmax - объем занятой и доступной памяти в swap-разделе;
  8. mixer - текущий уровень громкость (от 0 до 100);
  9. uptime - время работы системы;
  10. execi - результат выполнения консольной команды или скрипта;
  11. offset - отступ в пикселях по оси x, который нужно сделать между выводимыми надписями;
  12. color - цвет, который должен иметь выводимый текст (по умолчанию - белый).

Сделаю несколько замечаний. В приведенной панели для отображения текущей температуры процессора используется вывод команды sensors, входящей в состав пакета lm_sensors. Однако у меня на виртуальной машине она не работает, поэтому вывод пуст. На физическом компьютере такие проблемы не наблюдаются. Если у вас больше ядер и позволяет размер монитора, то дополните список до нужного количества. То же самое касается любых накопителей или разделов жесткого диска, для которых вам может быть интересно узнать объем занятого пространства. Обращаю внимание, что новая строка в разделе TEXT из файла конфигурации панели означает новую строку и при ее отображении на экране. Чтобы выводить длинные цепочки значений, как в примере, используется символ \. Сам он не выводится, но указывает, что переход на новую строку учитывать при отображении не следует.

Для работы переменных mixerbar и mixer требуется включенный модуль ядра snd_pcm_oss. Не могу не привести быстрые клавиши для изменения громкости и отключения звука в Openbox (добавьте в ~/.config/openbox/rc.xml):

<keybind key="W-0">
  <action name="Execute">
    <command>amixer -q sset Master 5%+</command>
  </action>
</keybind>
<keybind key="W-9">
  <action name="Execute">
    <command>amixer -q sset Master 5%-</command>
  </action>
</keybind>
<keybind key="W-8">
  <action name="Execute">
    <command>amixer -q sset Master toggle</command>
  </action>
</keybind>

Выделяем место для панели

Если вы запустите какое-нибудь приложение на весь экран, то оно перекроет нашу панель. А нам бы хотелось, чтобы она была видна постоянно. Но есть простое решение. Для этого нам потребуется только obconf. Измените с помощью этой утилиты нижний отступ:

obconf-bottom-margin

Больше панелей

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

Сначала создадим файл ~/.conkyrc1:

background yes
use_xft yes
xftfont a_LCDNova:size=25:Regular
update_interval 1.0
own_window yes
own_window_class Conky
own_window_type desktop
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
own_window_argb_visual yes
own_window_argb_value 255
double_buffer yes
minimum_size 350 0
default_bar_size 100 10
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders yes
default_color white
default_outline_color white
alignment bl
gap_x 344
gap_y 31
no_buffers yes
uppercase no
cpu_avg_samples 2
net_avg_samples 1
override_utf8_locale yes
use_spacer right

TEXT
${color 03C03C}${alignc}${time %a %d %b %T}

Большинство параметров мы уже успели разобрать, поэтому повторять их разъяснение я не буду. Обращу лишь внимание, что вам понадобится шрифт a_LCDNova, который хорошо подходит для отображения цифровых часов. Обновлять панель достаточно каждую секунду.

Далее создаем файл ~/conkyrc2:

background yes
use_xft yes
xftfont Droid Sans Mono:size=8:bold
update_interval 0.8
total_run_times 0
own_window yes
own_window_class Conky
own_window_type desktop
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
own_window_argb_visual yes
own_window_argb_value 255
double_buffer yes
minimum_size 384 0
default_bar_size 100 10
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders yes
default_color white
default_outline_color white
alignment br
gap_x 0
gap_y 31
no_buffers yes
uppercase no
cpu_avg_samples 2
net_avg_samples 1
override_utf8_locale yes
use_spacer right

TEXT
${alignr}Down [ ${color orange}${totaldown enp0s3}$color ]: ${color yellow}${downspeedgraph enp0s3 12,200 FFFFFF FF0000 -l -t} ${color yellow}${downspeed enp0s3}$color
${alignr}Up [ ${color FC0FC0}${totalup enp0s3}$color ]: ${color DF73FF}${upspeedgraph enp0s3 12,200 FFFFFF FF0000 -l -t} ${color DF73FF}${upspeed enp0s3}$color

Здесь вам может понадобится поменять имя сетевого интерфейса (в примере - enp0s3). К тому же, для визуализации динамики использования сети используются элементы downspeedgraph и upspeedgraph, которые показывают не только текущее значение, как обычный индикатор. но и хронологию изменений за последнее время.

И наконец ~/.conkyrc3:

background yes
use_xft yes
xftfont Droid Sans Mono:size=17:bold
xftalpha 0.1
update_interval 1.0
total_run_times 0
own_window yes
own_window_class Conky
own_window_type desktop
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
own_window_argb_visual yes
own_window_argb_value 255
double_buffer yes
minimum_size 344 0
default_bar_size 100 10
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders yes
default_color white
default_outline_color white
alignment bl
gap_x 0
gap_y 31
no_buffers yes
uppercase no
cpu_avg_samples 2
net_avg_samples 1
override_utf8_locale yes
use_spacer yes

TEXT
${color #9999FF}GMail:$color ${color yellow}${execi 30 ~/.scripts/gmail.sh}$color

Информацию о наличии входящих сообщений получает следующий простой скрипт (в целях безопасности рекомендую ограничить права на чтение по максимуму):

#!/bin/bash

login="ваш логин"
psswd="ваш пароль"

new=`curl -u ${login}:${psswd} -s "https://mail.google.com/mail/feed/atom" | grep -c "<entry>"`

if [ $new != 0 ]; then
    echo +$new
fi

После запуска всех панелей (conky -c ~/.conkyrc1 и т.д.) и дополнительной настройки отступов:

conky-second

И это еще не все

Добавим еще несколько полезных панелей. Первая из них - календарь:

background yes
font Sans:size=8
xftfont Sans:size=8
use_xft yes
update_interval 2.0
total_run_times 0
own_window yes
own_window_type override
own_window_transparent no
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
own_window_argb_visual yes
own_window_argb_value 100
own_window_class Conky
own_window_type desktop
double_buffer yes
draw_shades yes
draw_outline yes
draw_borders yes
draw_graph_borders no
minimum_size 250 293
default_color 00BFFF
default_shade_color 000000
draw_outline no
alignment bottom_right
gap_x 25
gap_y 80
no_buffers yes
cpu_avg_samples 2
override_utf8_locale yes
uppercase no
use_spacer none
color0 8e8e8e
color1 FCAF3E
color2 FFFFFF
border_width 8

TEXT
${font EtcherSkesch Inverse:size=31}${color ADD8E6}${alignr}${time %d.%m.%Y}${color}${font}
${hr 1}
${font DejaVu Sans Mono:size=20:bold}${execpi 60 cal | sed '1d' | sed '3d' | sed '2d' | sed '2d' | sed '2d' | sed '2d' | sed '2d' | sed 's/^/${alignc} /'}${font}
${hr 1}
${font DejaVu Sans Mono:size=20}${color0}${execpi 60 DJS=`date +%_d`; cal | sed '1d' | sed '/./!d' | sed 's/$/                    /' | fold -w 21 | sed -n '/^.\{21\}/p' | sed 's/^/${alignc} /' | sed /" $DJS "/s/" $DJS "/" "'${color1}'"$DJS"'${color2}'" "/}${font}

Не будем особо разбираться в содержимом. Единственное, что важно: для корректного отображения панели в системе должны быть установлены шрифты DejaVu и EtcherSkesch Inverse.

Аналогично создадим панель для отображения активных процессов:

background yes
font Sans:size=8
xftfont Sans:size=8
use_xft yes
update_interval 2.0
total_run_times 0
own_window yes
own_window_type override
own_window_transparent no
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
own_window_argb_visual yes
own_window_argb_value 100
own_window_class Conky
own_window_type desktop
double_buffer yes
draw_shades yes
draw_outline yes
draw_borders yes
draw_graph_borders no
minimum_size 250 293
default_color 00BFFF
default_shade_color 000000
draw_outline no
alignment br
gap_x 407
gap_y 80
no_buffers yes
cpu_avg_samples 2
override_utf8_locale yes
uppercase no
use_spacer none
color0 8e8e8e
color1 FCAF3E
color2 FFFFFF
border_width 8

TEXT
${color ADD8E6}${font EtcherSkesch Inverse:size=31}Name${offset 75}PID${offset 36}CPU${offset 36}MEM${font}${color}
${hr 1}
${font DejaVu Sans Mono:size=15}${color1}${top name 1}${color} ${color2}${top pid 1} ${offset 40}${top cpu 1} ${offset 40}${top mem 1}${color}${font}
${font DejaVu Sans Mono:size=15}${color1}${top name 2}${color} ${color2}${top pid 2} ${offset 40}${top cpu 2} ${offset 40}${top mem 2}${color}${font}
${font DejaVu Sans Mono:size=15}${color1}${top name 3}${color} ${color2}${top pid 3} ${offset 40}${top cpu 3} ${offset 40}${top mem 3}${color}${font}
${font DejaVu Sans Mono:size=15}${color1}${top name 4}${color} ${color2}${top pid 4} ${offset 40}${top cpu 4} ${offset 40}${top mem 4}${color}${font}
${font DejaVu Sans Mono:size=15}${color1}${top name 5}${color} ${color2}${top pid 5} ${offset 40}${top cpu 5} ${offset 40}${top mem 5}${color}${font}
${font DejaVu Sans Mono:size=15}${color1}${top name 6}${color} ${color2}${top pid 6} ${offset 40}${top cpu 6} ${offset 40}${top mem 6}${color}${font}
${font DejaVu Sans Mono:size=15}${color1}${top name 7}${color} ${color2}${top pid 7} ${offset 40}${top cpu 7} ${offset 40}${top mem 7}${color}${font}
${font DejaVu Sans Mono:size=15}${color1}${top name 8}${color} ${color2}${top pid 8} ${offset 40}${top cpu 8} ${offset 40}${top mem 8}${color}${font}
${font DejaVu Sans Mono:size=15}${color1}${top name 9}${color} ${color2}${top pid 9} ${offset 40}${top cpu 9} ${offset 40}${top mem 9}${color}${font}

Для ее отображения вам понадобятся те же шрифты.

А вот как выглядят эти панели:

conky-calendar-processes

Их уже можно будет увидеть не всегда, а только на чистом рабочем столе, но не так часто это и требуется (для быстрого сворачивания-разворачивания окон используйте стандартное сочетание клавиш Win + D).

Не забудьте про автостарт conky

Чтобы все панели появлялись автоматически при запуске Openbox, сначала создадим подобный скрипт (~/.scripts/start_conky.sh):

#!/bin/sh

conky -c ~/.conkyrc
conky -c ~/.conkyrc1
conky -c ~/.conkyrc2
conky -c ~/.conkyrc3
( sleep 2s && conky -c ~/.conkyrc_calendar ) &
( sleep 2s && conky -c ~/.conkyrc_processes ) &

Если не использовать задержку (sleep) при запуске двух последних панелей, то они могут не отобразиться.

А теперь, как обычно, добавляем этот скрипт в список приложений для автозапуска в наш ~/.config/openbox/autostart:

nitrogren --restore &

APPS='sakura
        xxkb
        compton
        tint2
        start_conky.sh'

(for X in $APPS ; do ($X &) ; done) &

Заключение

На этом мы пока что завершаем серию статей про настройку Openbox. Конечно, существуют и другие интересные утилиты, которые позволяют сделать Openbox еще красивее и ярче, но мой опыт работы с ними ограничен. В результате многочисленных экспериментов я пришел к описанному сочетанию, которое меня устраивает. Думаю, что вы без труда сможете сами расширить свой Openbox (если понадобится) и подобрать то, что подходит именно вам.

Похожие публикации

Комментарии

Теперь это дело легко настраивать c:

В коньках довольно часто требуется вывод погоды (судя по форумам). Можно поставить всякие погодные виджеты, но, имхо, было бы удобнее вывести погоду в коньках. Может вы знаете, как это проще сделать и чтобы работало везде и для любого города?

Anonymous:

В коньках довольно часто требуется вывод погоды (судя по форумам). Можно поставить всякие погодные виджеты, но, имхо, было бы удобнее вывести погоду в коньках. Может вы знаете, как это проще сделать и чтобы работало везде и для любого города?

Просто получить данные не так сложно. Для этого можно написать bash-скрипт, который будет запрашивать текущую температуру и другую полезную информацию у соответствующих интернет-ресурсов. При желании можно порыться и найти погодные сайты, которые имеют rss-каналы. Тогда не понадобится даже писать скрипт (conky имеет встроенную поддержку rss). Если есть желание, чтобы это еще и выглядело очень красиво (со значками осадков и т.д.), то без lua не обойтись. В интернете много подобных conky-виджетов для отображения прогноза.

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

Думаю, что потом дополню эту статью (или напишу новую) с простым примером вывода текущей погоды.

А как же проклятая комбинация SUPER+D? Как пофиксить?

Анон:

А как же проклятая комбинация SUPER+D? Как пофиксить?

А в чем заключается проблема с этой комбинацией? У меня на тестовой (да и рабочей) системе с приведенными конфигами заметных сложностей на наблюдается.

Могу предположить, что conky-панель сворачивается вместе со всеми окнами. Но этого не должно происходить при использовании настройки own_window_type со значением desktop.

Только сейчас заметил, что в тексте статьи по этому поводу опечатка. Там написано Ctrl+D, а должно быть Win+D. Исправил.