Controlando o amarok pela linha-de-comando

Publicado por Leandro Santiago em 14/01/2007

[ Hits: 8.353 ]

Blog: http://leandrosan.wordpress.com

 


Controlando o amarok pela linha-de-comando



Pra quem não sabe, é possível controlar as funções do amarok usando somente a linha-de-comando.

"Mas pra quê isso? Se eu tenho um rato à minha disposição, cheio de botõezinhos?"

Bem, espero ter, no final desta dica, convencido você que os famigerados "comandos" tem lá alguma (toda) utilidade.

Muitos diriam: amarok -f; amarok -p; amarok -r. Mas esta solução não é muito agradável ao meu ver. Não é difícil acontecer de aparecer mais de um processo do programa, o que gera uma confusão danada.

O que proponho é usar o DCOP (Desktop COmmunication Protocol), que nada mais é do que um sistema que que possibilita a integração e comunicação entre os programas do KDE (diz se que será substituído pelo dbus no kde4), para fazer esta tarefa.

Nota: Dizem as más línguas que é possível controlar quase todos programas do KDE com esse recurso, inclusive modificar o papel de parede. Eu não testei com todos. Se alguém testar e der certo, me comunique.

Bem, vamos deixar de enrolação.

Vamos começar com esse comando:

$ dcop amarok player play

Apareceu uma mensagem de erro? Esse sistema só funciona se o serviço (amarok) estiver em execução.

O comando acima executa a função play. Sem comentários.

Nos exemplos a seguir, para agilizar as coisas, direi somente o que faz cada tarefa somente pelo último campo (no caso acima, play):
  • play : Executar a canção, por assim dizer;
  • showOSD : Mostra a informação da música na tela;
  • volumeUp : Aumenta o volume;
  • volumeDown : Diminui o volume;
  • stop : Para de tocar;
  • prev : Música anterior na lista;
  • next : Próxima música da lista;
  • mute : Mudo ;)
  • pause : Pausa;
  • seek <inteiro> : onde <inteiro> é a posição na música onde você quer ir (em segundos);
  • lyrics: Exibe a letra da música, numa sintaxe ao estilo XML, que pode ser usado de vários modos (não vou explicar aqui, pois eu não sei muito sobre XML.. rsrsrs).

Estas são as funções básicas, mas é possível fazer mais, muito mais, basta um pouco de paciência e compreensão (e quem não precisa?).

Agora execute os comando num terminal, só de bobeira:

$ echo "Eu estou escutando agora: `dcop amarok player nowPlaying`"

$ echo "Uma música do ano de `dcop amarok player year`"
$ echo "O nome da música é `dcop amarok player title` e quem canta é `dcop amarok player artist`"
$ echo "o amarok está usando o mecanismo `dcop amarok player engine`"
$ xv `dcop amarok player coverImage`
$ echo "Há atualmente `dcop amarok playlist getTotalTrackCount` músicas na lista de reprodução do amarok"


Bem, acho que já dá pra entender o o poder dessa ferramenta pelos exemplos acima. Ela pode ser usada, por exemplo, naqueles temas do superkaramba, para mostrar a música atual, é o mecanismo usado naquele plugin do amsn que exibe a música atual e tal.

Se você quiser uma maneira gráfica de fazer isso (o que foge um pouco ao escopo desta dica), navegue graficamente pela árvore do dcop com o comando:

$ kdcop

A utilização é trivial: click, click-click, tec-tec.

No que este recurso foi útil para mim?
Vocês sabem aqueles teclados multimídia, com aquela centena de botões, mas que vêm com aquela maldita etiqueta com um logo do Windows? Com uma ajudinha do xbindkeys, a humanidade vai ao longe... rsrs.

Ah, para saber exatamente todas as funções que podem ser executadas, dê o comando:

$ dcop amarok player
ou
$ dcop amarok ## para opções mais "abrangentes"

Você verá um monte de coisas escritas do tipo:

Tipo1 funcao(Tipo2 var2, Tipo3 var3)

Isso significa que "funcao", quando executada, devolve um determinado dado do Tipo1.

Quem programa em C sabe do que se trata:
  • int: devolve um número inteiro (-1,5,10,100,...)
  • bool: devolve "true" ou "false" - verdadeiro ou falso ;)
  • void: Não devolve nada. É um comando que você passa para o programa fazer.

E há outros tipos, alguns mais complexos, mas não é difícil de entender.

