В "больших" DE, таких как KDE или GNOME, при изменении уровня яркости или громкости рисуется красивый ползунок, отображающий текущий уровень изменяемой величины:

GNOME Slider

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

osd-slider

Думаю, большинству пользователей фреймовых или обычных оконных WM известна утилита под названием osd_cat, которая обычно идет в комплекте с пакетом xosd. Эту утилиту можно запустить с параметром -b percentage и она будет рисовать на экране ползунок, визуально отображающий число, переданное с параметром -P. Выглядит все это примерно так:

osd-slider

Естественно, уверен многим пришла в голову идея: добавить вызов 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-скрипта. Клиент принимает один обязательный параметр — величину громкости или яркости в процентах. Получение значения для данного параметра в моем скрипте выглядит так:

#!/bin/bash

PATH2BRNS="/proc/acpi/video/VGA1/LCDD/brightness"
MAX_BRN_LEVEL=`cat $PATH2BRNS | head -n 1 | awk '{print $NF}'`
MIN_BRN_LEVEL=`cat $PATH2BRNS | head -n 1 | awk '{print $2}'`
CUR_BRN_LEVEL=`cat $PATH2BRNS | tail -n 1 | awk '{print $2}'`
PERCENTAGE=`echo "$CUR_BRN_LEVEL/($MAX_BRN_LEVEL-$MIN_BRN_LEVEL)*100" | bc -l | awk -F"." '{print $1}'`

/usr/local/bin/osd_client $PERCENTAGE

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

linux