PulseAudio bắt đầu như thế nào?


15

PulseAudio luôn chạy trên hệ thống của tôi và nó luôn khởi động lại ngay lập tức nếu nó gặp sự cố hoặc tôi giết nó. Tuy nhiên, tôi không bao giờ thực sự bắt đầu PulseAudio.

Tôi đã kiểm tra /etc/init.d//etc/X11/Xsession.d/tôi đã kiểm tra systemctl list-units -avà PulseAudio không tìm thấy ở đâu.

Tại sao PulseAudio dường như tự khởi động một cách kỳ diệu mà không bao giờ tôi chạy nó, và làm thế nào để nó khởi động lại ngay lập tức khi nó chết?

Tôi đang sử dụng Debian 8 (jessie) với xinit và trình quản lý cửa sổ i3 và PulseAudio 5.

Câu trả lời:


13

Dường như bất kỳ quá trình nào liên kết đến họ libpulse * của các đối tượng được chia sẻ - trước hoặc sau khi chạy X và trình quản lý cửa sổ i3 - đều có thể tự động lưu trữ máy chủ PulseAudio, theo quy trình người dùng của bạn, như một sản phẩm phụ của các nỗ lực để giao tiếp với hệ thống con âm thanh . Người tạo ra PulseAudio Lennart Poettering dường như đã xác nhận điều này, trong một email 2015-05-29 đến danh sách gửi thư systemd-devel :

"Pulseaudio nói chung không phải là dịch vụ hệ thống mà là dịch vụ người dùng. Trừ khi phiên người dùng của bạn được chuyển đổi hoàn toàn để được quản lý bởi systemd (điều không thể xảy ra) vì vậy systemd hoàn toàn không liên quan đến việc khởi động nó.

"PA thường được bắt đầu từ tập lệnh hoặc dịch vụ thiết lập phiên. Chẳng hạn, trong Gnome đó là phiên gnome. Nó cũng tự động sinh ra theo yêu cầu nếu các thư viện được sử dụng và lưu ý rằng nó bị thiếu."

Ví dụ: trên Debian Stretch (Kiểm tra), trình duyệt web IceWeasel liên kết với hai đối tượng libpulse * được chia sẻ: 1) libpulsecommon-7.1.so; và 2) libpulse.so.0.18.2:

k@bucket:~$ ps -ef | grep iceweasel
k        17318     1  5 18:58 tty2     00:00:15 iceweasel
k        17498  1879  0 19:03 pts/0    00:00:00 grep iceweasel
k@bucket:~$ sudo pmap 17318 | grep -i pulse
00007fee08377000  65540K rw-s- pulse-shm-2442253193
00007fee0c378000  65540K rw-s- pulse-shm-3156287926
00007fee11d24000    500K r-x-- libpulsecommon-7.1.so
00007fee11da1000   2048K ----- libpulsecommon-7.1.so
00007fee11fa1000      4K r---- libpulsecommon-7.1.so
00007fee11fa2000      8K rw--- libpulsecommon-7.1.so
00007fee121af000    316K r-x-- libpulse.so.0.18.2
00007fee121fe000   2044K ----- libpulse.so.0.18.2
00007fee123fd000      4K r---- libpulse.so.0.18.2
00007fee123fe000      4K rw--- libpulse.so.0.18.2

Bạn có thể thấy các quá trình đang chạy liên kết đến libpulse *. Ví dụ: trước tiên hãy lấy danh sách các đối tượng được chia sẻ libpulse *, sau đó chạy lsof trên mỗi (lưu ý: điều này đến từ Debian Stretch (Kiểm tra), do đó đầu ra của bạn có thể khác nhau):

sudo find / -type f -name "*libpulse*"
*snip*
/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsedsp.so
/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
/usr/lib/x86_64-linux-gnu/libpulse.so.0.18.2
/usr/lib/x86_64-linux-gnu/libpulse-simple.so.0.1.0
/usr/lib/x86_64-linux-gnu/libpulse-mainloop-glib.so.0.0.5
/usr/lib/libpulsecore-7.1.so
/usr/lib/ao/plugins-4/libpulse.so

sudo lsof /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
COMMAND     PID       USER  FD   TYPE DEVICE SIZE/OFF   NODE NAME
gnome-she   864 Debian-gdm mem    REG  252,1   524312 274980 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
gnome-set   965 Debian-gdm mem    REG  252,1   524312 274980 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
gnome-set  1232          k mem    REG  252,1   524312 274980 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
gnome-she  1286          k mem    REG  252,1   524312 274980 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
chrome     2730          k mem    REG  252,1   524312 274980 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
pulseaudi 18356          k mem    REG  252,1   524312 274980 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so

Để yêu cầu các quá trình này không tự động khởi động PulseAudio, hãy chỉnh sửa ~ / .config / Pulse / client.conf và thêm dòng

autospawn = no

Nhìn chung, PulseAudio và các thư viện của nó tôn trọng cài đặt đó.

Liên kết libpulse * bằng cách chạy các quy trình cũng có thể chỉ ra lý do tại sao PulseAudio lại xuất hiện nhanh như vậy. Trang FreeDesktop.org, " Running PulseAudio ", dường như đã xác nhận điều này:

"... thông thường một số ứng dụng nền sẽ ngay lập tức kết nối lại, khiến máy chủ được khởi động lại ngay lập tức."

Dường như bạn cho biết bạn khởi động trình quản lý cửa sổ i3 thông qua bảng điều khiển (bằng cách chạy xinit) và không sử dụng trình quản lý hiển thị hoặc môi trường máy tính để bàn. Phần còn lại của câu trả lời này chi tiết thông tin cho những người sử dụng Gnome, KDE, v.v.

THÔNG TIN BỔ SUNG, CHO TỰ ĐỘNG Gnome / KDE

Gói PulseAudio (5.0-13), trong Debian Jessie (Ổn định) amd64, cài đặt bốn tệp hệ thống sau:

  1. /etc/xdg/autostart/pulseaudio-kde.desktop
  2. /etc/xdg/autostart/pulseaudio.desktop
  3. / usr / bin / start-pulseaudio-x11
  4. / usr / bin / start-pulseaudio-kde

Một số trình quản lý phiên đồ họa tự động chạy các kịch bản tự khởi động FreeDesktop.org khi đăng nhập người dùng. Lần lượt, tập lệnh tự khởi động PulseAudio sẽ cho các nhà quản lý phiên đồ họa chạy tập lệnh khởi động PulseAudio thích hợp:

/usr/bin/start-pulseaudio-x11
/usr/bin/start-pulseaudio-kde

Những kịch bản gọi PulseAudio client / usr / bin / pactl để nạp module PulseAudio, mà bầy server PulseAudio như một sản phẩm phụ (lưu ý: nếu bạn có bộ autospawn để "không", khía cạnh pactl đó và sẽ không autospawn máy chủ PulseAudio).

Chi tiết hơn, tại trang FreeDesktop.org " Chạy PulseAudio ".

Một số trình quản lý hiển thị, ngoài ra và trong các bản phân phối khác, có thể khởi động PulseAudio (ví dụ: SDDM, trên ArchLinux . Mặc dù hiện tại các nhà bảo trì có thể đã giải quyết vấn đề này).


4

Pulseaudio là một daemon nhỏ. man pulseaudionói rằng bạn có thể tắt nó bằng lệnh pulseaudio --killnhưng làm điều đó sẽ tái sinh một lần nữa-- nó tự hồi sinh. Một tập lệnh init bình thường có sẵn để khởi động nó /etc/rc2.d/S50pulseaudio. Nhưng khi bạn thử điều khiển Linux theo cách thông thường thì nó không hoạt động, vì chạy /etc/init.d/pulseaudio stopkhông dừng được. Loại bỏ /etc/rc2.d/S50pulseaudiokhông ngăn chặn nó bắt đầu lúc khởi động.

Để ngăn chặn thói quen của nó respawning, mở /etc/pulse/client.conf, thay đổi autospawn = yesđến autospawn = no, và thiết lập daemon-nhị phân để /bin/true. Hãy chắc chắn rằng những dòng này không bị thiếu, như thế này:

 autospawn = no
 daemon-binary = /bin/true

Bây giờ chúng ta có thể đối phó với các tệp khởi động Linux bình thường. Đầu tiên xóa /etc/rc2.d/S50pulseaudio. Hoặc bạn có thể đổi tên nó thành lệnh kill, nó sẽ giữ liên kết trong trường hợp bạn muốn nó một lần nữa:

$ mv /etc/rc2.d/S50pulseaudio /etc/rc2.d/K50pulseaudio

HOẶC LÀ

