Bagaimana cara memulai PulseAudio?

16

PulseAudio selalu berjalan di sistem saya, dan selalu langsung restart jika crash atau saya membunuhnya. Namun, saya tidak pernah memulai PulseAudio.

Saya telah memeriksa /etc/init.d/dan /etc/X11/Xsession.d/, dan saya telah memeriksa systemctl list-units -a, dan PulseAudio tidak ditemukan.

Bagaimana mungkin PulseAudio secara ajaib dimulai dengan sendirinya tanpa saya menjalankannya, dan bagaimana ia langsung memulai kembali ketika mati?

Saya menggunakan Debian 8 (jessie) dengan xinit dan window manager i3, dan PulseAudio 5.

Hubro
sumber

Jawaban:

14

Tampaknya proses apa pun yang menghubungkan ke keluarga libpulse * dari objek yang dibagikan - baik sebelum atau setelah menjalankan X dan i3 window manager - dapat secara implisit autospawn server PulseAudio, dalam proses pengguna Anda, sebagai produk sampingan dari upaya untuk berinteraksi dengan subsistem audio . Pencipta PulseAudio Lennart Poettering tampaknya mengkonfirmasi ini, dalam email 2015-05-29 ke mailing list systemd-devel :

"pulseaudio umumnya bukan layanan sistem tetapi layanan pengguna. Kecuali sesi pengguna Anda sepenuhnya dikonversi untuk dikelola oleh systemd juga (yang tidak mungkin) systemd karenanya tidak terlibat sama sekali dengan memulainya.

"PA biasanya dimulai dari skrip penyetelan sesi atau layanan. Di Gnome itu gnome-sesi, misalnya. Ini juga permintaan otomatis jika perpustakaan digunakan dan perhatikan bahwa itu hilang."

Misalnya, pada Debian Stretch (Pengujian), browser web IceWeasel menautkan ke dua objek libpulse * yang dibagikan: 1) libpulsecommon-7.1.so; dan 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

Anda dapat melihat proses yang sedang berjalan mana tautan ke libpulse *. Sebagai contoh, pertama-tama dapatkan daftar objek yang dibagikan libpulse *, kemudian jalankan lsof di masing-masing (catatan: ini berasal dari Debian Stretch (Pengujian), sehingga output Anda mungkin berbeda):

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

Untuk memberi tahu proses ini agar tidak otomatis Pulsa Audio, edit ~ / .config / pulsa / client.conf dan tambahkan baris

autospawn = no

PulseAudio dan perpustakaannya menghormati pengaturan itu, secara umum.

Libpulse * menghubungkan dengan menjalankan proses juga dapat menunjukkan mengapa PulseAudio respawn dengan begitu cepat. Halaman FreeDesktop.org, " Running PulseAudio ", tampaknya mengkonfirmasi ini:

"... biasanya beberapa aplikasi latar belakang akan segera terhubung kembali, menyebabkan server segera restart."

Anda tampaknya mengindikasikan bahwa Anda memulai manajer jendela i3 melalui konsol (dengan menjalankan xinit) dan tidak menggunakan manajer tampilan atau lingkungan desktop. Sisa dari jawaban ini merinci info untuk mereka yang menggunakan GNOME, KDE, dan sebagainya.

INFO TAMBAHAN, UNTUK AUTOMEART GNOME / KDE

Package PulseAudio (5.0-13), di Debian Jessie (Stable) amd64, instal empat file sistem berikut :

  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

Beberapa manajer sesi grafis secara otomatis menjalankan skrip autostart FreeDesktop.org pada login pengguna. Script autostart PulseAudio, pada gilirannya, memberi tahu manajer sesi grafis untuk menjalankan skrip startup PulseAudio yang sesuai:

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

Skrip-skrip ini memanggil klien PulseAudio / usr / bin / pactl untuk memuat modul PulseAudio, yang memunculkan server PulseAudio sebagai produk sampingan (catatan: jika Anda memiliki autospawn yang diatur ke "tidak", pactl menghargai itu dan tidak akan melakukan sendiri server PulseAudio).

Lebih detail, di halaman FreeDesktop.org " Running PulseAudio ".

