пятница, 9 декабря 2011 г.

Графические индикаторы LUA+CAIRO (бары)

Получил комментарий с просьбой объяснить поподробней, что и делаю.


В скриптах, написанных на языке LUA, параметры компьютера выводятся в окно conky следующим образом. Берется команда "классических" conky, например

${cpu cpu0}

и перед командой добавляем команду conky_parse, буквально означающую, что далее следует команда из "классических" conky, выводимая команда заключается в простые скобки и кавычки.

conky_parse("$cpu cpu0}")


Таким образом можно вывести любую команду из текста классических конок.

Рассмотрим вывод баров с помощью скрипта написанного французским программистом выкладывающим свои скрипты под ником wlourf. Скрипт можно взять на его страничке wlourf.deviantart.com

Описание работы скрипта, на английском, в блоге wlourf.

Я использовал этот скрипт во многих своих конках и попробую описать как это работает. Вид баров, выводимый этим скриптом


К сожалению в строке запуска скрипта ошибка. Видно wlourf немного поспешил и не заметил.
Для запуска скрипта необходимо изменить строки

    lua_load /path/to/the/script/bargraph.lua
    lua_draw_hook_pre main_rings

на строки

    lua_load /path/to/the/script/bargraph.lua
    lua_draw_hook_pre main_bars

Описание параметров задействованных в этом скрипте.

Обязательные параметры

name - название выводимого параметра


arg    - аргумент выводимого параметра

max    - максимальное значение выводимого параметра

На этих параметрах я хочу немного остановиться. При отсутствии одного из них скрипт просто не будет работать. В скрипте, для проверки и демонстрации работы эти параметры выводят время в секундах. Я тоже так делаю при настройке и отладки. это выглядет так

name = "time",
arg = "%S",
max = 60,

все параметры обязательно должны заканчиваться запятой.

Тут всё понятно. Строка в классических конки выглядет так

${time %S}

time - название
%S - аргумент
60 - максимальное количество выводимых секунд

Для CPU это будет выглядеть так


name = "cpu",
arg = "cpu",
max = 100,

Для всех процессоров название одно - cpu
Для ядер
cpu или cpu0 - весь процессор
cpu1 - 1 ядро
cpu2 - 2 ядро и т.д.
max для всех процессов выводимых в % или градусах будет равен 100, для сети необходимо подбирать экспериментально

Для вывода температуры графической карты NVIDIA, для других карт не знаю, так как у меня NVIDIA

name="nvidia",
arg="temp",
max=100,

Но есть параметры состоящие из одного слова, например 

memperc
swapperc

Тогда в строке name оставляем пустое поле в кавычках, а в строке arg пишем название

name="",
arg="memperc",
max=100,

При необходимости вывести команду, например при выводе температуры процессора, в классических конках это, для моей материнской платы и процессора, выглядит так

${execi 4 sensors | grep 'CPU Temperature' | cut -c 22-24}

Для вывода этим скриптом будет

name="",
arg=conky_parse"${execi 4 sensors | grep 'CPU Temperature' | cut -c 22-24}",
max=100,


Необязательные параметры

Это параметры, которые, если их не вписать, то будут выведены параметры записанные в скрипте т.е. по умолчанию. Некоторые из этих параметров, я так думаю, требуют разъяснений

x, y    - координаты выводимого параметра, по умолчанию вывод в центр окна конки

cap    - оформление конца бара, возможные варианты r,b,s (r - закругленный, s- прямоугольный, b - прямоугольный, расширенный), по умолчанию "b". О концах линий можно посмотреть здесь http://www.cairographics.org/samples/set_line_cap/


Верхний бар - по умолчанию

Средний бар - cap="s"

Нижний бар - cap="r"

angle    - поворот бара, по умолчанию = 0 (вертикальный бар), 90 - горизонтальный бар. Это выглядит так



Верхний бар angle=0, нижний - angle=90. При параметре равном 180, 270 изображения будут перевернуты, ну и конечно возможен любой параметр от 0 градусов до 360.


skew_x    - наклон бара относительно оси X, по умолчанию = 0

skew_y    - наклон бара относительно оси Н, по умолчанию = 0

Наклон отличается от поворота неизменностью основания бара, вот так это выглядит


Слева наклон, справа - поворот.

Наклон может иметь отрицательное значение, на картинке значение равно -45.


blocks  - количество блоков (секций) из которых будет состоять бар (не меньше 1) , по умолчанию 10

height    - высота блока, по умолчанию 10 пикселей

width    - ширина блока, по умолчанию 20 пикселей

space    - расстояние между блоками, по умолчанию 2 пикселя


