1

Я хочу изменить обложку альбома 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 от Clementine, обрезает его и помещает его в 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 ответ1

0

Использование программных ссылок

В вашем файле ~/.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 .

Чтобы получить желаемое поведение, вы можете поэкспериментировать с двумя флагами в строке image conky: -n указывает conky не кэшировать изображение, а -f interval указывает интервал очистки кэша 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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .