Unity 용 Spotify 퀵리스트


10

Spotify (웹 사이트에서 설치)에 Unity "quicklist"를 추가하여 도크의 아이콘을 마우스 오른쪽 버튼으로 클릭하면 "Next, Previous, Stop, Play"등이 표시됩니다.

답변:


5

spotify (네이티브 리눅스 클라이언트)

spotify에는 일부 기능을 제어하는 ​​표시기가 포함되어 있기 때문에 dbus이벤트를 보내는 데 사용할 수 있습니다.

우분투 포럼 에는 이것을 다루는 훌륭한 스크립트 가 있습니다.

먼저 전제 조건을 설치하십시오.

sudo apt-get install libnet-dbus-perl

이제 스크립트를 복사하여 텍스트 파일에 붙여넣고 spcmd홈 폴더에 저장하십시오.

실행 권한을 부여하십시오.

chmod +x ~/spcmd

이것을 더 유용한 폴더로 옮길 수 있습니다 :

mv ~/spcmd /usr/local/bin

이제 빠른 목록을 만들어 보겠습니다.

먼저 spotify 데스크탑 파일을 홈 폴더로 복사하십시오.

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

파일을 열고 빠른 목록을 복사하여 파일 끝에 붙여 넣습니다. 저장해.

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

최종 결과

여기에 이미지 설명을 입력하십시오

퀵리스트

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

지금까지 주어진 답변은 약간 복잡합니다. 별도의 스크립트가 필요하지 않으므로 관련 DBus 명령을 통해 직접 보낼 수 있습니다 dbus-send. dbus패키지가 설치되어 있는지 확인 하고 명령 행에서 다음 명령을 실행하십시오.

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

~/.local/share/applications/spotify.desktop읽을 파일 을 편집하십시오 .

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

그리고 당신은 끝났습니다.


이것이 가장 좋은 대답입니다. 그러나 수동으로 시도했지만을 놓쳤 --print-reply=literal으며 작동하지 않았습니다. 설명이 있습니까? 나는 DBus에 대해 거의 아무것도 모른다.
Tamás Barta

최고의 답변 :) 추가 질문, "엄지 손가락 올리기"및 "엄지 손가락 올리기"버튼을 추가 할 수 있습니까 (spotify 라디오에있는 것) :?
Linus

2

spotify_cmd 에서 스포티 파이의 실행중인 인스턴스를 제어하는 도구입니다 와인 , 그것은뿐만 아니라 윈도우에서 작동해야하지만, 테스트되지 않았습니다.

spotifycmd를 다운로드 하십시오 . 데스크탑으로 복사하십시오. 그때

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

이제 Exec=/usr/bin/spotifycmd/spotify_cmd.exe XXXX퀵리스트를 작성 하는 동안 사용 하십시오.

여기서 XXXX이며 playpause, next, prev, stop, voldown, volup, 등

빠른 답변 을 작성하는 방법에 대한 내 답변보기


이 답변은 훌륭합니다 !!!! 그래도 spotify_cmd.exe에 문제가 있습니다. Can not find spotify, is it running?터미널로 돌아옵니다 . 이것은 올바른 길입니다!
Ryan McClure 2016 년

Oof, 기본 방법이 있습니까?
MarkovCh1

@Syzygy 나는 찾지 못했습니다. :(
Rahul Virpara

hmmm-오류가 발생했을 때-와인 기반 spotify_cmd가 작동하려면 와인에서 Windows 버전의 spotify를 실행해야 할 수도 있습니다.
fossfreedom

@ fossfreedom 당신이 맞아요. 방금 소스를 확인했습니다. windows.hWin32 API를 제공하는 라이브러리가 포함 되어 있습니다.
Rahul Virpara

-1

Spotify는 패널에 아이콘이 있습니다. 그냥 클릭하면 재생, 정지, 일시 정지 등을 할 수 있습니다 (모두 기억하지 마십시오). 그 질문에 대한 답변인지 확실하지 않습니다.


2
이 질문은 Unity 런처의 Spotify 아이콘에 해당 기능을 넣는 방법을 묻습니다.
Eliah Kagan

좋아, 나 자신의 질문을 오해했다.
user66987 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.