Ознайомтеся зі швидким списком для Unity


10

Як я можу додати "Швидкий список" Unity для Spotify (встановлений на їхньому веб-сайті), щоб я, клацнувши правою кнопкою миші на піктограму на доці, отримав: "Далі, Попередня, Зупинка, Відтворення" тощо?

Відповіді:


5

spotify (рідний клієнт Linux)

Оскільки spotify включає індикатор для управління деякими його функціями, це дозволяє нам використовувати dbusдля надсилання подій.

Існує чудовий сценарій на ubuntuforums, який охоплює це.

Спочатку встановіть необхідну умову:

sudo apt-get install libnet-dbus-perl

Тепер скопіюйте та вставте скрипт у текстовий файл із назвою spcmdта збережіть це у домашній папці.

Дайте йому виконувати права:

chmod +x ~/spcmd

Дозволяє перемістити це у більш корисну папку:

mv ~/spcmd /usr/local/bin

Тепер давайте створимо швидкий список.

Спочатку скопіюйте файл спотифічного робочого столу у домашню папку:

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

Чудова відповідь :) Додатковий запитання, чи можна додати також кнопку "великі пальці" та "великі пальці" (ті, які є у спотифікованому радіо :))?
Лінус

2

spotify_cmd - це інструмент для управління запущеним екземпляром Spotify під вином , він також повинен працювати і в Windows, але не перевірений.

Завантажте 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

Насправді, є рідний шлях?
MarkovCh1

@Syzygy я не знайшов. :(
Рахул Вірпара

хммм - враховуючи помилку - можливо, вам доведеться запустити Windows версію spotify під вином, щоб ця винна spotify_cmd працювала.
fossfreedom

@fossfreedom ви праві. щойно перевірене джерело. вона включає windows.hбібліотеку, яка забезпечує API Win32.
Рахул Вірпара

-1

Spotify матиме значок на панелі. Просто натисніть на це, і ви отримаєте гру, зупинку, паузу, наступний т. Д. (Не пам'ятаю всіх). Не впевнений, чи відповідає це на ваше запитання.


2
Це питання задає питання про те, як включити цю функціональність у піктограму Spotify у панелі запуску Unity.
Елія Каган

Гаразд, я просто неправильно зрозумів його питання.
користувач66987
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.