Score:3

จะเล่นเสียงจากบริการ systemd บน Ubuntu ได้อย่างไร

ธง in

ฉันพยายามเล่นเสียงจากบริการบน Ubuntu:

tim@timpc:~$ uname -a Linux timpc 5.4.0-91-generic #102-Ubuntu SMP ศุกร์ 5 พ.ย. 16:31:28 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

นี่คือคำจำกัดความของบริการ:

tim@timpc:~$ cat /etc/systemd/system/alarmd.service
# Datei /etc/systemd/system/alarmd.service
[หน่วย]
คำอธิบาย=บริการเตือนภัย
ต้องการ = เสียงเป้าหมาย
After=sound.target

[บริการ]
Type=วันช็อต
สภาพแวดล้อม = "DISPLAY =: 0"
ผู้ใช้=ทิม
;ExecStart=/home/tim/Dokumente/super/alarmd/build/release/dist/alarmd --sound /usr/local/share/alarmd/a.wav
ExecStart=mplayer /usr/local/share/alarmd/a.wav

[ติดตั้ง]
WantedBy=multi-user.target

ฉันเริ่มบริการดังนี้:

sudo systemctl เริ่ม alarmd.service

... และรับผลลัพธ์นี้:

tim@timpc:~$ journalctl -S วันนี้ -u alarmd.service
-- บันทึกเริ่มในวันพุธที่ 2021-08-11 09:41:59 CEST สิ้นสุดในวันอาทิตย์ 2021-12-05 16:28:06 CET --
Dez 05 16:28:06 timpc systemd[1]: กำลังเริ่มบริการ alarmd...
วันที่ 05 16:28:06 timpc mplayer[13082]: MPlayer 1.3.0 (Debian) สร้างด้วย gcc-9 (C) 2000-2016 MPlayer Team
Dez 05 16:28:06 timpc mplayer[13082]: do_connect: ไม่สามารถเชื่อมต่อกับซ็อกเก็ต
Dez 05 16:28:06 timpc mplayer[13082]: เชื่อมต่อ: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว
Dez 05 16:28:06 timpc mplayer[13082]: ไม่สามารถเปิดการสนับสนุน LIRC คุณจะไม่สามารถใช้รีโมทคอนโทรลได้
Dez 05 16:28:06 timpc mplayer[13082]: ไม่ได้กำหนดประเภทเทอร์มินัล `ไม่ทราบ'
วันที่ 05 16:28:06 timpc mplayer[13082]: กำลังเล่น /usr/local/share/alarmd/a.wav.
วันที่ 05 16:28:06 timpc mplayer[13082]: libavformat รุ่น 58.29.100 (ภายนอก)
Dez 05 16:28:06 timpc mplayer[13082]: ตรวจพบรูปแบบไฟล์เสียงเท่านั้น
วันที่ 05 16:28:06 timpc mplayer[13082]: โหลดคำบรรยายใน /usr/local/share/alarmd/
วันที่ 05 16:28:06 timpc mplayer[13082]: ===================================== =====================================
Dez 05 16:28:06 timpc mplayer[13082]: กำลังเปิดตัวถอดรหัสเสียง: [pcm] ตัวถอดรหัสเสียง PCM ที่ไม่มีการบีบอัด
วันที่ 05 16:28:06 timpc mplayer[13082]: AUDIO: 44100 Hz, 2 ch, s16le, 1411.2 kbit/100.00% (อัตราส่วน: 176400->176400)
วันที่ 05 16:28:06 timpc mplayer[13082]: ตัวแปลงสัญญาณเสียงที่เลือก: [pcm] afm: pcm (PCM ที่ไม่บีบอัด)
วันที่ 05 16:28:06 timpc mplayer[13082]: ===================================== =====================================
วันที่ 05 16:28:06 timpc mplayer[13082]: AO: [ชีพจร] Init ล้มเหลว: การเชื่อมต่อถูกปฏิเสธ
วันที่ 05 16:28:06 timpc mplayer[13082]: ไม่สามารถเริ่มต้นไดรเวอร์เสียง 'ชีพจร'
วันที่ 05 16:28:06 timpc mplayer[13082]: [AO_ALSA] alsa-lib: pcm_hw.c:1715:(snd_pcm_hw_open) open '/dev/snd/pcmC0D0p' ล้มเหลว (-2): ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
วันที่ 05 16:28:06 timpc mplayer[13082]: [AO_ALSA] alsa-lib: pcm_dmix.c:1089:(snd_pcm_dmix_open) ไม่สามารถเปิดทาส
วันที่ 05 16:28:06 timpc mplayer[13082]: [AO_ALSA] ข้อผิดพลาดในการเปิดการเล่น: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว
Dez 05 16:28:06 timpc mplayer[13082]: ไม่สามารถเริ่มต้นโปรแกรมควบคุมเสียง 'alsa'
วันที่ 05 16:28:06 timpc mplayer[13082]: [AO SDL] อัตราตัวอย่าง: 44100Hz ช่อง: รูปแบบสเตอริโอ s16le
Dez 05 16:28:06 timpc mplayer[13082]: [AO SDL] โดยใช้ไดรเวอร์เสียง aalib
Dez 05 16:28:06 timpc mplayer[13082]: [AO SDL] ไม่สามารถเปิดเสียงได้: ไม่มีอุปกรณ์เสียงที่ใช้ได้
วันที่ 05 16:28:06 timpc mplayer[13082]: ไม่สามารถเริ่มต้นโปรแกรมควบคุมเสียง 'sdl:aalib'
Dez 05 16:28:06 timpc mplayer[13082]: ไม่สามารถเปิด/เริ่มต้นอุปกรณ์เสียง -> ไม่มีเสียง
Dez 05 16:28:06 timpc mplayer[13082]: เสียง: ไม่มีเสียง
Dez 05 16:28:06 timpc mplayer[13082]: วิดีโอ: ไม่มีวิดีโอ
Dez 05 16:28:06 timpc mplayer[13082]: กำลังออก... (สิ้นสุดไฟล์)
วันที่ 05 16:28:06 timpc systemd[1]: alarmd.service: สำเร็จ
Dez 05 16:28:06 timpc systemd[1]: บริการแจ้งเตือนเสร็จสิ้น

ฉันจะกำหนดบริการเพื่อให้เล่นเสียงได้อย่างไร

คำสั่งนั้นใช้งานได้:

tim@timpc:~$ mplayer /usr/local/share/alarmd/a.wav
MPlayer 1.3.0 (Debian) สร้างด้วย gcc-9 (C) 2000-2016 MPlayer Team
do_connect: ไม่สามารถเชื่อมต่อกับซ็อกเก็ต
เชื่อมต่อ: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว
ไม่สามารถเปิดการสนับสนุน LIRC คุณจะไม่สามารถใช้รีโมทคอนโทรลได้

กำลังเล่น /usr/local/share/alarmd/a.wav
libavformat รุ่น 58.29.100 (ภายนอก)
ตรวจพบรูปแบบไฟล์เสียงเท่านั้น
โหลดคำบรรยายใน /usr/local/share/alarmd/
================================================== ========================
การเปิดตัวถอดรหัสเสียง: [pcm] ตัวถอดรหัสเสียง PCM ที่ไม่บีบอัด
เสียง: 44100 Hz, 2 ch, s16le, 1411.2 kbit/100.00% (อัตราส่วน: 176400->176400)
ตัวแปลงสัญญาณเสียงที่เลือก: [pcm] afm: pcm (PCM ที่ไม่บีบอัด)
================================================== ========================
AO: [พัลส์] 44100Hz 2ch s16le (2 ไบต์ต่อตัวอย่าง)
วิดีโอ: ไม่มีวิดีโอ
กำลังเริ่มเล่น...
A: 9.1 (09.1) จาก 233.0 (03:53.0) 0.0% 


MPlayer ถูกรบกวนโดยสัญญาณ 2 ในโมดูล: play_audio
A: 9.2 (09.1) จาก 233.0 (03:53.0) 0.0% 

กำลังออก... (ออก)
Marc Vanhoomissen avatar
in flag
คุณเพิ่ม `WantedBy=sound.target` ในส่วน `[ติดตั้ง]` ได้ไหม
in flag
'WantedBy=sound.target' ไม่ได้ช่วยอะไร
user10489 avatar
in flag
คุณอาจต้องการกำหนดให้เป็นไฟล์ systemd ของผู้ใช้ในบัญชีของคุณ แทนที่จะเป็นไฟล์ระดับระบบ ดังนั้นมันจึงเริ่มต้นขึ้นหลังจากเซสชันการเข้าสู่ระบบของคุณพร้อมใช้งาน หากคุณต้องการเล่นเสียงเมื่อไม่มีผู้ใช้เข้าสู่ระบบ คำตอบนั้นแตกต่างออกไป
Score:3
ธง in

ใน Ubuntu เวอร์ชันปัจจุบัน โดยทั่วไปเสียงจะถูกจัดการโดยเซิร์ฟเวอร์เสียงแบบพัลส์ หากคุณเรียกใช้เครื่องเล่นเสียงจากเซสชันที่เข้าสู่ระบบ ผู้เล่นจะพบเซิร์ฟเวอร์ผ่านตัวแปรสภาพแวดล้อม XDG_RUNTIME_DIR และ/หรือ PULSE_RUNTIME_PATH. เพื่อให้งานใน systemd (หรือ cron) สามารถค้นหาเซิร์ฟเวอร์ได้ จะต้องมีค่าเหล่านี้

โชคดีที่ค่าเหล่านั้นสามารถคาดเดาได้ผ่านชื่อผู้ใช้ และไม่ควรเปลี่ยนจากการเข้าสู่ระบบครั้งถัดไปหากเป็นผู้ใช้คนเดียวกัน (การตั้งค่า แสดง เป็นการทดลองที่ดี แต่ไม่ใช่ตัวแปรเซสชันที่ถูกต้อง)

ตัวอย่างเช่น หากผู้ใช้ tim เป็นผู้ใช้รายแรกในระบบ uid ของผู้ใช้น่าจะเป็น 1,000 (เช็คอิน /etc/passwd หรือพิมพ์ รหัส หรือตรวจสอบค่าปัจจุบัน) เพิ่มสิ่งต่อไปนี้ลงในไฟล์ systemd ของคุณ: (ไม่แน่ใจว่าหนึ่งในนั้นดีพอหรือถ้าคุณต้องการทั้งสองอย่าง อาจขึ้นอยู่กับเวอร์ชัน)

สภาพแวดล้อม = "XDG_RUNTIME_DIR=/รัน/ผู้ใช้/1000"
สภาพแวดล้อม = "PULSE_RUNTIME_PATH=/run/user/1000/pulse/"

เนื่องจากวิธีนี้ใช้ได้เฉพาะเมื่อคุณเข้าสู่ระบบเท่านั้น ทางเลือกอื่นนอกเหนือจากไฟล์ systemd คือการเริ่มต้นบริการของคุณในสคริปต์ที่เริ่มต้นโดยเป็นส่วนหนึ่งของเซสชัน gnome ของคุณ หากคุณทำเช่นนี้ คุณจะไม่ต้องกังวลเกี่ยวกับตัวแปรเซสชันเลย

in flag
ขอบคุณมาก ๆ!
Score:0
ธง cn

ฉันจะแสดงความคิดเห็น แต่ฉันมีคะแนนชื่อเสียงไม่เพียงพอ ดังนั้นโปรดขอโทษที่ทิ้งลิงก์ไว้โดยไม่มีคำอธิบาย (แม้ว่าจะอธิบายว่าเป็นคำตอบที่ไม่ดีในคู่มือการโพสต์)

ลิงค์นี้อาจช่วยได้ มันอธิบายสิ่งที่คล้ายกันซึ่งเป็นวิธีที่คุณสามารถเริ่มแอพหรือประมวลผลโดยใช้ systemd หากคุณสามารถหาคำสั่งสำหรับเล่นไฟล์เสียงและวางไว้ที่ systemd คุณจะสามารถบรรลุสิ่งที่คุณต้องการได้

ลิงค์คือ ที่นี่ (คำตอบด้านบนจะให้ขั้นตอนที่จำเป็นในการเพิ่มคำสั่งใน systemd)

โปรดทราบว่าการแก้ไข systemd อาจทำให้คอมพิวเตอร์ของคุณไม่สามารถบู๊ตได้หากทำไม่ถูกต้อง ดังนั้นอาจทดสอบวิธีแก้ปัญหานี้ก่อนในเครื่องเสมือน

แก้ไข: คุณสามารถเล่นไฟล์เสียงจาก bash โดยใช้ เหล่านี้ คำสั่ง

in flag
คำสั่งนั้นใช้งานได้ ดูผลลัพธ์ในคำถามของฉัน

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา