للاعبين الحقيقيين فقط: vlc، وmpv، وRhythmBox، ومتصفحات الويب، وcmus، وmpd، وspotify وغيرها.
محادثة
Playerctl عبارة عن أداة مساعدة لسطر الأوامر ومكتبة للتحكم في مشغلات الوسائط التي تطبق مواصفات واجهة MPRIS D-Bus. يُسهل Playerctl ربط إجراءات اللاعب، مثل التشغيل والإيقاف المؤقت، بمفاتيح الوسائط. يمكنك أيضًا الحصول على بيانات التعريف حول مسار التشغيل مثل الفنان والعنوان لدمجها في مولدات سطر الحالة أو أدوات سطر الأوامر الأخرى.
يأتي Playerctl أيضًا مزودًا ببرنامج خفي يسمح له بالعمل على مشغل الوسائط النشط حاليًا المسمى playerctld
.
playerctl [--version] [--list-all] [--all-players] [--player=NAME] [--ignore-player=IGNORE] [--format=FORMAT] [--no-messages] COMMAND
فيما يلي قائمة بالأوامر المتاحة:
يأمر | وصف |
---|---|
play | أمر اللاعب باللعب. |
pause | اطلب من اللاعب أن يتوقف مؤقتًا |
play-pause | اطلب من اللاعب التبديل بين التشغيل/الإيقاف المؤقت. |
stop | أمر اللاعب بالتوقف. |
next | اطلب من اللاعب الانتقال إلى المسار التالي. |
previous | اطلب من اللاعب الانتقال إلى المسار السابق. |
position [OFFSET][+/-] | اطلب من اللاعب الانتقال إلى الموضع أو البحث عن الإزاحة للأمام أو للخلف في ثوانٍ. |
volume [LEVEL][+/-] | اطبع أو اضبط مستوى الصوت على LEVEL من 0.0 إلى 1.0. |
status | احصل على حالة اللعب للاعب. إما "تشغيل" أو "متوقف مؤقتًا" أو "متوقف". |
metadata [KEY...] | اطبع البيانات التعريفية للمسار الحالي. إذا تم تمرير KEY، فاطبع تلك القيم من بيانات التعريف فقط. |
open [URI] | أمر للاعب بفتح عنوان URI محدد. يمكن أن يكون إما مسار ملف أو عنوان URL بعيد. |
loop [STATUS] | طباعة أو ضبط حالة الحلقة. إما "لا شيء" أو "المسار" أو "قائمة التشغيل". |
shuffle [STATUS] | طباعة أو ضبط حالة خلط ورق اللعب. إما "تشغيل" أو "إيقاف". |
بدون تحديد أي لاعبين للتحكم فيه، سيعمل Playerctl على أول لاعب يمكنه العثور عليه.
يأتي Playerctl مع خدمة تسمى playerctld
تراقب نشاط مشغلات الوسائط في الخلفية. إذا كان playerctld
قيد التشغيل، فسيعمل Playerctl على اللاعبين حسب ترتيب نشاطهم الأخير. لبدء تشغيل playerctld
، أضف الأمر التالي إلى البرنامج النصي لبدء تشغيل النظام لديك:
playerctld daemon
يمكنك سرد أسماء اللاعبين المتاحين للتحكم والذين يعملون على النظام باستخدام playerctl --list-all
.
إذا كنت ترغب فقط في التحكم في لاعبين معينين، فيمكنك تمرير أسماء هؤلاء اللاعبين مفصولة بفواصل باستخدام علامة --player
. سيحدد Playerctl المثيل الأول للاعب في تلك القائمة الذي يدعم الأمر. للتحكم في جميع اللاعبين في القائمة، يمكنك استخدام علامة --all-players
.
وبالمثل، يمكنك تجاهل اللاعبين عن طريق تمرير أسمائهم باستخدام علامة --ignore-player
.
يمكن استخدام اسم اللاعب الخاص %any
في قائمة اللاعبين المحددين مرة واحدة لمطابقة أي لاعب غير موجود في القائمة. يمكن استخدام هذا لتحديد أولويات اللاعبين أو تقليل أولوياتهم.
أمثلة:
# Command the first instance of VLC to play
playerctl --player=vlc play
# Command all players to stop
playerctl --all-players stop
# Command VLC to go to the next track if it's running. If it's not, send the
# command to Spotify.
playerctl --player=vlc,spotify next
# Get the status of the first player that is not Gwenview.
playerctl --ignore-player=Gwenview status
# Command any player to play, but select Chromium last
playerctl --player=%any,chromium play
# Command any player to play, but select VLC first
playerctl --player=vlc,%any play
يمكنك تمرير سلسلة تنسيق باستخدام الوسيطة --format
لطباعة الخصائص بتنسيق معين. قم بتمرير المتغير الذي تريد طباعته في سلسلة التنسيق بين قوسين مزدوجين مثل {{ VARIABLE }}
. المتغيرات المتاحة هي إما اسم أمر الاستعلام، أو أي شيء في خريطة البيانات التعريفية التي يمكن عرضها باستخدام playerctl metadata
. يمكنك استخدام هذا لدمج playerctl في منشئ خط الحالة.
للحصول على شعار بسيط "يتم التشغيل الآن":
playerctl metadata --format " Now playing: {{ artist }} - {{ album }} - {{ title }} "
# prints 'Now playing: Lana Del Rey - Born To Die - Video Games'
تتضمن لغة القالب بعض المتغيرات المضمنة والوظائف المساعدة للتنسيق الشائع الذي يمكنك استدعاؤه على متغيرات القالب. ويمكنه أيضًا إجراء العمليات الحسابية الأساسية على الأرقام.
# Prints 'Total length: 3:23'
playerctl metadata --format " Total length: {{ duration(mpris:length) }} "
# Prints 'At position: 1:16'
playerctl position --format " At position: {{ duration(position) }} "
# Prints 'Artist in lowercase: lana del rey'
playerctl metadata --format " Artist in lowercase: {{ lc(artist) }} "
# Prints 'STATUS: PLAYING'
playerctl status --format " STATUS: {{ uc(status) }} "
# Prints the time remaining in the track (e.g, 'Time remaining: 2:07')
playerctl metadata --format " Time remaining: {{ duration(mpris:length - position) }} "
# Prints volume from 0 - 100
playerctl metadata --format " Volume: {{ volume * 100 }} "
وظيفة | دعوى | وصف |
---|---|---|
lc | خيط | تحويل السلسلة إلى أحرف صغيرة. |
uc | خيط | تحويل السلسلة إلى أحرف كبيرة. |
duration | كثافة العمليات | تحويل المدة إلى تنسيق hh:mm:ss. |
markup_escape | خيط | الهروب من أحرف ترميز XML في السلسلة. |
default | أي أي | اطبع القيمة الأولى إذا كانت موجودة، أو اطبع القيمة الثانية. |
emoji | الحالة أو الحجم | حاول تحويل المتغير إلى تمثيل تعبيري. |
trunc | سلسلة، كثافة العمليات | اقتطاع السلسلة إلى الحد الأقصى للطول. |
عامل | وصف |
---|---|
playerName | اسم اللاعب الحالي . |
position | موضع المسار الحالي بالميكرو ثانية |
status | حالة التشغيل للمشغل الحالي |
volume | الحجم من 0.0 إلى 1.0 |
album | ألبوم المسار الحالي. |
artist | فنان المسار الحالي. |
title | عنوان المسار الحالي. |
يمكنك تمرير علامة --follow
إلى أوامر الاستعلام للحظر، وانتظار اتصال اللاعبين، وطباعة الاستعلام كلما تغير. إذا تم تمرير اللاعبين باستخدام --player
، فسيتم تفضيل اللاعبين الموجودين في القائمة سابقًا بالترتيب الذي يظهرون به ما لم يتم تمرير --all-players
. عندما لا يتمكن أي لاعب من دعم الاستعلام، كما هو الحال عند خروج جميع اللاعبين، سيتم طباعة سطر جديد. على سبيل المثال، ليتم إعلامك بالمعلومات حول أحدث مسار يتم تشغيله حاليًا لمشغلات الوسائط لديك، استخدم:
playerctl metadata --format ' {{ playerName }}: {{ artist }} - {{ title }} {{ duration(position) }}|{{ duration(mpris:length) }} ' --follow
يمكنك البحث عن موضع في المسار أو التخطي للأمام والخلف.
# Go back 30 seconds
playerctl position 30-
# Go forward 30 seconds
playerctl position 30+
# Seek to the position at 30 seconds
playerctl position 30
لتمكين تسجيل التصحيح، قم بتعيين متغير البيئة G_MESSAGES_DEBUG=playerctl
. من المفيد تضمين سجل التصحيح عند الإبلاغ عن المشكلات.
تتطلب بعض المشغلات مثل Spotify تعيين متغيرات بيئة DBus معينة والتي يتم تعيينها عادةً داخل مدير الجلسة. إذا كنت لا تستخدم مدير الجلسة أو لم يقم بتعيين هذه المتغيرات تلقائيًا (مثل xinit
)، فقم بتشغيل بيئة سطح المكتب الخاصة بك ملفوفة في أمر dbus-launch
. على سبيل المثال، في ملف .xinitrc
الخاص بك، استخدم هذا لبدء تشغيل WM:
exec dbus-launch --autolaunch=$(cat /var/lib/dbus/machine-id) i3
قد يحتاج بعض اللاعبين إلى تثبيت مكون إضافي أو تكوين آخر.
في Quod Libet، افتح النافذة File -> Plugins وحدد المكون الإضافي المسمى MPRIS D-Bus Support .
إذا لم يبدأ تشغيل playerctld
تلقائيًا وكنت تستخدم xinit
وsystemd، فقد تحتاج إلى هذا الإصلاح لتمكين تنشيط DBus للعمل بشكل صحيح:
systemctl --user import-environment DISPLAY XAUTHORITY
if which dbus-update-activation-environment >/dev/null 2>&1; then
dbus-update-activation-environment DISPLAY XAUTHORITY
fi
أولاً، تحقق ومعرفة ما إذا كان Playerctl متاحًا من مدير الحزم لديك (إذا لم يكن كذلك، فاطلب من شخص ما استضافة حزمة لك) وتحقق أيضًا من صفحة الإصدارات على github.
playerctl
متاح لـ Fedora 28 أو الأحدث:
sudo dnf install playerctl
playerctl
متاح لـ Mageia وopenSUSE عبر مستودع COPR هذا. أولاً، قم بتثبيت ملف المستودع الخاص بتوزيعتك من COPR. ثم قم بتثبيت playerctl
باستخدام مدير الحزم الذي تختاره.
يتوفر playerctl
كحزمة Guix والتي يمكن تثبيتها على أي توزيعة Linux بعد تثبيت Guix:
guix install playerctl
يتطلب استخدام CLI والمكتبة GLib (وهو تبعية لجميع هؤلاء المشغلين تقريبًا، لذا ربما يكون لديك بالفعل). يمكنك استخدام المكتبة بأي لغة برمجة تقريبًا مع مكتبة ربط الاستبطان المرتبطة بها.
بالإضافة إلى ذلك، تحتاج أيضًا إلى تبعيات البناء التالية:
gobject-introspection لبناء بيانات الاستبطان (قابلة للتكوين باستخدام خيار introspection
meson)
gtk-doc لتوثيق البناء (قابل للتكوين باستخدام خيار gtk-doc
meson)
يحتاج مستخدمو Fedora أيضًا إلى تثبيت redhat-rpm-config
لإنشاء وبناء المشروع للمساهمة في تطوير وتثبيت playerctl على /
:
meson mesonbuild
sudo ninja -C mesonbuild install
لاحظ أنك بحاجة إلى تثبيت meson
. في حالة احتواء التوزيعة الخاصة بك على إصدار أقدم من meson فقط في مستودعها، يمكنك تثبيت الإصدار الأحدث عبر النقطة:
pip3 install meson
ضع في اعتبارك أيضًا أنه يتم تمكين gtk-doc و gobject-introspection افتراضيًا، ويمكنك تعطيلهما باستخدام -Dintrospection=false
و -Dgtk-doc=false
.
إذا كنت لا تريد تثبيت playerctl على /
يمكنك تثبيته في مكان آخر عن طريق تصدير DESTDIR
قبل استدعاء النينجا، على سبيل المثال:
export PREFIX="/usr/local"
meson --prefix="${PREFIX}" --libdir="${PREFIX}/lib" mesonbuild
export DESTDIR="$(pwd)/install"
ninja -C mesonbuild install
يمكنك استخدامه لاحقًا عن طريق تصدير المتغيرات التالية:
export LD_LIBRARY_PATH="$DESTDIR/${PREFIX}/lib/:$LD_LIBRARY_PATH"
export GI_TYPELIB_PATH="$DESTDIR/${PREFIX}/lib/:$GI_TYPELIB_PATH"
export PATH="$DESTDIR/${PREFIX}/bin:$PATH"
لاستخدام مكتبة البرمجة النصية، ابحث عن لغتك المفضلة من هذه القائمة وقم بتثبيت مكتبة الارتباطات. يتم استضافة وثائق المكتبة هنا. للحصول على أمثلة حول كيفية استخدام المكتبة، راجع مجلد الأمثلة.
بالنسبة للمستخدمين الأكثر تقدمًا، يوفر Playerctl مكتبة يمكن استكشافها ومتوفرة بلغة البرمجة النصية المفضلة لديك والتي تتيح تحكمًا أكثر تفصيلاً مثل القدرة على الاشتراك في أحداث مشغل الوسائط أو الحصول على البيانات التعريفية مثل الفنان والعنوان لمسار التشغيل. يستخدم هذا المثال روابط بايثون.
#!/usr/bin/env python3
from gi . repository import Playerctl , GLib
player = Playerctl . Player ( 'vlc' )
def on_metadata ( player , metadata ):
if 'xesam:artist' in metadata . keys () and 'xesam:title' in metadata . keys ():
print ( 'Now playing:' )
print ( '{artist} - {title}' . format (
artist = metadata [ 'xesam:artist' ][ 0 ], title = metadata [ 'xesam:title' ]))
def on_play ( player , status ):
print ( 'Playing at volume {}' . format ( player . props . volume ))
def on_pause ( player , status ):
print ( 'Paused the song: {}' . format ( player . get_title ()))
player . connect ( 'playback-status::playing' , on_play )
player . connect ( 'playback-status::paused' , on_pause )
player . connect ( 'metadata' , on_metadata )
# start playing some music
player . play ()
if player . get_artist () == 'Lana Del Rey' :
# I meant some good music!
player . next ()
# wait for events
main = GLib . MainLoop ()
main . run ()
للحصول على مثال أكثر اكتمالاً قادر على الاستماع إلى وقت بدء اللاعبين وخروجهم، راجع player-manager.py من الأمثلة الرسمية.
راجع المقالات التالية حول Playerctl:
المشاريع ذات الصلة من صانع Playerctl:
هذا العمل متاح بموجب رخصة جنو العامة الصغرى (انظر النسخ).
حقوق الطبع والنشر © 2014، توني كريسي