Pertanyaan Spotify Daftar Cepat untuk Kesatuan


Bagaimana saya bisa menambahkan "daftar cepat" Persatuan untuk Spotify (dipasang dari situs web mereka), sehingga ketika saya mengklik kanan ikon di dok saya, saya mendapatkan: "Berikutnya, Sebelumnya, Berhenti, Mainkan" dan seterusnya?


10
2018-06-02 22:03


asal




Jawaban:


spotify (klien linux asli)

Sejak spotify termasuk indikator untuk mengontrol beberapa fungsi, ini memungkinkan kita untuk menggunakan dbus untuk mengirim acara.

Ada naskah yang bagus ubuntuforums yang menutupi ini.

Pertama instal prasyarat:

sudo apt-get install libnet-dbus-perl

Sekarang salin dan tempel skrip ke dalam file teks yang disebut spcmd dan simpan ini ke folder rumah Anda.

Berikan itu mengeksekusi hak:

chmod +x ~/spcmd

Mari pindahkan ini ke folder yang lebih berguna:

mv ~/spcmd /usr/local/bin

Sekarang, mari buat daftar cepat.

Pertama salin file desktop spotify ke folder rumah Anda:

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

Buka file dan salin dan tempel daftar cepat ke bagian akhir file. Simpan itu.

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

hasil akhir

enter image description here

daftar cepat

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
2018-06-09 16:28





Saya pikir jawaban yang diberikan sejauh ini agak merepotkan. Tidak ada skrip terpisah yang diperlukan, perintah DBus yang relevan dapat dikirim langsung melalui dbus-send. Pastikan saja bahwa dbus paket diinstal dan di baris perintah mengeluarkan perintah berikut:

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

Edit file ~/.local/share/applications/spotify.desktop untuk membaca:

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

Dan selesai.


5
2017-09-18 05:22



Ini adalah jawaban terbaik. Namun, ketika saya mencoba melakukannya secara manual, saya merindukan --print-reply=literal, dan itu tidak berhasil. Apakah Anda punya penjelasan? Saya hampir tidak tahu apa pun tentang DBus. - Tamás Barta
Jawaban luar biasa :) Pertanyaan tambahan, apakah mungkin untuk menambahkan tombol "jempol ke atas" dan "jempol ke bawah" juga (yang ada di radio spotify :))? - Linus


spotify_cmd adalah alat untuk mengontrol menjalankan contoh Spotify di bawah    anggur, seharusnya berfungsi juga di Windows tetapi belum diuji.

Unduh spotifycmd. Salin ke Desktop. kemudian

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

sekarang digunakan Exec=/usr/bin/spotifycmd/spotify_cmd.exe XXXX saat membuat daftar cepat.

Sini XXXX aku s playpause, next, prev, stop, voldown, volup, dll.

untuk panduan membuat daftar cepat lihat jawabanku


2
2018-06-07 17:46



Jawaban ini luar biasa !!!! Saya mengalami masalah dengan spotify_cmd.exe bekerja sekalipun. Ia kembali Can not find spotify, is it running? di terminal. Ini adalah jalur yang benar! - Ryan McClure
Oof, apakah ada cara asli? - MarkovCh1
@Syzygy Saya tidak menemukannya. :( - Rahul Virpara
hmmm - diberikan kesalahan - mungkin Anda harus menjalankan versi windows spotify di bawah anggur untuk spotify_cmd berbasis anggur ini untuk bekerja. - fossfreedom♦
@fossfreedom Anda benar. hanya memeriksa sumber. itu termasuk windows.h perpustakaan yang menyediakan Win32 API. - Rahul Virpara


Spotify akan memiliki ikon di panel. Cukup klik itu, dan Anda mendapatkan bermain, berhenti, jeda, dll berikutnya (tidak ingat semua). Tidak yakin apakah itu menjawab pertanyaan Anda.


-1
2018-06-03 06:59



Pertanyaan ini menanyakan bagaimana menempatkan fungsi itu ke dalam ikon Spotify di peluncur Unity juga. - Eliah Kagan
Ok, hanya saya yang salah mengerti pertanyaannya. - user66987