Módulo Polybar Spotify
November 29, 20224 minutes
Si usas polybar, supongo que alguna vez habrás pensado en poner un módulo para poder controlar spotify y ver que canción está sonando. En este post vas a aprender como hacerlo
¿Qué es?
Es un simple módulo para la polybar que muestra que canción se está reproduciendo y se pueden añadir botones para pausar y pasar canciones.
¿Como añadirlo a la polybar?
Para añadirlo a la polybar se tienen que seguir los siguientes dos pasos: irte al archivo donde tengas los módulos de la polybar, en mi caso ~/.config/polybar/modules.ini
, y abajo del todo copiar lo siguiente
Módulos
Módulo Song
- Añádelo si quieres que salga la canción que se està reproduciendo…
[module/song]
type = custom/script
exec = ~/.config/bin/song.sh
interval = 1
format-prefix = " "
format = <label>
Módulo Previous
- Añádelo si quieres tener el botón para reproducir la canción anterior
[module/previous]
type = custom/script
exec = ~/.config/bin/previous.sh
interval = 1
;format-prefix = " "
format = <label>
click-left = dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Previous
Módulo Next
- Añádelo si quieres tener el botón para reproducir la canción siguiente
[module/next]
type = custom/script
exec = ~/.config/bin/next.sh
interval = 1
;format-prefix = " "
format = <label>
click-left = dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Next
Módulo Play
- Añádelo si quieres tener el botón para parar y reproducir una canción
[module/play]
type = custom/script
exec = ~/.config/bin/play.sh
interval = 1
;format-prefix = " "
format = <label>
click-left = dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause
Archivos
Para que los módulos funcionen hay que poner los siguientes archivos en la carpeta ~/.config/bin/
¡Acuérdate de darle permisos de ejecución a todos con chmod +x!
song.sh
- Contenido del archivo song.sh
#!/bin/bash
if [[ "$(dbus-send --session --dest=org.freedesktop.DBus --type=method_call --print-reply /org/freedesktop/DBus org.freedesktop.DBus.ListNames)" == *org.mpris.MediaPlayer2.spotify* ]]; then
artist=$(dbus-send --print-reply --session --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:'org.mpris.MediaPlayer2.Player' string:'Metadata' | awk '/artist/{getline; getline; split($0,a,"\""); print a[2]}')
song=$(dbus-send --print-reply --session --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:'org.mpris.MediaPlayer2.Player' string:'Metadata' | awk '/title/{getline; split($0,a,"\""); print a[2]}')
echo $song - $artist
else
echo ""
fi
next.sh
- Contenido del archivo next.sh
#!/bin/bash
if [[ "$(dbus-send --session --dest=org.freedesktop.DBus --type=method_call --print-reply /org/freedesktop/DBus org.freedesktop.DBus.ListNames)" == *org.mpris.MediaPlayer2.spotify* ]]; then
echo ""
else
echo ""
fi
previous.sh
- Contenido del archivo previous.sh
#!/bin/bash
if [[ "$(dbus-send --session --dest=org.freedesktop.DBus --type=method_call --print-reply /org/freedesktop/DBus org.freedesktop.DBus.ListNames)" == *org.mpris.MediaPlayer2.spotify* ]]; then
echo ""
else
echo ""
fi
play.sh
- Contenido del archivo play.sh
#!/bin/bash
if [[ "$(dbus-send --session --dest=org.freedesktop.DBus --type=method_call --print-reply /org/freedesktop/DBus org.freedesktop.DBus.ListNames)" == *org.mpris.MediaPlayer2.spotify* ]]; then
echo ""
else
echo ""
fi
¡Novedad Animated Song!
Algunas personas que usaron estos módulos me comentaron que al escuchar canciones muy largas, les ocupaba mucho espacio en la polybar, por eso hice con la ayuda de b3nder0n el siguiente script, que básicamente lo que hace es animar el texto de la canción para que solo ocupe x caracteres previamente definidos…
Configuración
Para su configuración es casi igual que los otros módulos, los pasos son los siguientes
Archivos
Para su correcto funcionamiento hay que crear los siguientes archivos ~/.config/bin/
y no te olvides de darles permiso de ejecución con chmod
animated.sh
- Contenido del animated.sh
#!/bin/bash
lenght=15
if [[ "$(dbus-send --session --dest=org.freedesktop.DBus --type=method_call --print-reply /org/freedesktop/DBus org.freedesktop.DBus.ListNames)" == *org.mpris.MediaPlayer2.spotify* ]]; then
artist=$(dbus-send --print-reply --session --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:'org.mpris.MediaPlayer2.Player' string:'Metadata' | awk '/artist/{getline; getline; split($0,a,"\""); print a[2]}')
song=$(dbus-send --print-reply --session --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:'org.mpris.MediaPlayer2.Player' string:'Metadata' | awk '/title/{getline; split($0,a,"\""); print a[2]}')
text="阮 $song - $artist "
num_char=$(echo -n $text | wc -c)
text2=${text// /#}
if [[ $lenght < $num_char ]];then
letter=$(cat ~/.config/bin/progress.txt)
times=0
result=()
for (( i=0 ; i < ${#text} ; i++ )) {
a[$i]=${text2:i:1}
}
until [ $lenght -lt $times ]; do
letter=$(($letter + 1))
times=$(($times + 1))
if [[ $letter -lt $num_char ]]; then
result+=(${a[$letter]})
else
letter=-1
fi
done
echo $(($letter - $times + 1)) > ~/.config/bin/progress.txt
echo ${result[@]} | tr -d " " | tr "#" " "
else
echo $text
fi
else
echo ""
fi
progress.txt
- Hace falta crear un archivo llamado progress.txt, tambien en ~/.config/bin/
Módulo
Para su correcto funcionamiento hay que añadirlo abajo del todo en el archivo de módulos de la polybar, en mi caso ~/.config/polybar/modules.ini
y después activarlo en el config.ini
[module/animated-song]
type = custom/script
exec = ~/.config/bin/animated.sh
interval = 1
format = <label>
Para graduar la velocidad se tiene que cambiar el valor de interval, el número de interval equivale a la velocidad por carácter.
Para modificar el máximo de caracteres se tiene que especificar en la variable lenght del animated.sh