Danh sách nhanh Spotify cho Unity


10

Làm cách nào tôi có thể thêm "danh sách nhanh" của Unity cho Spotify (được cài đặt từ trang web của họ), để khi tôi nhấp chuột phải vào biểu tượng trên thanh công cụ của mình, tôi nhận được: "Tiếp theo, Trước, Dừng, Phát", v.v.

Câu trả lời:


5

spotify (máy khách linux bản địa)

Vì spotify bao gồm một chỉ báo để kiểm soát một số chức năng của nó, điều này cho phép chúng tôi sử dụng dbusđể gửi các sự kiện.

Có một kịch bản tuyệt vời về ubuntuforums bao gồm điều này.

Đầu tiên cài đặt một điều kiện tiên quyết:

sudo apt-get install libnet-dbus-perl

Bây giờ sao chép và dán tập lệnh vào một tệp văn bản được gọi spcmdvà lưu tập lệnh này vào thư mục nhà của bạn.

Cung cấp cho nó quyền thực thi:

chmod +x ~/spcmd

Cho phép di chuyển cái này đến một thư mục hữu ích hơn:

mv ~/spcmd /usr/local/bin

Bây giờ, hãy tạo một danh sách nhanh chóng.

Đầu tiên sao chép tập tin spotify vào thư mục nhà của bạn:

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

Mở tệp và sao chép và dán danh sách nhanh vào cuối tệp. Lưu nó

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

kết quả cuối cùng

nhập mô tả hình ảnh ở đây

danh sách nhanh chóng

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

Tôi nghĩ rằng các câu trả lời cho đến nay là một chút quá phức tạp. Không có kịch bản riêng cần thiết, các lệnh DBus có liên quan có thể được gửi trực tiếp qua dbus-send. Chỉ cần đảm bảo rằng dbusgói được cài đặt và trong dòng lệnh đưa ra các lệnh sau:

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

Chỉnh sửa tập tin ~/.local/share/applications/spotify.desktopđể đọc:

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

Và bạn đã hoàn thành.


Đây là câu trả lời tốt nhất. Tuy nhiên, khi tôi cố gắng thực hiện thủ công, tôi đã bỏ lỡ --print-reply=literalvà nó không hoạt động. Bạn có một lời giải thích? Tôi gần như không biết gì về DBus.
Tamás Barta

Câu trả lời tuyệt vời :) Câu hỏi bổ sung, có thể thêm nút "thumbs-up" và "thumbs-down" không (những cái trong radio Spotify :))?
Linus

2

spotify_cmd là một công cụ để kiểm soát một phiên bản đang chạy của Spotify dưới rượu , nó cũng hoạt động trên Windows nhưng chưa được thử nghiệm.

Tải về spotifycmd . Sao chép vào máy tính để bàn. sau đó

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

Bây giờ sử dụng Exec=/usr/bin/spotifycmd/spotify_cmd.exe XXXXtrong khi tạo danh sách nhanh.

Dưới đây XXXXplaypause, next, prev, stop, voldown, volup,, vv

để được hướng dẫn tạo danh sách nhanh, hãy nhìn vào câu trả lời của tôi


Câu trả lời này là tuyệt vời !!!! Tôi đang gặp vấn đề với spotify_cmd.exe. Nó trở lại Can not find spotify, is it running?trong thiết bị đầu cuối. Đây là theo dõi đúng mặc dù!
Ryan McClure

Oof, có một cách bản địa?
MarkovCh1

@Syzygy Tôi không tìm thấy. :(
Rahul Virpara

hmmm - đưa ra lỗi - có thể bạn phải chạy phiên bản windows của spotify dưới rượu để spotify_cmd dựa trên rượu này hoạt động.
fossfreedom

@fossfreedom bạn nói đúng. chỉ cần kiểm tra nguồn. nó bao gồm windows.hmột thư viện cung cấp API Win32.
Rahul Virpara

-1

Spotify sẽ có một biểu tượng trên bảng điều khiển. Chỉ cần nhấp vào đó và bạn sẽ chơi, dừng, tạm dừng, tiếp theo, v.v. (không nhớ tất cả). Không chắc chắn nếu điều đó trả lời câu hỏi của bạn.


2
Câu hỏi này là hỏi làm thế nào để đưa chức năng đó vào biểu tượng của Spotify trong trình khởi chạy Unity.
Eliah Kagan

Ok, chỉ cần tôi hiểu lầm câu hỏi của anh ấy.
dùng66987
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.