Widget de controle de mídia para o KDE Plasma 6 — mostra a capa do álbum, título/artista, barra de progresso e controles de reprodução da música que está tocando, integrando com qualquer player compatível com MPRIS2.
Funciona com Spotify, VLC, navegadores (Firefox/Chromium tocando vídeo ou música), Elisa, e wrappers como o Sidra (Apple Music) — qualquer aplicativo que exponha a interface MPRIS2 via D-Bus.
- Capa do álbum com fallback para ícone quando não há arte disponível
- Título e artista da faixa atual
- Barra de progresso com tempo decorrido / restante (e busca arrastando, se o player suportar)
- Controles: anterior, play/pause, próxima
- Shuffle (aleatório) e Repeat (repetir faixa / playlist)
- Volume com slider
- Seletor de player quando há mais de um tocando ao mesmo tempo
- Transparência do fundo configurável (desktop)
- Duas representações automáticas:
- No painel: versão compacta (capa pequena + nome + anterior/play-pause/próxima)
- Expandida / desktop: tudo acima, com a capa grande
- KDE Plasma 6 (testado no Fedora KDE com
libplasma 6.7) - Pacotes de desenvolvimento:
Fedora:
sudo dnf install plasma-sdk libplasma-devel qt6-qtdeclarative-developenSUSE:
sudo zypper install plasma6-sdk libplasma6-devel qt6-declarative-develArch / Manjaro:
sudo pacman -S plasma-sdk
plasma-sdktraz oplasmoidviewer, usado para testar o widget sem reiniciar o Plasma inteiro.
Sem precisar clonar nada:
- Clique direito no painel ou na área de trabalho → Adicionar Widgets...
- Botão Obter Novos Widgets → Baixar Novos Widgets do Plasma
- Busque por "Widget Musica" e clique em Instalar
Ou baixe direto da página na KDE Store: https://www.opendesktop.org/p/2363408/
As opções abaixo são para quem quer instalar a partir do código-fonte ou desenvolver.
git clone https://github.com/dnsouzadev/widget-musica.git
cd widget-musica
./install.shDepois recarregue o Plasma:
kquitapp6 plasmashell && kstart plasmashellO install.sh cria um symlink da pasta package/ para ~/.local/share/plasma/plasmoids/ — assim qualquer alteração no código já reflete no widget. Outras opções:
./install.sh --copy # copia os arquivos em vez de symlink
./install.sh --uninstall # remove o widgetmkdir -p ~/.local/share/plasma/plasmoids
ln -sfn "$(pwd)/package" ~/.local/share/plasma/plasmoids/com.dnsouzadev.widgetmusica
kquitapp6 plasmashell && kstart plasmashell- Painel: clique direito no painel → Adicionar Widgets... → procure por "Widget Musica"
- Desktop: clique direito na área de trabalho → Adicionar Widgets... → mesma busca
Clique direito no widget → Configurar Widget Musica... → aba Aparência:
- Transparência do fundo (0–100%): controla a opacidade do fundo desenhado pelo próprio widget. Padrão
60.
⚠️ Limitação conhecida: a transparência funciona no desktop, mas não no popup do painel. O popup é uma janela separada controlada pelo Plasma (PlasmaQuick::Dialog) e não é possível forçar transparência real nela via QML — nem widgets de referência maduros (como oplasmusic-toolbar) conseguem.
# representação expandida (como ficaria no desktop)
plasmoidviewer -a com.dnsouzadev.widgetmusica
# representação compacta (como ficaria num painel horizontal no topo)
plasmoidviewer -a com.dnsouzadev.widgetmusica -f horizontal -l topedgeErros de QML aparecem no terminal. Ignore os avisos de isScreenUiReady e qt.svg.draw — são ruído do containment padrão do viewer, não têm relação com este widget.
widget-musica/
├── README.md
├── LICENSE
├── install.sh ← instalador (symlink / copy / uninstall)
└── package/ ← o plasmoid em si
├── metadata.json ← id, nome, versão, licença, autor
└── contents/
├── ui/
│ ├── main.qml ← estado compartilhado (MPRIS) + escolhe a representação
│ ├── Compact.qml ← representação compacta (painel)
│ ├── Full.qml ← representação expandida (popup / desktop)
│ └── config/
│ └── General.qml ← UI da página "Configurar Widget"
└── config/
├── main.xml ← schema das configurações (KConfigXT)
└── config.qml ← registra a aba "Aparência"
- A integração com os players usa o módulo QML privado do Plasma
org.kde.plasma.private.mpris(o mesmo do controle de mídia oficial do KDE). Ele expõe umMpris2Modelcom a lista de players ativos e umcurrentPlayercom propriedades (track,artist,artUrl,position,length,volume,shuffle,loopStatus) e métodos (Next(),Previous(),PlayPause()). main.qmlcria oMpris2Modele expõeplayer,readyeisPlayingcomo propriedades doPlasmoidItem(idroot).Compact.qmleFull.qmlacessam esse estado viaroot.playeretc. — funciona porque o Plasma carrega as representações no mesmo contexto QML domain.qml.- A posição (
position) não é atualizada automaticamente pelo D-Bus, então umTimeremFull.qmlchamaplayer.updatePosition()a cada 500ms enquanto toca e o slider não está sendo arrastado. - Shuffle/repeat só funcionam se o player expuser essas propriedades opcionais do MPRIS. Players que não suportam deixam os botões desabilitados — é limitação do player, não do widget (ex.: alguns wrappers não implementam).
- A capa não aparece na representação compacta quando o painel é muito fino: o
RowLayoutnão recorta conteúdo que excede a altura disponível, e calcular o tamanho da capa a partir da altura real do painel se mostrou frágil. Por isso ela é exibida com tamanho proporcional à espessura do painel.
| Erro | Causa |
|---|---|
module "org.kde.plasmoid" is not installed |
import errado — o correto é org.kde.plasma.plasmoid |
main.qml must be of type PlasmoidItem |
no Plasma 6 a raiz do main.qml precisa ser PlasmoidItem |
root item ... does not implement QQuickItem |
erro de sintaxe no QML (ex.: vírgulas entre property bindings, que não existem em QML) |
KPackageStructure ... does not match |
falta "KPackageStructure": "Plasma/Applet" no metadata.json |
| Conteúdo "vazando" pra fora do painel | Layout.preferredWidth/Height é tratado como mínimo dentro de um RowLayout — se o painel for mais fino, o item transborda em vez de encolher; dimensione a partir da espessura real e/ou use clip |
Contribuições são bem-vindas! O fluxo padrão no GitHub:
- Faça um fork do repositório (botão Fork no topo da página em
github.com/dnsouzadev/widget-musica). - Clone o seu fork e crie uma branch para a sua mudança:
git clone https://github.com/SEU_USUARIO/widget-musica.git cd widget-musica git checkout -b minha-melhoria - Instale em modo desenvolvimento para testar enquanto edita:
./install.sh
- Faça suas alterações nos arquivos
.qmldentro depackage/contents/ui/. Teste com oplasmoidviewer(não precisa reiniciar o Plasma a cada edição):plasmoidviewer -a com.dnsouzadev.widgetmusica
- Commit e push na sua branch:
git add . git commit -m "Adiciona X" git push origin minha-melhoria
- Abra um Pull Request do seu fork para o repositório original, descrevendo o que mudou e (se for visual) anexando um print.
- Mantenha o estilo do código existente (indentação de 4 espaços, nomes descritivos).
- Mudanças visuais: inclua um screenshot do antes/depois.
- Encontrou um bug mas não vai corrigir? Abra uma issue descrevendo o passo a passo para reproduzir, sua versão do Plasma (
plasmashell --version) e o player usado.
- Estado vazio mais elaborado quando nenhum player está ativo
- Tooltip no painel com mais detalhes da faixa
- Cor de fundo personalizada (além da transparência)
- Atalho de teclado global para play/pause
Distribuído sob a licença MIT. Veja o arquivo LICENSE para o texto completo.
Você pode usar, copiar, modificar e redistribuir livremente, mantendo o aviso de copyright.
Daniel Souza GitHub: @dnsouzadev
Se este widget te foi útil, deixa uma ⭐ no repositório!