Как вставить постоянно изменяющуюся (динамическую) строку из текстового документа в.conkyrc как путь к изображению
Я хочу изменить обложку альбома Clementine с каждой песней. По сути, я пытаюсь вставить путь изображения в Conky, который меняется каждые несколько секунд.
У меня есть сценарий clementine.sh
который запускается каждые 5 секунд в Conky, используя эту строку:
${execi 5 sh ~/.config/openbox/conky/clementine.sh}
Скрипт запускает следующую команду:
qdbus org.mpris.clementine /Player org.freedesktop.MediaPlayer.GetMetadata | grep arturl | cut -c16- > ~/.config/openbox/conky/image
Что это делает, он находит arturl
от Клементины, обрезает его и помещает в файл image
, Строка перезаписывается каждый раз. Написанная строка выглядит так:
/tmp/clementine-art-ED9078.jpg
Что я хотел бы сделать, это найти способ скопировать строку /tmp/clementine-art-ED9078.jpg
из файла image
и поместите его в мой файл.conkyrc в строке:
${image "xxxx" -p 0,620 -s 75x75}
Где xxxx
где я хочу, чтобы текст записывался так, чтобы строка:
${image "xxxx" -p 0,620 -s 75x75}
На самом деле будет выглядеть так:
${image /tmp/clementine-art-ED9078.jpg -p 0,620 -s 75x75}
Очевидно, что линия будет меняться с каждой песней.
Я хочу сделать это с помощью скрипта (или непосредственно в Conky и т. Д.), И мне не нужно устанавливать какие-либо программы или что-либо еще для этого. Я считаю, что это "выполнимо", я просто понятия не имею, как это сделать. Я искал Интернет и не нашел ничего, что я мог бы использовать. Любая помощь, которую кто-либо может оказать мне, будет не только оценена, но и заставит мою головную боль уйти.
Примечание: я могу (из Conky) перечислить исполнителя, название и альбом, используя следующие строки в.conkyrc:
${font sans-serif:normal:size=8}${execi 5 qdbus org.mpris.clementine /Player org.freedesktop.MediaPlayer.GetMetadata | grep artist}
${font sans-serif:normal:size=8}${execi 5 qdbus org.mpris.clementine /Player org.freedesktop.MediaPlayer.GetMetadata | grep title}
${font sans-serif:normal:size=8}${execi 5 qdbus org.mpris.clementine /Player org.freedesktop.MediaPlayer.GetMetadata | grep album}
1 ответ
Использование программных ссылок
В вашем ~/.conkyrc
файл, добавьте строку:
${image /tmp/conky.jpg -p 0,620 -s 75x75}
После qdbus
строку в вашем скрипте, добавьте строку:
ln -sf "$(cat ~/.config/openbox/conky/image)" /tmp/conky.jpg
это ln
команда обновляет файл ссылки /tmp/conky.jpg
указать на любое имя файла изображения в ~/.config/openbox/conky/image
файл.
Чтобы получить поведение, которое вы хотите, вы можете поэкспериментировать с двумя флагами на Conky image
линия: -n
говорит conky не кэшировать изображение, пока -f interval
to указывает интервал очистки кэша conky для этого изображения.
С помощью awk
Подводя итог, название вашего файла изображения находится в ~/.config/openbox/conky/image
и вы хотите перенести его на свой ~/.conkyrc
файл. Итак, после qdbus
строку в вашем скрипте, добавьте строку:
awk -v "img=$(cat ~/.config/openbox/conky/image)" '/image/{sub("xxxx", img)} 1' ~/.conkyrc.in >~/.conkyrc
где ~/.conkyrc.in
это ваш прототип файла conkyrc, который содержит строку:
${image xxxx -p 0,620 -s 75x75}
Команда awk заменяет xxxx именем вашего файла изображения. После awk
команда запущена, новая ~/.conkyrc
файл создан с правильным именем изображения.
Как это устроено:
-v "img=$(cat ~/.config/openbox/conky/image)"
Это создает
awk
переменнаяimg
и присваивает ему содержание~/.config/openbox/conky/image
,/image/{sub("xxxx", img)}
Это ищет строки, содержащие слово
image
, Для любой строки, содержащей это слово, первое вхождениеxxxx
заменяется значением переменнойimg
,1
Эта загадочная команда просто указывает awk печатать каждую строку, полученную из входного файла.
~/.conkyrc.in
Это входной файл, содержащий макет
${image xxxx ....
линия.>~/.conkyrc
Это говорит оболочке перенаправить вывод
awk
в ваш файл conkyrc, перезаписав предыдущую копию.
С помощью m4
(Advanced)
Создать файл ~/.conkyrc.m4
который выглядит так же, как ваш обычный conky файл, за исключением того, что он содержит строку:
${image translit(include(/home/user/.config/openbox/conky/image), [
])) -p 0,620 -s 75x75}
Затем запустите:
m4 ~/.conkyrc.m4 >~/.conkyrc
m4
узнает translit
а также include
как команды, которым оно должно подчиняться. Когда он видит include
команда, она будет читать ваши ~/.config/openbox/conky/image
и включите содержимое. Этот файл, скорее всего, будет иметь символ новой строки в конце. translit
есть команда, чтобы удалить эту новую строку.
m4
это очень мощный макроязык, который вы можете использовать для управления многими частями вашего файла conkyrc. Если вы не хотите тратить время на изучение нового языка, возможно, проще придерживаться awk
решение.