Spotify Quicklist per Unity


10

Come posso aggiungere un "elenco rapido" Unity per Spotify (installato dal loro sito Web), in modo che quando faccio clic con il pulsante destro del mouse sull'icona sul mio dock, ottengo: "Avanti, Precedente, Ferma, Riproduci" e così via?

Risposte:


5

spotify (client Linux nativo)

Poiché spotify include un indicatore per controllare alcune delle sue funzioni, questo ci consente di utilizzare dbusper inviare eventi.

C'è una grande sceneggiatura su ubuntuforums che copre questo.

Innanzitutto installa un prerequisito:

sudo apt-get install libnet-dbus-perl

Ora copia e incolla lo script in un file di testo chiamato spcmde salvalo nella tua cartella home.

Concedi i diritti di esecuzione:

chmod +x ~/spcmd

Consente di spostare questo in una cartella più utile:

mv ~/spcmd /usr/local/bin

Ora, consente di creare un elenco rapido.

Per prima cosa copia il file desktop di Spotify nella tua cartella home:

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

Apri il file e copia e incolla l'elenco rapido alla fine del file. Salvarlo.

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

risultato finale

inserisci qui la descrizione dell'immagine

QuickList

X-Ayatana-Desktop-Shortcuts=PlayPause;Next;Previous;Stop;

[PlayPause Shortcut Group]
Name=PlayPause
Exec=spcmd playpause
TargetEnvironment=Unity

[Next Shortcut Group]
Name=Next
Exec=spcmd next
TargetEnvironment=Unity

[Previous Shortcut Group]
Name=Previous
Exec=spcmd previous
TargetEnvironment=Unity

[Stop Shortcut Group]
Name=Stop
Exec=spcmd stop
TargetEnvironment=Unity

spcmd

#!/usr/bin/perl

use 5.010;
use strict;
use warnings;
use File::Basename;
use Net::DBus;

# Figure out some dbus stuff
unless ( 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;
}

5

Penso che le risposte fornite finora siano un po 'complicate. Non è richiesto uno script separato, i relativi comandi DBus possono essere inviati direttamente tramite dbus-send. Assicurati solo che il dbuspacchetto sia installato e nella riga di comando emetti i seguenti comandi:

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

Modifica il file ~/.local/share/applications/spotify.desktopper leggere:

[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 hai finito.


Questa è la risposta migliore Tuttavia, quando ho provato a farlo manualmente, mi sono perso --print-reply=literale non ha funzionato. Hai una spiegazione? Non so quasi nulla di DBus.
Tamás Barta,

Risposta superba :) Domanda aggiuntiva, è possibile aggiungere anche i pulsanti "pollice in su" e "pollice in giù" (quelli che si trovano nella radio di Spotify :))?
Linus,

2

spotify_cmd è uno strumento per controllare un'istanza in esecuzione di Spotify in wine , dovrebbe funzionare anche su Windows ma non è stato testato.

Scarica spotifycmd . Copia sul desktop. poi

cd ~/Desktop/
tar -xvjf spotifycmd-0.5.tar.bz2 
sudo cp -r spotifycmd /usr/bin/

ora utilizzare Exec=/usr/bin/spotifycmd/spotify_cmd.exe XXXXdurante la creazione di QuickList.

Qui XXXXè playpause, next, prev, stop, voldown, volup, etc.

per la guida per creare una lista rapida guarda la mia risposta


Questa risposta è eccellente !!!! Sto riscontrando problemi con spotify_cmd.exe che funziona però. Ritorna Can not find spotify, is it running?nel terminale. Questa è la strada giusta però!
Ryan McClure,

Oof, c'è un modo nativo?
MarkovCh1

@Syzygy Non ne ho trovato uno. :(
Rahul Virpara

hmmm - visto l'errore - forse devi eseguire la versione Windows di Spotify sotto wine per far funzionare questo spotify_cmd basato sul vino.
Fossfreedom

@fossfreedom hai ragione. appena verificato la fonte. include windows.huna libreria che fornisce l'API Win32.
Rahul Virpara,

-1

Spotify avrà un'icona sul pannello. Basta fare clic su di esso e si ottiene riproduzione, arresto, pausa, ecc. Successivo (non ricordare tutto). Non sono sicuro che risponda alla tua domanda.


2
Questa domanda è come porre questa funzionalità nell'icona di Spotify anche nel programma di avvio di Unity.
Eliah Kagan,

Ok, solo io che ho frainteso la sua domanda.
user66987
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.