Первый бар

blocks=20,
height=8,
width=25,

Второй бар

blocks=50,
height=2,
width=25,

Третий бар

blocks=1,
height=200,
width=25,

Следующие параметры выводят в окно конки бар в виде сектора

angle_bar    - угол сектора, по умолчанию 0

radius        - расстояние от координат X, Y начала вывода сектора, по умолчанию 0. При включении этих параметров параметр width не работает.


Верхний бар

angle=90,
angle_bar=45,

Нижний бар

angle=90,
angle_bar=45,
radius=50,

Переходим к раскраске баров. Цвет задаётся в шестнадцатеричном формате с добавлением насыщенности по форме

{0x00ff00,1} - зелёный цвет полной насыщенности. Насыщенность цвета изменяется от 0 до 1.


fg_colour    - цвет выводимого параметра, по умолчанию {0x00FF00,1}

bg_colour   - цвет фона, на котором выводится параметр, по умолчанию {0x00FF00,0.5}

alarm        - величина параметра с которого необходимо изменить цвет, по умолчанию max


alarm_colour - цвет параметра выше заданного параметром alarm, по умолчанию fg_colour



alarm=50,
bg_colour={0x00ff00,0.25},
fg_colour={0x00ff00,1},
alarm_colour={0xff0000,1},


smooth        - плавный переход из одного цвета в другой, включить true выключить false, по умолчанию false


Верхний бар - выключен
Нижний бар - включен


mid_colour    - добавление градации цвета по схеме {позиция градации (от 0 до 1), цвет в шестнадцатеричном формате, насыщенность}, возможность добавления 3 цветов, по умолчанию выключено


Верхний бар - mid_colour - выключен

fg_colour={0x00ff00,1},
alarm_colour={0xff0000,1},

Средний бар - добавлен желтый цвет

fg_colour={0x00ff00,1},
alarm_colour={0xff0000,1},
smooth=true,
mid_colour={{0.5,0xffff00,1}},

Нижний бар - основной цвет изменён на синий, добавлены зелёный и желтый

fg_colour={0x0000ff,1},
alarm_colour={0xff0000,1},
smooth=true,
mid_colour={{0.25,0x00ff00,1},{0.5,0xffff00,1}},

led_effect    - эффект "светодиода" для каждого отдельного блока, не работает с параметром smooth=true, по умолчанию выключен. Возможные варианты

led_effect="r" - радиальный эффект

led_effect="a" - параллельный эффект

led_effect="e" - перпендикулярный эффект

Цвет задаётся следующими параметрами

fg_led        - цвет параметра в центре блока, по умолчанию fg_colour

bg_led        - цвет фона в центре блока, по умолчанию bg_colour

alarm_led    - цвет alarm в центре блока, по умолчанию alarm_colour

Вот так это выглядит


Верхний бар

led_effect="r",
fg_led={0x00ff00,1},
alarm_led={0xff0000,1},
bg_led={0x00ff00,0.25},

Средний бар

led_effect="a",
fg_led={0x00ff00,1},
alarm_led={0xff0000,1},
bg_led={0x00ff00,0.25},

Нижний бар

led_effect="e",
fg_led={0x00ff00,1},
alarm_led={0xff0000,1},
bg_led={0x00ff00,0.25},

Ну и совсем экзотика, зеркальное отражение бара, не работает с секторными барами. Лучше самим поэкспериментировать, чем мне объяснить.

reflection_alpha    - насыщенность зеркального изображения, значения от 0 до 1, по умолчанию 0 - нет зеркального отражения

reflection_scale    - масштаб зеркального изображения, по умолчанию 1, размер основного изображения (значения от 0 до 1)

reflection_length   - часть зеркального изображения прозрачность которой отсутствует, по умолчанию 0 (значения от 0 до 1)

reflection  - расположение зеркального изображения. Все значения соответствуют вертикальному бару.

reflection="b" - отражение внизу (по умолчанию)

reflection="t" - отражение сверху

reflection="l" - отражение слева

reflection="r" - отражение справа


angle=90,
reflection_alpha=1,
reflection_scale=1,
reflection_length=1,
reflection="r",


Ну и последнее объяснение.

draw_me - Насколько я понял, этот параметр по умолчанию (true или 1) при обработке строки типа

 "${if_empty ${wireless_essid wlan0}}${else}1$endif"

выводит фоновое изображение. При присвоении параметру значения false фоновое изображение не выводится

Как работает скрипт попробуйте разобраться сами. Если возникнут вопросы, пишите, попробую ответить.

Комментариев нет:

Отправить комментарий