Beberapa manajer tampilan, sebagai tambahan dan distribusi lainnya, dapat memulai PulseAudio (misalnya, SDDM, di ArchLinux . Meskipun pengelola mungkin telah menyelesaikan ini, sekarang).

iokevins
sumber
4

Pulseaudio adalah daemon kecil. man pulseaudiomengatakan Anda dapat mematikannya dengan perintah pulseaudio --killtetapi melakukan itu membutuhkan kelahiran kembali lagi - itu akan muncul kembali dengan sendirinya. Ada skrip init normal untuk memulainya saat boot /etc/rc2.d/S50pulseaudio,. Tetapi ketika Anda mencoba mengendalikan ini dengan cara Linux normal itu tidak bekerja, karena menjalankannya /etc/init.d/pulseaudio stoptidak menghentikannya. Menghapus /etc/rc2.d/S50pulseaudiotidak mencegahnya mulai saat boot.

Untuk menghentikan kebiasaan respawning-nya, buka /etc/pulse/client.conf, ubah autospawn = yeske autospawn = no, dan set daemon-binary menjadi /bin/true. Pastikan baris ini tidak diomortasikan, seperti ini:

 autospawn = no
 daemon-binary = /bin/true

Sekarang kita dapat menangani file startup Linux normal. Hapus pertama /etc/rc2.d/S50pulseaudio. Atau Anda dapat mengganti namanya menjadi perintah kill, yang mempertahankan tautan jika Anda menginginkannya lagi:

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

ATAU

Mungkin ada satu file lebih startup untuk membuang: /etc/X11/Xsession.d/70pulseaudio. Ini memulai Pulsa ketika sesi Gnome dimulai. Hapus atau salin ke direktori lain jika Anda ingin menyimpannya, dan sekali lagi verifikasi nama file yang tepat. Sebuah trik yang berguna, ketika Anda menemukan script yang mulai PulseAudio, adalah untuk mengubah biner yang mereka sebut dari /usr/bin/pulseaudioke /bin/true. Ini adalah executable kecil yang bagus yang tugasnya hanya "tidak melakukan apa-apa, berhasil". Itu membuat script senang, dan itu adalah penampung yang nyaman jika Anda ingin mengubahnya kembali.

Sekarang Anda telah membersihkan semua skrip startup dan respawning, Sekarang gunakan perintah di bawah ini untuk menghentikan dan memulai audio pulsa.

 $ pulseaudio --kill
 $ pulseaudio --start
Thushi
sumber
1
Ini sedikit membantu, tetapi sama sekali tidak menjawab pertanyaan. Saya masih tidak tahu bagaimana / di mana / mengapa PulseAudio pada awalnya diluncurkan pada sistem saya. Debian 8 menggunakan systemd, dan seperti yang saya katakan systemctl list-units -atidak termasuk PulseAudio. xinit meluncurkan skrip dari /etc/X11/Xsession.ddan seperti yang disebutkan, itu tidak termasuk PulseAudio juga.
Hubro
apa proses induk untuk proses pulseaudio Anda?
Thushi
1
Teks jawaban ini tampaknya berasal dari artikel 2010, oleh Carla Schroder: linuxplanet.com/linuxplanet/tutorials/7130/2 . Instruksi tampaknya tidak lagi berlaku untuk Debian Jessie dan PulseAudio (5.0-13).
iokevins
0

Jawaban yang diberikan oleh Thushi / Carla Schroder (lihat jawaban berikutnya) masih berfungsi dengan baik setelah peningkatan dari debian wheezy ke jessie. Saya mendapat kesalahan berikut setelah meneliti pesan-pesan boot saya (kesalahan terdaftar di baris terakhir).

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 dimulai dua kali. Sekali oleh rtkit-daemon dan waktu lainnya oleh GNOME / KDE AUTOSTART atau aplikasi lain. Pokoknya mengatur di /etc/pulse/client.conf

autospawn = no
daemon-binary = /bin/true

memecahkan masalah saya. Satu-satunya hal yang saya tidak bisa konfirmasi adalah tidak ada lagi skrip startup di direktori /etc/rcX.d. Cukup jelas karena rtkit-daemon melakukan pekerjaan dengan interaksi systemd.

FalkH
sumber