Điểm:3

Làm cách nào để phát âm thanh từ dịch vụ systemd trên Ubuntu?

lá cờ in

Tôi cố gắng phát âm thanh từ một dịch vụ trên Ubuntu:

tim@timpc:~$ uname -a Linux timpc 5.4.0-91-generic #102-Ubuntu SMP Fri 5 tháng 11 16:31:28 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

Đây là định nghĩa dịch vụ:

tim@timpc:~$ cat /etc/systemd/system/alarmd.service
# Ngày tháng /etc/systemd/system/alarmd.service
[Đơn vị]
Mô tả=dịch vụ báo động
Muốn=sound.target
Sau = sound.mục tiêu

[Dịch vụ]
Loại=oneshot
Môi trường="HIỂN THỊ=:0"
Người dùng = tim
;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

[Cài đặt]
WantedBy=multi-user.target

Tôi bắt đầu dịch vụ như thế này:

Sudo systemctl start alarmd.service

... và nhận kết quả này:

tim@timpc:~$ journalctl -S hôm nay -u alarmd.service
-- Nhật ký bắt đầu vào Thứ Tư 2021-08-11 09:41:59 CEST, kết thúc vào Chủ Nhật 2021-12-05 16:28:06 CET. --
Dez 05 16:28:06 timpc systemd[1]: Bắt đầu dịch vụ báo động...
Dez 05 16:28:06 timpc mplayer[13082]: MPlayer 1.3.0 (Debian), được xây dựng với gcc-9 (C) 2000-2016 Nhóm MPlayer
Dez 05 16:28:06 timpc mplayer[13082]: do_connect: không thể kết nối với ổ cắm
Dez 05 16:28:06 timpc mplayer[13082]: connect: Không có tệp hoặc thư mục như vậy
Dez 05 16:28:06 timpc mplayer[13082]: Không thể mở hỗ trợ LIRC. Bạn sẽ không thể sử dụng điều khiển từ xa.
Dez 05 16:28:06 timpc mplayer[13082]: Loại thiết bị đầu cuối `không xác định' không được xác định.
Dez 05 16:28:06 timpc mplayer[13082]: Đang phát /usr/local/share/alarmd/a.wav.
Dez 05 16:28:06 timpc mplayer[13082]: libavformat phiên bản 58.29.100 (bên ngoài)
Dez 05 16:28:06 timpc mplayer[13082]: Đã phát hiện định dạng tệp chỉ có âm thanh.
Dez 05 16:28:06 timpc mplayer[13082]: Tải phụ đề trong /usr/local/share/alarmd/
Dez 05 16:28:06 timpc mplayer[13082]: ================================================== ==================================================
Dez 05 16:28:06 timpc mplayer[13082]: Mở bộ giải mã âm thanh: [pcm] Bộ giải mã âm thanh PCM không nén
Dez 05 16:28:06 timpc mplayer[13082]: ÂM THANH: 44100 Hz, 2 kênh, s16le, 1411,2 kbit/100,00% (tỷ lệ: 176400->176400)
Dez 05 16:28:06 timpc mplayer[13082]: Codec âm thanh đã chọn: [pcm] afm: pcm (PCM không nén)
Dez 05 16:28:06 timpc mplayer[13082]: ================================================= ==================================================
Dez 05 16:28:06 timpc mplayer[13082]: AO: [pulse] Khởi tạo không thành công: Kết nối bị từ chối
Dez 05 16:28:06 timpc mplayer[13082]: Không thể khởi tạo trình điều khiển âm thanh 'xung'
Dez 05 16:28:06 timpc mplayer[13082]: [AO_ALSA] alsa-lib: pcm_hw.c:1715:(snd_pcm_hw_open) open '/dev/snd/pcmC0D0p' không thành công (-2): Không có tệp hoặc thư mục như vậy
Dez 05 16:28:06 timpc mplayer[13082]: [AO_ALSA] alsa-lib: pcm_dmix.c:1089:(snd_pcm_dmix_open) không thể mở nô lệ
Dez 05 16:28:06 timpc mplayer[13082]: [AO_ALSA] Lỗi mở phát lại: Không có tệp hoặc thư mục như vậy
Dez 05 16:28:06 timpc mplayer[13082]: Không thể khởi tạo trình điều khiển âm thanh 'alsa'
Dez 05 16:28:06 timpc mplayer[13082]: [AO SDL] Tốc độ lấy mẫu: 44100Hz Kênh: Định dạng âm thanh nổi s16le
Dez 05 16:28:06 timpc mplayer[13082]: [AO SDL] sử dụng trình điều khiển âm thanh aalib.
Dez 05 16:28:06 timpc mplayer[13082]: [AO SDL] Không thể mở âm thanh: Không có thiết bị âm thanh
Dez 05 16:28:06 timpc mplayer[13082]: Không thể khởi chạy trình điều khiển âm thanh 'sdl:aalib'
Dez 05 16:28:06 timpc mplayer[13082]: Không thể mở/khởi tạo thiết bị âm thanh -> không có âm thanh.
Dez 05 16:28:06 timpc mplayer[13082]: Âm thanh: không có âm thanh
Dez 05 16:28:06 timpc mplayer[13082]: Video: không có video
Dez 05 16:28:06 timpc mplayer[13082]: Đang thoát... (Cuối tệp)
Dez 05 16:28:06 timpc systemd[1]: alarmd.service: Đã thành công.
Dez 05 16:28:06 timpc systemd[1]: Đã hoàn thành dịch vụ báo động.

Tôi nên xác định dịch vụ như thế nào để âm thanh được phát?

Bản thân lệnh hoạt động:

tim@timpc:~$ mplayer /usr/local/share/alarmd/a.wav
MPlayer 1.3.0 (Debian), được xây dựng với gcc-9 (C) 2000-2016 Nhóm MPlayer
do_connect: không thể kết nối với ổ cắm
kết nối: Không có tệp hoặc thư mục như vậy
Không thể mở hỗ trợ LIRC. Bạn sẽ không thể sử dụng điều khiển từ xa.

Đang phát /usr/local/share/alarmd/a.wav.
libavformat phiên bản 58.29.100 (bên ngoài)
Đã phát hiện định dạng tệp chỉ có âm thanh.
Tải phụ đề trong /usr/local/share/alarmd/
================================================================= =========================
Mở bộ giải mã âm thanh: [pcm] Bộ giải mã âm thanh PCM không nén
ÂM THANH: 44100 Hz, 2 kênh, s16le, 1411,2 kbit/100,00% (tỷ lệ: 176400->176400)
Bộ giải mã âm thanh đã chọn: [pcm] afm: pcm (PCM không nén)
================================================================= =========================
AO: [xung] 44100Hz 2ch s16le (2 byte mỗi mẫu)
Video: không có video
Đang bắt đầu phát lại...
Đáp: 9,1 (09,1) trên 233,0 (03:53,0) 0,0% 


MPlayer bị gián đoạn bởi tín hiệu 2 trong mô-đun: play_audio
Đáp: 9,2 (09,1) trên 233,0 (03:53,0) 0,0% 

Thoát... (Thoát)
Marc Vanhoomissen avatar
lá cờ in
Bạn có thể thêm `WantedBy=sound.target` vào phần `[Install]` không?
lá cờ in
Rất tiếc, 'WantedBy=sound.target' không giúp được gì
user10489 avatar
lá cờ in
Bạn có thể muốn biến tệp này thành tệp systemd người dùng trong tài khoản của mình thay vì tệp cấp hệ thống, để tệp bắt đầu sau khi phiên đăng nhập của bạn khả dụng. Nếu bạn muốn phát âm thanh khi không có người dùng nào đăng nhập, câu trả lời là khác.
Điểm:3
lá cờ in

Trong các phiên bản hiện tại của Ubuntu, thông thường âm thanh được xử lý bởi máy chủ âm thanh Pulse. Nếu bạn chạy trình phát âm thanh từ phiên đăng nhập của mình, thì trình phát sẽ tìm thấy máy chủ thông qua các biến môi trường XDG_RUNTIME_DIR và/hoặc PULSE_RUNTIME_PATH. Đối với một công việc trong systemd (hoặc cron) để có thể tìm thấy máy chủ, nó sẽ cần những giá trị này.

May mắn thay, những giá trị đó có thể dự đoán được thông qua tên người dùng và không nên thay đổi từ lần đăng nhập này sang lần đăng nhập tiếp theo nếu đó là cùng một người dùng. (Cài đặt TRƯNG BÀY là một thử nghiệm tốt, nhưng không phải là biến phiên phù hợp.)

Ví dụ: nếu người dùng tim là người dùng đầu tiên trên hệ thống, uid của người dùng có thể là 1000 (đăng ký /etc/passwd hoặc nhập Tôi hoặc kiểm tra các giá trị hiện tại.) Thêm vào tệp systemd của bạn như sau: (Không chắc liệu một trong số này có đủ tốt hay nếu bạn cần cả hai, nó có thể phụ thuộc vào phiên bản.)

Môi trường="XDG_RUNTIME_DIR=/run/user/1000"
Môi trường="PULSE_RUNTIME_PATH=/run/user/1000/Pulse/"

Vì điều này chỉ hoạt động khi bạn đã đăng nhập, nên một giải pháp thay thế cho tệp systemd sẽ là bắt đầu dịch vụ của bạn trong một tập lệnh được bắt đầu như một phần của phiên gnome của bạn. Nếu bạn đã làm điều này, bạn sẽ không cần phải lo lắng về các biến phiên.

lá cờ in
Cám ơn rất nhiều!
Điểm:0
lá cờ cn

Tôi sẽ bình luận điều này nhưng tôi không có đủ điểm danh tiếng, vì vậy xin thứ lỗi cho tôi vì đã để lại một liên kết mà không có bất kỳ lời giải thích nào (mặc dù điều này được mô tả là một câu trả lời tồi trong hướng dẫn đăng bài).

Liên kết này có thể giúp đỡ. Nó giải thích điều gì đó tương tự, đó là cách bạn có thể khởi động ứng dụng hoặc quy trình bằng systemd. nếu bạn có thể tìm thấy lệnh phát tệp âm thanh và đặt nó vào systemd, bạn sẽ có thể đạt được điều mình muốn.

liên kết là đây (câu trả lời hàng đầu sẽ cung cấp các bước cần thiết để thêm lệnh vào systemd)

Hãy nhớ rằng việc chỉnh sửa systemd có thể khiến máy tính của bạn không khởi động được nếu thực hiện không đúng cách, vì vậy có thể thử nghiệm giải pháp này trước trong một máy ảo.

CHỈNH SỬA: Bạn có thể phát các tệp âm thanh từ bash bằng cách sử dụng này mệnh lệnh.

lá cờ in
lệnh tự nó hoạt động. Xem đầu ra trong câu hỏi của tôi.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.