GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana PulseAudio dimulai?

Tampaknya proses apa pun yang menautkan ke keluarga libpulse* dari objek bersama - baik sebelum atau setelah menjalankan X dan window manager i3 - mungkin secara implisit autospawn server PulseAudio, di bawah proses pengguna Anda, sebagai produk sampingan dari upaya untuk berinteraksi dengan subsistem audio . Pembuat PulseAudio, Lennart Poettering, tampaknya mengonfirmasi hal ini, dalam email 29-05-2015 ke milis systemd-devel:

"pulseaudio umumnya bukan layanan sistem tetapi layanan pengguna. Kecuali jika sesi pengguna Anda sepenuhnya diubah untuk dikelola oleh systemdtoo (yang tidak mungkin), maka systemd tidak terlibat sama sekali dengan memulainya.

"PA biasanya dimulai dari skrip atau layanan penyiapan sesi. InGnome adalah sesi gnome, misalnya. Ini juga merupakan permintaan otomatis jika perpustakaan digunakan dan perhatikan bahwa itu tidak ada."

Misalnya, pada Debian Stretch (Pengujian), browser web IceWeasel menautkan ke dua objek bersama libpulse*:1) libpulsecommon-7.1.so; dan 2) libpulse.so.0.18.2:

[email protected]:~$ 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
[email protected]:~$ 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 mungkin melihat tautan proses mana yang berjalan ke libpulse*. Misalnya, pertama-tama dapatkan daftar objek bersama libpulse*, lalu jalankan lsof pada masing-masing objek (catatan:ini berasal dari Debian Stretch (Pengujian), jadi keluaran 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 memunculkan PulseAudio secara otomatis, edit ~/.config/Pulse/client.conf dan tambahkan baris

autospawn = no

PulseAudio dan perpustakaannya menghargai pengaturan itu, secara umum.

Penautan libpulse* dengan menjalankan proses juga dapat menunjukkan mengapa PulseAudio muncul kembali dengan sangat cepat. Laman FreeDesktop.org, "Menjalankan PulseAudio", tampaknya mengonfirmasi hal ini:

"...biasanya beberapa aplikasi latar belakang akan segera tersambung kembali, menyebabkan server segera dimulai ulang."

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

INFO TAMBAHAN, UNTUK AUTOSTART GNOME/KDE

Paket PulseAudio (5.0-13), di Debian Jessie (Stabil) amd64, menginstal 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 saat login pengguna. Selanjutnya, skrip mulai otomatis PulseAudio memberi tahu manajer sesi grafis untuk menjalankan skrip mulai PulseAudio yang sesuai:

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

Skrip ini memanggil klien PulseAudio /usr/bin/pactl untuk memuat modul PulseAudio, yang memunculkan server PulseAudio sebagai produk sampingan (catatan:jika Anda menyetel autospawn ke "tidak", pactl menghormatinya dan tidak server PulseAudio autospawn).

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

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


Bagaimana PulseAudio memulai?

Meskipun ini masih merupakan pertanyaan yang valid, jawabannya telah berubah seiring waktu. Jawaban sebelumnya tidak cukup atau salah karena sekarang PulseAudio diluncurkan secara otomatis oleh systemd pengguna, yang pada gilirannya diluncurkan oleh systemd sistem saat pengguna masuk.

$ systemctl --user status pulseaudio
● pulseaudio.service - Sound Service
   Loaded: loaded (/usr/lib/systemd/user/pulseaudio.service; enabled; vendor pre
   Active: active (running) since Tue 2020-03-14 15:29:56 ZULU; 13s ago
 Main PID: 31080 (pulseaudio)
   CGroup: /user.slice/user-1000.slice/[email protected]/pulseaudio.service
           ├─31080 /usr/bin/pulseaudio --daemonize=no
           └─31081 /usr/lib/x86_64-linux-gnu/pulse/gsettings-helper

Untuk mematikan PulseAudio

Untuk menghentikan proses PulseAudio dan tidak segera meluncurkan instance baru, gunakan systemctl --user stop :

$ systemctl --user stop pulseaudio.service pulseaudio.socket

Untuk menonaktifkan PulseAudio

Jika Anda tidak ingin PulseAudio dimulai secara otomatis saat masuk, Anda dapat menonaktifkannya seperti ini:

$ systemctl --user disable pulseaudio.service pulseaudio.socket

(Ngomong-ngomong, meskipun dinonaktifkan, Anda masih dapat memulai PulseAudio saat Anda menginginkannya dengan menggunakan systemctl --user start .)

Menjawab pertanyaan secara umum

Perintah di atas adalah semua yang Anda butuhkan. Namun, jika Anda tertarik untuk mengetahui solusinya sendiri, teruslah membaca.

Untuk mengetahui proses apa yang membuka kartu suara

Gunakan lsof atau fuser -v perintah untuk melihat proses apa yang membuka file perangkat.

$ lsof /dev/snd/*
COMMAND     PID USER      FD   TYPE DEVICE SIZE/OFF  NODE NAME
pulseaudi 32768 hackerb9  3u   CHR  116,5       0t0 15499 /dev/snd/controlC0

Untuk mengetahui proses apa yang meluncurkan PulseAudio

Gunakan pstree -s untuk menunjukkan proses induk seperti:

$ pstree -sp 32768
systemd(1)───systemd(738)───pulseaudio(32768)─┬─gsettings-helpe(32769)─┬─{gsett+
                                              │                        ├─{gsett+
                                              │                        └─{gsett+
                                              └─{pulseaudio}(32773)

Saya menggunakannya untuk melihat bahwa PulseAudio sebenarnya diluncurkan oleh contoh systemd (PID 738) yang berjalan di akun saya sendiri:

$ ps -fp 738
UID        PID  PPID  C STIME TTY          TIME CMD
hackerb9   738     1  0 Feb10 ?        00:00:00 /lib/systemd/systemd --user

Dari sana, mudah ditebak bahwa seseorang perlu menggunakan systemctl --user untuk menghentikannya.


Pulseaudio adalah daemon kecil. man pulseaudio mengatakan Anda dapat mematikannya dengan perintah pulseaudio --kill tetapi melakukan itu membutuhkan kelahiran kembali-- itu muncul kembali dengan sendirinya. Skrip init normal tersedia untuk memulainya saat boot, /etc/rc2.d/S50pulseaudio . Tetapi ketika Anda mencoba mengontrol ini dengan cara normal Linux tidak berfungsi, karena menjalankan /etc/init.d/pulseaudio stop tidak menghentikannya. Menghapus /etc/rc2.d/S50pulseaudio tidak mencegahnya mulai saat boot.

Untuk menghentikan kebiasaan respawning, buka /etc/pulse/client.conf , ubah autospawn = yes ke autospawn = no , dan atur daemon-binary ke /bin/true . Pastikan baris ini tidak diberi komentar, seperti ini:

 autospawn = no
 daemon-binary = /bin/true

Sekarang kita dapat menangani file startup Linux normal. Hapus dulu /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 startup lagi yang harus dibuang:/etc/X11/Xsession.d/70pulseaudio . Ini memulai Pulse saat sesi Gnome dimulai. Hapus atau salin ke direktori lain jika Anda ingin menyimpannya, dan verifikasi lagi nama file yang tepat. Trik yang berguna, saat Anda menemukan skrip yang memulai PulseAudio, adalah mengubah biner yang mereka panggil dari /usr/bin/pulseaudio ke /bin/true . Ini adalah eksekusi kecil yang bagus yang tugasnya hanya "tidak melakukan apa-apa, berhasil". Itu membuat skrip senang, dan itu adalah tempat penampung yang nyaman jika Anda ingin mengubahnya kembali.

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

 $ pulseaudio --kill
 $ pulseaudio --start

Linux
  1. Cara Memulai Belajar Bahasa Pemrograman

  2. Ssh – Bagaimana Tcp-keepalive Bekerja Di Ssh?

  3. Bagaimana rm bekerja? Apa yang rm lakukan?

  1. Bagaimana Cara Kerja Awk ‘!a[$0]++’?

  2. Bagaimana Cara Kerja Sticky Bit?

  3. Bagaimana sebenarnya sig_atomic_t bekerja?

  1. Bagaimana Cara Membuat Output Virtual Di Pulseaudio?

  2. Mengapa Waktu Unix Mulai Pada 1970-01-01?

  3. Bagaimana Cara Kerja Perintah Tee??