Có thể có thêm một tệp khởi động để phân phối với : /etc/X11/Xsession.d/70pulseaudio. Điều này bắt đầu Pulse khi một phiên Gnome bắt đầu. Xóa nó hoặc sao chép nó vào một thư mục khác trong trường hợp bạn muốn lưu nó và một lần nữa xác minh tên tệp chính xác. Một thủ thuật hữu ích, khi bạn tìm thấy kịch bản mà bắt đầu PulseAudio, là thay đổi nhị phân mà họ gọi là từ /usr/bin/pulseaudiođể /bin/true. Đây là một thực thi nhỏ tốt đẹp mà công việc duy nhất của họ là "không làm gì, thành công". Nó giữ cho các tập lệnh hài lòng và đó là một trình giữ chỗ thuận tiện nếu bạn muốn thay đổi lại tập lệnh.

Bây giờ bạn đã thanh lọc tất cả các tập lệnh khởi động và hồi sinh, Bây giờ sử dụng các lệnh dưới đây để dừng và bắt đầu âm thanh xung.

 $ pulseaudio --kill
 $ pulseaudio --start

1
Nó giúp một chút, nhưng nó không thực sự trả lời câu hỏi nào cả. Tôi vẫn không biết làm thế nào / ở đâu / tại sao PulseAudio ban đầu khởi chạy trên hệ thống của tôi. Debian 8 sử dụng systemd và như tôi đã nói systemctl list-units -akhông bao gồm PulseAudio. xinit khởi chạy các tập lệnh từ /etc/X11/Xsession.dvà như đã đề cập, nó cũng không bao gồm PulseAudio.
Hubro

quá trình cha mẹ cho quá trình pulseaudio của bạn là gì?
Do đó,

1
Văn bản của câu trả lời này dường như đến từ một bài viết năm 2010, bởi Carla Schroder: linuxplanet.com/linuxplanet/tutorials/7130/2 . Các hướng dẫn dường như không còn áp dụng cho Debian Jessie và PulseAudio (5.0-13).
iokevins

0

Câu trả lời được đưa ra bởi Doeshi / Carla Schroder (xem câu trả lời tiếp theo) vẫn hoạt động tốt sau khi nâng cấp từ debian wheezy lên jessie. Tôi đã gặp lỗi sau khi nghiên cứu các thông báo khởi động của mình (lỗi được liệt kê ở dòng cuối cùng).

root@voylinx:/etc#journalctl -b | grep pulseaudio
Dez 31 16:19:46 voylinx rtkit-daemon[1507]: Successfully made thread 1506 of process 1506 (/usr/bin/pulseaudio) owned by '1000' high priority at nice level -11.
Dez 31 16:19:49 voylinx rtkit-daemon[1507]: Successfully made thread 1526 of process 1506 (/usr/bin/pulseaudio) owned by '1000' RT at priority 5.
Dez 31 16:19:49 voylinx rtkit-daemon[1507]: Successfully made thread 1527 of process 1506 (/usr/bin/pulseaudio) owned by '1000' RT at priority 5.
Dez 31 16:19:49 voylinx rtkit-daemon[1507]: Successfully made thread 1528 of process 1506 (/usr/bin/pulseaudio) owned by '1000' RT at priority 5.
Dez 31 16:19:49 voylinx rtkit-daemon[1507]: Successfully made thread 1533 of process 1506 (/usr/bin/pulseaudio) owned by '1000' RT at priority 5.
Dez 31 16:19:50 voylinx rtkit-daemon[1507]: Successfully made thread 1548 of process 1548 (/usr/bin/pulseaudio) owned by '1000' high priority at nice level -11.
Dez 31 16:19:50 voylinx pulseaudio[1548]: [pulseaudio] pid.c: Daemon already running.

pulseaudio-daemon đã được bắt đầu hai lần. Một lần bởi rtkit-daemon và những lần khác bởi Gnome / KDE AUTOSTART hoặc một ứng dụng khác. Dù sao, cài đặt trong /etc/pulse/client.conf

autospawn = no
daemon-binary = /bin/true

giải quyết vấn đề của tôi Điều duy nhất tôi không thể xác nhận là không còn bất kỳ tập lệnh khởi động nào trong bất kỳ thư mục /etc/rcX.d nào. Khá rõ ràng vì rtkit-daemon thực hiện công việc với sự tương tác của systemd.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.