Spotify Quicklist für Unity

10

Wie kann ich eine Unity- "Quicklist" für Spotify hinzufügen (von der Website installiert), sodass beim Klicken mit der rechten Maustaste auf das Symbol in meinem Dock Folgendes angezeigt wird: "Weiter, Zurück, Stopp, Wiedergabe" usw.

MarkovCh1
quelle

Antworten:

5

spotify (nativer Linux-Client)

Da spotify einen Indikator zur Steuerung einiger seiner Funktionen enthält, können wir damit dbusEreignisse senden.

Es gibt ein großartiges Skript auf Ubuntuforums , das dies abdeckt.

Installieren Sie zuerst eine Voraussetzung:

sudo apt-get install libnet-dbus-perl

Kopieren Sie nun das Skript und fügen Sie es in eine Textdatei mit dem Namen ein. spcmdSpeichern Sie es in Ihrem Home-Ordner.

Gib ihm Ausführungsrechte:

chmod +x ~/spcmd

Verschieben wir dies in einen nützlicheren Ordner:

mv ~/spcmd /usr/local/bin

Jetzt erstellen wir eine kurze Liste.

Kopieren Sie zuerst die spotify-Desktopdatei in Ihren Home-Ordner:

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

Öffnen Sie die Datei und kopieren Sie die Schnellliste und fügen Sie sie am Ende der Datei ein. Speichern Sie es.

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

Endresultat

Geben Sie hier die Bildbeschreibung ein

kurze Liste

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;
}
Fossfreiheit
quelle
5

Ich denke, die bisher gegebenen Antworten sind etwas zu kompliziert. Es ist kein separates Skript erforderlich, die entsprechenden DBus-Befehle können direkt über gesendet werden dbus-send. Stellen Sie einfach sicher, dass das dbusPaket installiert ist, und geben Sie in der Befehlszeile die folgenden Befehle ein:

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

Bearbeiten Sie die ~/.local/share/applications/spotify.desktopzu lesende Datei :

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

Und du bist fertig.

Michael Wild
quelle
Dies ist die beste Antwort. Als ich es jedoch manuell versuchte, habe ich es verpasst --print-reply=literalund es hat nicht funktioniert. Hast du eine Erklärung? Ich weiß fast nichts von DBus.
Tamás Barta
Hervorragende Antwort :) Zusätzliche Frage, ist es möglich, auch die Schaltflächen "Daumen hoch" und "Daumen runter" hinzuzufügen (diejenigen, die sich im Spotify-Radio befinden :))?
Linus
2

spotify_cmd ist ein Tool zum Steuern einer laufenden Instanz von Spotify unter Wine . Es sollte auch unter Windows funktionieren, wurde jedoch noch nicht getestet.

Laden Sie spotifycmd herunter . Auf den Desktop kopieren. dann

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

Verwenden Sie jetzt Exec=/usr/bin/spotifycmd/spotify_cmd.exe XXXXbeim Erstellen der Quicklist.

Hier XXXXist playpause, next, prev, stop, voldown, volup, usw.

Eine Anleitung zum Erstellen einer Quicklist finden Sie in meiner Antwort

Rahul Virpara
quelle
Diese Antwort ist ausgezeichnet !!!! Ich habe jedoch Probleme mit spotify_cmd.exe. Es kehrt Can not find spotify, is it running?im Terminal zurück. Dies ist jedoch der richtige Weg!
Ryan McClure
Oof, gibt es einen einheimischen Weg?
MarkovCh1
@ Syzygy Ich habe keinen gefunden. :(
Rahul Virpara
hmmm - angesichts des Fehlers - müssen Sie möglicherweise die Windows-Version von spotify unter wine ausführen, damit dieses weinbasierte spotify_cmd funktioniert.
Fossfreiheit
@fossfreedom du hast recht. habe gerade die Quelle überprüft. Es enthält windows.heine Bibliothek, die die Win32-API bereitstellt.
Rahul Virpara
-1

Spotify hat ein Symbol auf dem Bedienfeld. Klicken Sie einfach darauf und Sie erhalten Wiedergabe, Stopp, Pause, Weiter usw. (erinnern Sie sich nicht an alle). Ich bin mir nicht sicher, ob das Ihre Frage beantwortet.

user66987
quelle
2
In dieser Frage wird gefragt, wie diese Funktionalität auch in das Spotify-Symbol im Unity-Launcher eingefügt werden kann.
Eliah Kagan
Ok, nur ich, der seine Frage missverstanden hat.
user66987