LINUX.ORG.RU

Виджет mpd для Awesome - выдает только N/A - N/A

 , ,


1

0

Слушаю музыку с mpd. В качестве гуйни к нему - Cantata.
Понадобился осомовиджет для этого. Использовал пример из вики к vicious.widgets.mpd.
Код виджета:

    mpdwidget = wibox.widget.textbox()
    vicious.register(mpdwidget, vicious.widgets.mpd,
    function (mpdwidget, args)
        if args["{state}"] == "Stop" then 
            return " Not Playing "
        else 
            return args["{Artist}"]..' - '.. args["{Title}"]
        end
    end, 10)
Конфиг mpd, предоставленный Cantata:
music_directory "/home/princess-cadance/music-lossless/"
playlist_directory "/home/princess-cadance/.local/share/cantata/mpd/playlists"
sticker_file "/home/princess-cadance/.local/share/cantata/mpd/sticker.sql"
bind_to_address "/home/princess-cadance/.local/share/cantata/mpd/socket"
db_file "/home/princess-cadance/.cache/cantata/mpd/tag_cache"
pid_file "/home/princess-cadance/.cache/cantata/mpd/pid"
state_file "/home/princess-cadance/.cache/cantata/mpd/state"
log_file "/dev/null"
metadata_to_use	"artist,album,title,track,name,genre,date,disc,albumartist,composer"
audio_output { 
  type "alsa"
  name "Output"
}
mixer_type "software"
audio_buffer_size "8192"
filesystem_charset "UTF-8"
id3v1_encoding "UTF-8"
Виджет всегда выдает только N/A - N/A. Почему так? awesome --version:
awesome v3.5.5 (Kansas City Shuffle)
 • Build: Aug 25 2014 20:55:55 for i686 by gcc version 4.7.3 (@Gentoo-TD)
 • Compiled against Lua 5.1.5 (running with Lua 5.1)
 • D-Bus support: ✔
mpd --version:
Music Player Daemon 0.18.14

★★★★★

Последнее исправление: DeadEye (всего исправлений: 2)
Ответ на: комментарий от anonymous

Я пробовал написать небольшой скрипт, выдающий это напрямую в awesome-client, но mpc при выводе упорно отказывает в подключении без объяснения деталей.

DeadEye ★★★★★
() автор топика

0.18.14

протух.

уже 0.19.1

vim
()
Ответ на: комментарий от DeadEye

выдающий это напрямую в awesome-client

...и всё равно через некоторый промежуток времени нужно что-то запускать. Замечательно.

Поражаюсь этим недоумкам с овсомом.

anonymous
()
Ответ на: комментарий от liaonau

A ‘cron’ like program for mpd. It can execute scripts based on mpd’s idle events.

Всё, как я и говорил —

и всё равно через некоторый промежуток времени нужно что-то запускать

В то время, как в нормальном DE подобные плагины написаны на сишке с использованием libmpdclient, [censored] изобретают жрущие процессор костыли, каждую секудну дёргающие по пятьдесят exec*()'ов и непоспевающие за актуальным значением.

Нужно ещё заметить, что эти костыли тормозят ещё и сам awesome — асинхронности-то нету. Но можно использовать временные файлы на жестком диске — больше костылей богу костылей!

anonymous
()
Ответ на: комментарий от DeadEye

Не убедил :) Алсо, можешь провести эксперимент — открой два окна и зажми Mod+J (или что там у тебя переходит к следующему окну). Желательно интервал задержки клавиш поменьше выставить (xset r rate 270 35 у меня). Заметны ли тормоза каждые N секунд (т.е. когда у тебя там эти команды пускаются)? У меня вот да — это при том, что команд даже не пускается, а тупо читается файл из /sys/class/power_supply, который poll'ит своё состояние каждые 2 секунды.

anonymous
()
Ответ на: комментарий от DeadEye

1) Тормозов не замечено, УМВР.

Судя по скриншотам — у тебя из виджетов только CPU и MEM. Даже часов нет — зачем так жить?

2) Даже если бы были, я бы остался.

Ради чего?

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

каждую секудну дёргающие по пятьдесят exec*()'ов и непоспевающие за актуальным значением

Стандартная песня длится порядка нескольких минут. Огромный напряг для процессора выполнить dbus-send раз в пару минут, да. Все было бы гораздо проще если бы mpd сам висел на сессионной dbus шине и посылал сообщения об изменении состояния на нее, а не использовал старомодный ipc с помощью сокета. awesome умеет слушать dbus сообщения.

liaonau
()
Ответ на: комментарий от anonymous

gmail мне не нужен. а mpd, если все совсем плохо, буду костыль делать.

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

С этим, пожалуй, стоит согласиться — верное замечание. Особенно при использовании lgi начиная с 3.5 заметно если дергать каждую секунду по несколько виджетов. Но это не типичный случай, если, разве что, в часах секунды выводить.

liaonau
()
Ответ на: комментарий от actionless

кстати, забыл сказать - в виджете mpc не используется у меня, это я тестировал попытку запилить костыль, которая тоже не сработала.

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

С /sys очевидно никак и нигде по другому не получится, надо увеличивать время обновления. Обычно это не проблема — знать температуру каждую секунду или каждые 5 секунд — разница не велика. Для батареи я лично не делаю поллинг напрямую, а жду dbus сообщений от UPower. dbus для networkmanager, dbus для количества непрочитанных rss (немного пришлось пропатчить liferea). Для громкости у меня костыль подобный mpdcron — демон слушает сообщения о состоянии pulseaudio и вызывает awesome-client. Было бы опять же проще, если бы разработчики pulseaudio решили не изобретать велосипед, а посылать сообщения на сессионную шину. С gmail не знаю, не использую.

В общем жить можно и вполне неплохо. Что, конечно, не отменет огорчения от отсутствия в lua нормальных потоков. Просто плюсы awesome в настраиваемости и т.д. перевешивают минусы.

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

Познавательно, спасибо.

Для /sys ещё можно пускать в фоне что-то вроде

#!/bin/bash
while true; do
    x=$(</sys/class/power_supply/...) && printf %s "$x" > /tmp/awesome-glue/battery-status
    sleep 1s
done

и из awesome читать /tmp/awesome-glue/battery-status — при условии, что /tmp в tmpfs.

Но костыли же.

anonymous
()
Ответ на: комментарий от DeadEye

ну так если твой тест фейлится вне виджета, то при чем тут виджет?

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

Нужно ещё заметить, что эти костыли тормозят ещё и сам awesome — асинхронности-то нету. Но можно использовать временные файлы на жестком диске — больше костылей богу костылей!

у меня чуть более элегантное (в плане io) решение, можешь посмотреть если интересно: https://github.com/actionless/awesome_config/blob/devel/actionless/async.lua#L29

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

awesome — асинхронности-то нету
. Но можно использовать временные файлы на жестком диске

Не все так плохо. Есть какой-то костыль, который добавляет асинхронность.

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

sleep 1s

Упс, sleep — внешний бинарник. Можно использовать zsh + zmodload zsh/zselect: zselect -t 100 == sleep 1s.

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