19 июл. 2010 г.

osd-slider - ползунок состояния для tiling WM и box'ов.

В "больших" DE, таких как KDE или GNOME, при изменении уровня яркости или громкости рисуется красивый ползунок, отображающий текущий уровень изменяемой величины:
К сожалению, подобного ползунка, но для какого-нибудь легковесного WM, как правило не предусмотрено. Например, появление в dwm подобного ползунка противоречит всей философии этого оконного менеджера. Но выход все же есть:


Думаю, большинству пользователей фреймовых или обычных оконных WM известна утилита под названием osd_cat, которая обычно идет в комплекте с пакетом xosd. Эту утилиту можно запустить с параметром -b percentage и она будет рисовать на экране ползунок, визуально отображающий число, переданное с параметром -P. Выглядит все это примерно так:
Естественно, уверен многим пришла в голову идея: добавить вызов osd_cat в соответствующий acpid'овый скрипт и наслаждаться ползунком не хуже чем у Gnome в Ubuntu. Но, к сожалению, при постепенном увеличении соответствующей величины ползунок мерцает:
Что самое интересное, если попеременно запускать osd_cat с разными числовыми значениями параметра -P из двух заранее открытых консолей, то ползунок больше не мерцает!
После подобного эксперимента, мне пришла в голову идея написать сервер, который будет принимать от клиентов числовые значения и запускать ползунок osd_cat с соответствующими значениями параметра -P.
На данный момент, такой сервер уже написан мной. Проект называется osd-slider и расположен по следующему адресу: http://code.google.com/p/osd-slider/. Версия 0.1 уже доступна для загрузки, также у проекта есть свой SVN (см. соответствующие вкладки на странице проекта).
После загрузки и распаковки архива, необходимо произвести компиляцию и установку, в соответствии с инструкциями, расположенными в файле ./osd-slider/README.
Перед компиляцией необходимо заглянуть в файл ./osd-slider/osd_server/define.h и поменять макросы DISPLAY и XAUTHORITY под свою систему. Для кастомизации вида osd_cat нужно работать с макросом OSD_CMD в том же файле (параметр -P обязательно должен быть в конце строки!). Например, у меня OSD_CMD имеет следующее значение:
osd_cat -b percentage -o 22 -A center -c '#42dd42' -d 2 -P
Демон osd_server нужно добавить в автозагрузку (для каждого дистрибутива свой способ).
Клиента - osd_client, предпочтительнее вызывать из acpid-скрипта. Клиент принимает один обязательный параметр - величину громкости или яркости в процентах. Получение значения для данного параметра в моем скрипте выглядит так:

В итоге, мы получаем не мигающий ползунок отображения уровня яркости: