Что я хотел получить (постановка задачи):
- график общей активности процессора во времени;
- индикатор текущей активности для каждого ядра;
- текущую частоту для каждого ядра;
- общий процент текущего использования;
- общую температуру.
Как это выглядит в итоге:
К dzen2 прилагается специально расчитанный на генерацию графиков CPU инструмент gcpubar. Но у него есть минусы:
1. Он требует отдельной панели, т.е. проблемно рядом с ним на одной панели разместить ещё какой-то контент. Конечно есть опция -l, но посмотрев в документацию вы поймёте почему я от этого отказался.
2. После долгих мучений с ним я сделал вывод, что в ситуации с плавающей частотой процессора он начинает рисовать билеберду.
По этому я остановился на решении со старым добрым его же (dzen2) инструментом gdbar. Идея в том, чтобы рисовать с его помощью столбцы гравика загрузки CPU и обеспечить их ротацию через какой-то временный файл. Собственно всё в коде ниже.
Для индикаторов загрузки я ядер использовал круговые диаграммы.
Вот код конфигурации Xmonad:
~/.xmonad/xmonad.hs:
main = do
myStatusBarPipe <- spawnPipe myStatusBar
...
spawn myCPUBar
...
...
myCPUBar = "conky -c ~/.conky_cpu | sh | dzen2 -x 953 -w 90 -ta l " ++
myDzenBarGeneralOptions
...
И код conky:
~/.conky_cpu
gap_y -1000
double_buffer yes
out_to_console yes
own_window yes
own_window_type desktop
update_interval 3.0
TEXT
E='echo -n'
# Set icon
$$E '^p(5)^i(/home/gray/.dzen/bitmaps/sm2tik/cpu.xbm)^p(5)'
# Add new segment to the graph file
echo ${cpu} | gdbar -s v -h 14 -sw 1 >> /tmp/.dzen2cpugraph
# Print last 15 segments dequeuing the oldest one
QUEUE=`tail -n 15 /tmp/.dzen2cpugraph`
ISFIRST=true
for ITEM in $$QUEUE; do
$$E $$ITEM
if [ $$ISFIRST = true ]; then
echo $$ITEM >/tmp/.dzen2cpugraph
ISFIRST=false
fi
echo $$ITEM >>/tmp/.dzen2cpugraph
done
$$E '^ib(1)^fn(xft:monospace:size=5)^pa(36;0)'
# CPU usage percent
$$E 'u: ^fg(white)${cpu}%^fg()'
$$E '^pa(62;)'
$$E 't: ${acpitemp}°'
# Cores pies and frequencies
$$E '^pa(36;7)'
echo ${cpu 0} | gdbar -s p -w 7 -nonl
$$E '^fg()^p(2)${freq_g 1}'
$$E '^p(3)'
echo ${cpu 1} | gdbar -s p -w 7 -nonl
$$E '^fg()^p(2)${freq_g 2}'
echo
Всё просто. В следующий раз напишу как в Xmonad сделать затенение (точнее прозрачность) не активных тайлов (окон).
Мою последнюю конфигурацию Xmonad (пока без затенения) и всё её сопровождающее найдёте здесь Xmonad/Config_archive (поищите gray_hemp).
1 comment:
спасибо большущее!!
отличный способ формировать скрипт в коньках и перенаправлять его на sh!
Post a Comment