LINUX.ORG.RU

Непонятки с виджетом громкости в awesome

 


0

1

Значится, регулирую я громкость в системе с помощью acpid, скрипт простой:

#!/bin/sh

step=5

case $1 in
  -) amixer set Master $step-;;
  +) amixer set Master $step+;;
esac
Ну и этот скрипт повешан на соответствующие события в acpi. Все нормально работает.

Теперь виджет. Есть функция, которая парсит текущее значение громкости

function update_volume (widget)
	local fd = io.popen ("amixer get Master | grep -o '[0-9]*%'")
	local volume = fd: read ("*all")
	fd: close ()
	widget: set_text (volume)
end
И есть соответсвующий простой текстовый виджет, просто отображающий текущую громкость в процентах
volwidget = wibox.widget.textbox ()
update_volume (volwidget)
При запуске авсома все работает, в виджете отображается правильное значение громкости. Но теперь я пытаюсь повесить обновление это виджета на функциональные клавиши
awful.key ({},"XF86AudioRaiseVolume", function () update_volume (volwidget) end),
awful.key ({},"XF86AudioLowerVolume", function () update_volume (volwidget) end),
И работает это все как то странно. Отображается не текущее значение громкости, а предыдущее(!). То есть, если у нас изначально было 100% громкости, то нажав один раз понизить громкость - отображается те же 100% (на самом деле в миксере 92%), нажав еще раз понизить - отображается 92% (на самом деле в миксере 84%). Нажимаем увеличить громкость - видим 84% (в миксере 92%). Надеюсь доходчиво объяснил.

Так вот, ЧЯДНТ? Такой виджет у меня уже давно, но только недавно заметил такую особенность. То ли в луа что-то изменилось после обновлений, то ли в авсоме, но теперь это так. Помогите, люди добрые, сделать правильно.

Awesome 3.5, как вы понимаете



Последнее исправление: serkhay (всего исправлений: 1)

Очевидно что сначала происходит обновление информации о громкости а только потом громкость меняется. Либо задержку какую-то добавить (может amixer не мгновенно действует, либо запилить вызов скрипта на хоткей в awesome и после этого уже обрабатывать функцию обновления виджета)

alozovskoy ★★★★★
()
Последнее исправление: alozovskoy (всего исправлений: 1)

как мне лень это писать...

awful.key ({},"XF86AudioLowerVolume", function ()
    awful.util.spawn("path/to/your/script.sh -",false)
    update_volume(volwidget)
end),
а из ACPI убрать, ибо он там вроде и нафиг не нужен.

funeralismatic ★★★
()
Ответ на: комментарий от funeralismatic

Да господи. Через acpid лучше, потому что это не зависимо от иксов и от авсома. Так я конечно могу сделать, вопрос же не в этом.

serkhay
() автор топика

или можно так.

volume_timer = timer({ timeout = 5 })
volume_timer:connect_signal("timeout", function () update_volume(volwidget) end)
volume_timer:start()

funeralismatic ★★★
()
Ответ на: комментарий от funeralismatic

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

serkhay
() автор топика
Ответ на: комментарий от serkhay

Просто может какие то ньюансы луа или еще чего то.

не знаю, у меня всё стабильно, может что и изменилось, но я даже после переезда с 3.4 на 3.5 никаких изменений в работе не заметил.

funeralismatic ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.