Algumas funções precisam de um ou mais parâmetros, do Tipo2, Tipo3, etc.. Para executá-las, passe corretamente o tipo correto de valor, senão aparecerá uma mensagem de erro.

O legal é utilizar esses recursos também em scripts em shell. Por exemplo:

#!/bin/bash
fuser -vm ~ 2>&1 | grep amarok > /dev/null &&
if $(dcop amarok player isPlaying)
then
      echo "O amarok está executando a música $(dcop amarok player title)"
else
    echo "O amarok não está tocando nada"
fi || echo "O amarok não está em execução"

Sei que é um exemplo bem tosco e inútil, mas são com exemplos toscos e inúteis que a gente começa, não é?

Fugindo um pouco do assunto...
Ah, e pra para os que não sabem (eu descobri esses dias), o comando if do shell aceita booleanos como condição... É um recurso legal, que pode ser visto no exemplo acima.

Ah, e o while também, como em:

i=0;
while true
do
    echo -ne "\t$i"
    ((i++))
done

Como deu para ver, isso é um típico caso de looping infinito sem utilidade alguma.

Bem, chegamos ao fim de mais uma dica, espero ter conseguido passar a "mensagem" que queria. Não, não ache que isso é tudo sobre o dcop, pois para falar tudo, seria necessário um artigo bem complexo... E ainda sei muita pouca coisa sobre ele. Mas encorajo você a "fuçar" mais, e o que descobrir, postar aqui no VOL.

Obs:
-- Para mudar o papel de parede, faça:

$ dcop kdesktop KBackgroundIface setWallpaper "/caminho da imagem.png" 1

-- Todo programa do KDE tem uma função...

$ dcop <programa> MainApplication-Interface quit

... que finaliza o mesmo.

Leitura recomendada:
Links de programas citados nesta dica:
Bem povo, até a próxima, e muito obrigado.

Outras dicas deste autor

Instalando programas no Linux sem ter poderes de root

Criando e utilizando uma "biblioteca de funções"

Seu Linux falando português nativamente

Framebuffer - recursos gráficos sem o X

Acessando mais que 9 parâmetros em shell script

Leitura recomendada

Adicionando Kubuntu e Xubuntu no Ubuntu

O comando tree - listar diretórios em formato árvore

Como saber a versão do Cinnamon que estou usando?

Manipulando arquivos PDF pela linha de comando

Interrompendo processos no apt com segurança

  

Comentários
[1] Comentário enviado por IceW em 15/01/2007 - 05:35h

Ótima dica!
Agora vou terminar as 'leituras recomendadas' ;)
Estou usando o DCOP para controlar o Kopete!
Muito útil também :)

Valeu!

[2] Comentário enviado por tenchi em 15/01/2007 - 20:21h

Ah, observação:
Muitos programas podem ter várias sessões carregadas ao mesmo tempo, o que gera mais de um processo. Neste caso, a entrada deste programa no dcop tem a seguinte forma:
programa-PID
Onde PID é a identificação do processo correspondente.
Para resolver este problema, de mandar um sinal para um programa, ser ter que saber o PID dele, basta referenciar ao programa da seguinte forma:
$ dcop programa-\* <opções> <opções>...

Este asterisco tem a mesma função do asterisco do prompt. Colocamos uma contra-barra na frente dele para o livrarmos da interpretação do interpretador de comandos.
Exemplo:
Se no diretório que você está existir um arquivo com o nome "programa-ioio.cak", se não usar a contra barra, o comando acima ficará como:
$ dcop programa-ioio.cak <opções> <opções>...
O que visivelmente se trata de um erro.

É isso, até a próxima.

[3] Comentário enviado por tenchi em 16/01/2007 - 13:20h

Para quem quer saber ainda mais sobre o xindkeys, olhem essa dica:
http://br-linux.org/linux/atalhos-de-teclado-com-xbindkeys

[4] Comentário enviado por removido em 23/03/2007 - 01:03h

Legal esse artigo,
eu descobri isso vendo o código fonte do plugin MUSIC do Amsn.
Parabéns

[5] Comentário enviado por killerbean em 19/09/2008 - 18:05h

Legal esse artigo. exatamente o que procurava.
agora, aliado ao xbindkeys, comdigo controlar o amarok pelos botoes do meu mouse sem fio quando desligo o monitor.

Viva o Linux \o/



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts