Lista rápida do Spotify para Unity

10

Como posso adicionar uma "lista rápida" do Unity para o Spotify (instalada a partir do site), de modo que quando clico com o botão direito no ícone no meu dock, recebo: "Next, Previous, Stop, Play" e assim por diante ?

    
por MarkovCh1 03.06.2012 / 00:03

4 respostas

5

spotify (cliente nativo do linux)

Como o Spotify inclui um indicador para controlar algumas de suas funções, isso nos permite usar dbus para enviar eventos.

Existe um ótimo script em ubuntuforums que abrange isso.

Primeiro, instale um pré-requisito:

sudo apt-get install libnet-dbus-perl

Agora copie e cole o script em um arquivo de texto chamado spcmd e salve-o em sua pasta pessoal.

Conceder direitos de execução:

chmod +x ~/spcmd

Vamos mover isso para uma pasta mais útil:

mv ~/spcmd /usr/local/bin

Agora, vamos criar uma lista rápida.

Primeiro copie o arquivo de área de trabalho spotify para sua pasta pessoal:

mkdir -p ~/.local/share/applications
cp /usr/share/applications/spotify.desktop ~/.local/share/applications

Abra o arquivo e copie e cole a lista rápida no final do arquivo. Salve isso.

gedit ~/.local/share/applications/spotify.desktop

resultado final

listarápida

X-Ayatana-Desktop-Shortcuts=PlayPause;Next;Previous;Stop;[PlayPauseShortcutGroup]Name=PlayPauseExec=spcmdplaypauseTargetEnvironment=Unity[NextShortcutGroup]Name=NextExec=spcmdnextTargetEnvironment=Unity[PreviousShortcutGroup]Name=PreviousExec=spcmdpreviousTargetEnvironment=Unity[StopShortcutGroup]Name=StopExec=spcmdstopTargetEnvironment=Unity

spcmd

#!/usr/bin/perluse5.010;usestrict;usewarnings;useFile::Basename;useNet::DBus;#Figureoutsomedbusstuffunless(defined$ENV{'DBUS_SESSION_BUS_ADDRESS'}){&set_DBUS_SESSION_BUS_ADDRESS;#die"Don't know which dbus to attach to.\nMake sure environment variable DBUS_SESSION_BUS_ADDRESS is set.";
}
#my $bus = Net::DBus->find;
my $bus = Net::DBus->session;
my $spotify = $bus->get_service("org.mpris.MediaPlayer2.spotify");
my $player = $spotify->get_object("/org/mpris/MediaPlayer2", "org.mpris.MediaPlayer2.Player");
my $application = $spotify->get_object("/org/mpris/MediaPlayer2", "org.mpris.MediaPlayer2");
my $getorset = $spotify->get_object("/org/mpris/MediaPlayer2", "org.freedesktop.DBus.Properties");

# Handle command line argument
if (scalar @ARGV == 0) { &print_help; }
given ($ARGV[0]) {
# when ('play') { $player->Play(); } #Does not work for some reason.
when ('pause') { $player->Pause(); }
when ('playpause') { $player->PlayPause(); }
when ('next') { $player->Next(); }
when ('previous') { $player->Previous(); }
when ('stop') { $player->Stop(); }
when ('playstatus') { print $getorset->Get("org.mpris.MediaPlayer2.Player", "PlaybackStatus") . "\n"; }
when (m/\bspotify:(artist|album|track):[0-9a-zA-z]{22}\b/) { $player->OpenUri($_); }
when ('metadata-debug') { &print_debug_metadata; }
default { &print_help; }
}


# Print the help text
sub print_help {
print "USAGE: " . basename($0) . " {pause|playpause|next|previous|stop|playstatus|met adata-debug|<spotify URI>}\n\n";
print "\t" . "pause" . "\t\t" . "Causes spotify to pause current playback." . "\n";
print "\t" . "playpause" . "\t" . "Causes spotify to pause or play current playback." . "\n";
print "\t" . "next" . "\t\t" . "Goes to next song." . "\n";
print "\t" . "previous" . "\t" . "Goes to previous song." . "\n";
print "\t" . "stop" . "\t\t" . "Stops playback." . "\n";
print "\t" . "playstatus" . "\t" . "Prints current playstatus (Playing/Paused)." . "\n";
print "\t" . "<spotify URI>" . "\t" . "Starts playing supplied URI." . "\n";
print "\t" . "metadata-debug" . "\t" . "Shows available data on currently playing song." . "\n";
print "\t" . "\t\t" . "Fairly unformatted, thus \"debug\" data." . "\n";
print "\n";
print "EXAMPLES:\t" . basename($0) . " playpause" . "\n";
print "\t\t" . basename($0) . " spotify:track:5XXAq1r5r73ZyBS0XAiGw0" . "\n";

exit;
}

# Print some raw metadata
sub print_debug_metadata {
# Dereference the metadata hashref by copying it to a local hash
my %metadata = %{ $getorset->Get("org.mpris.MediaPlayer2.Player", "Metadata") };

# Print all metadata
print "Now Playing:\n";
for (keys %metadata) {
print $_ . ":\t" . $metadata{$_} . "\n" unless ($_ eq 'xesam:artist');
}

# Dereference the artist arrayref by copying it to local array
my @artistarray = @{ $metadata{'xesam:artist'} };

# Print all artists.
foreach my $artist (@artistarray) {
print "artist: \t" . $artist . "\n";
}
}

sub set_DBUS_SESSION_BUS_ADDRESS {
my $curruser = 'whoami'; chomp $curruser;
my $procname = 'spotify';
my $pid = 'pgrep -o -u $curruser $procname'; chomp $pid;
my $environ = '/proc/' . $pid . '/environ';
my $dbussession = 'grep -z DBUS_SESSION_BUS_ADDRESS $environ'; $dbussession =~ s/^DBUS_SESSION_BUS_ADDRESS=//;

$ENV{'DBUS_SESSION_BUS_ADDRESS'} = $dbussession;
}
    
por fossfreedom 09.06.2012 / 18:28
5

Acho que as respostas dadas até agora são um pouco complicadoras demais. Não é necessário script separado, os comandos relevantes do DBus podem ser enviados diretamente via dbus-send . Apenas certifique-se de que o pacote dbus esteja instalado e, na linha de comando, emita os seguintes comandos:

mkdir -p ~/.local/share/applications
cp /usr/share/applications/spotify.desktop ~/.local/share/applications/

Edite o arquivo ~/.local/share/applications/spotify.desktop para ler:

[Desktop Entry]
Name=Spotify
GenericName=Music Player
Comment=Listen to music using Spotify
Icon=spotify-client
Exec=spotify %U
TryExec=spotify
Terminal=false
Type=Application
Categories=Qt;Audio;Music;Player;AudioVideo
MimeType=x-scheme-handler/spotify
# ====> MODIFICATIONS START HERE <=====
Actions=PlayPause;Next;Previous

[Desktop Action PlayPause]
Name=Play/Pause
Exec=dbus-send --print-reply=literal --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause
OnlyShowIn=Messaging Menu;Unity;

[Desktop Action Next]
Name=Next
Exec=dbus-send --print-reply=literal --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Next
OnlyShowIn=Messaging Menu;Unity;

[Desktop Action Previous]
Name=Previous
Exec=dbus-send --print-reply=literal --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Previous
OnlyShowIn=Messaging Menu;Unity;

E pronto!

    
por Michael Wild 18.09.2013 / 07:22
-1

O Spotify terá um ícone no painel. Basta clicar sobre isso, e você começa a jogar, parar, pausar, etc próximo (não lembro de todos). Não tenho certeza se isso responde à sua pergunta.

    
por user66987 03.06.2012 / 08:59