สำหรับผู้เล่นตัวจริงเท่านั้น: vlc, mpv, RhythmBox, เว็บเบราว์เซอร์, cmus, mpd, Spotify และอื่น ๆ
แชท
Playerctl เป็นยูทิลิตี้บรรทัดคำสั่งและไลบรารีสำหรับควบคุมเครื่องเล่นสื่อที่ใช้ MPRIS D-Bus Interface Specification Playerctl ทำให้การผูกการกระทำของผู้เล่น เช่น การเล่นและหยุดชั่วคราว เข้ากับคีย์มีเดียเป็นเรื่องง่าย คุณยังสามารถรับข้อมูลเมตาเกี่ยวกับแทร็กที่กำลังเล่น เช่น ศิลปินและชื่อสำหรับการรวมเข้ากับตัวสร้างสถานะหรือเครื่องมือบรรทัดคำสั่งอื่นๆ
Playerctl ยังมาพร้อมกับ daemon ที่อนุญาตให้มันทำงานกับเครื่องเล่นสื่อที่ใช้งานอยู่ในปัจจุบันที่เรียกว่า 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][+/-] | สั่งให้ผู้เล่นไปที่ตำแหน่งหรือค้นหา 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 | สตริง int | ตัดทอนสตริงให้มีความยาวสูงสุด |
ตัวแปร | คำอธิบาย |
---|---|
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 สำหรับการสร้างข้อมูลวิปัสสนา (กำหนดค่าได้ด้วยตัวเลือก meson introspection
)
gtk-doc สำหรับเอกสารประกอบการสร้าง (กำหนดค่าได้ด้วยตัวเลือก gtk-doc
meson)
ผู้ใช้ Fedora จำเป็นต้องติดตั้ง redhat-rpm-config
ด้วย
เพื่อสร้างและสร้างโครงการเพื่อสนับสนุนการพัฒนาและติดตั้ง playerctl ไปที่ /
:
meson mesonbuild
sudo ninja -C mesonbuild install
โปรดทราบว่าคุณต้องติดตั้ง meson
ในกรณีที่ distro ของคุณมี meson เวอร์ชันเก่ากว่าอยู่ในที่เก็บ คุณสามารถติดตั้งเวอร์ชันใหม่ล่าสุดได้ผ่านทาง pip:
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 มีไลบรารี่ที่ใช้งานได้ในภาษาสคริปต์ที่คุณชื่นชอบ ซึ่งให้การควบคุมที่มีรายละเอียดมากขึ้น เช่น ความสามารถในการสมัครรับกิจกรรมเครื่องเล่นสื่อ หรือรับข้อมูลเมตา เช่น ศิลปินและชื่อแทร็กที่กำลังเล่น ตัวอย่างนี้ใช้การเชื่อมโยง Python
#!/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:
งานนี้เผยแพร่ภายใต้สัญญาอนุญาตสาธารณะทั่วไปของ GNU (ดูการคัดลอก)
ลิขสิทธิ์ © 2014, โทนี่ คริสซี