Liste rapide Spotify pour Unity

10

Comment puis-je ajouter une «liste rapide» Unity pour Spotify (installée à partir de leur site Web), de sorte que lorsque je clique avec le bouton droit sur l'icône de mon dock, j'obtiens: «Suivant, Précédent, Arrêter, Jouer», etc.?

MarkovCh1
la source

Réponses:

5

spotify (client natif linux)

Étant donné que spotify comprend un indicateur pour contrôler certaines de ses fonctions, cela nous permet d'utiliser dbuspour envoyer des événements.

Il existe un excellent script sur ubuntuforums qui couvre cela.

Installez d'abord une condition préalable:

sudo apt-get install libnet-dbus-perl

Maintenant, copiez et collez le script dans un fichier texte appelé spcmdet enregistrez-le dans votre dossier de départ.

Donnez-lui des droits d'exécution:

chmod +x ~/spcmd

Permet de déplacer ceci vers un dossier plus utile:

mv ~/spcmd /usr/local/bin

Maintenant, permet de créer une liste rapide.

Copiez d'abord le fichier de bureau spotify dans votre dossier personnel:

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

Ouvrez le fichier et copiez et collez la liste rapide à la fin du fichier. Sauvegarde le.

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

résultat final

entrez la description de l'image ici

liste rapide

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;
}
liberté de fossé
la source
5

Je pense que les réponses données jusqu'à présent sont un peu trop compliquées. Aucun script séparé n'est requis, les commandes DBus pertinentes peuvent être envoyées directement via dbus-send. Assurez-vous simplement que le dbuspackage est installé et dans la ligne de commande émettez les commandes suivantes:

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

Modifiez le fichier ~/.local/share/applications/spotify.desktopà lire:

[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;

Et tu as fini.

Michael Wild
la source
C'est la meilleure réponse. Cependant, quand j'ai essayé de le faire manuellement, j'ai raté --print-reply=literalet cela n'a pas fonctionné. Avez-vous une explication? Je ne connais presque rien de DBus.
Tamás Barta
Superbe réponse :) Question supplémentaire, est-il possible d'ajouter aussi les boutons "pouce levé" et "pouce levé" (ceux qui sont dans la radio spotify :))?
Linus
2

spotify_cmd est un outil pour contrôler une instance en cours d'exécution de Spotify sous wine , il devrait également fonctionner sur Windows mais n'a pas été testé.

Téléchargez spotifycmd . Copiez sur le bureau. puis

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

maintenant utiliser Exec=/usr/bin/spotifycmd/spotify_cmd.exe XXXXlors de la création de la liste rapide.

Ici XXXXest playpause, next, prev, stop, voldown, volup, etc.

pour un guide pour créer une liste rapide, regardez ma réponse

Rahul Virpara
la source
Cette réponse est excellente !!!! J'ai des problèmes avec le travail de spotify_cmd.exe. Il revient Can not find spotify, is it running?en terminal. Mais c'est la bonne voie!
Ryan McClure
Oof, y a-t-il une voie native?
MarkovCh1
@Syzygy Je n'en ai pas trouvé. :(
Rahul Virpara
hmmm - étant donné l'erreur - vous devrez peut-être exécuter la version windows de spotify sous wine pour que ce spotify_cmd à base de vin fonctionne.
fossfreedom
@fossfreedom vous avez raison. vient de vérifier la source. il comprend windows.hune bibliothèque qui fournit l'API Win32.
Rahul Virpara
-1

Spotify aura une icône sur le panneau. Cliquez simplement sur cela, et vous obtenez la lecture, l'arrêt, la pause, la suite, etc. (ne me souviens pas de tout). Je ne sais pas si cela répond à votre question.

user66987
la source
2
Cette question demande également comment mettre cette fonctionnalité dans l'icône de Spotify dans le lanceur Unity.
Eliah Kagan
Ok, juste moi qui a mal compris sa question.
user66987