Desktop yang telah kita rapikan sampai ke font baru terasa utuh kalau suaranya juga beres: notifikasi terdengar, meeting jernih, dan musik tidak tiba-tiba pindah perangkat. Masalahnya, audio Linux bukan pekerjaan satu program, melainkan tumpukan tiga lapis yang bekerja sama. Chapter ini membedah ketiga lapis tersebut, memperkenalkan PipeWire sebagai server audio masa kini, lalu berlatih memilih perangkat default, mengatur volume, dan menelusuri keluhan “tidak ada suara” secara sistematis.
Tiga Lapis Stack Audio #
Aplikasi seperti Firefox atau Discord tidak pernah bicara langsung ke speaker: masing-masing menyerahkan suaranya ke sebuah server audio, dan server itulah yang mencampur semuanya sebelum menyerahkannya ke kernel. Pemisahan inilah yang membuat beberapa aplikasi bisa bersuara bersamaan dengan volume masing-masing.
| Lapisan | Tugas utama | Contoh |
|---|---|---|
| Aplikasi | memutar dan merekam suara | Firefox, VLC, Discord |
| Server audio | mixing, routing, volume per aplikasi | PipeWire (dahulu PulseAudio) |
| ALSA di kernel | driver perangkat dan akses hardware | snd_hda_intel, perangkat hw:0,0 |
ALSA adalah subsistem audio di dalam kernel: ia memuat driver chipset suara dan menyediakan perangkat tingkat rendah seperti hw:0,0. Tanpa server, biasanya hanya satu aplikasi yang boleh memakai perangkat ALSA pada satu waktu — itulah alasan layer server ada.
PipeWire: Satu Server untuk Semua Peran #
Dulunya desktop memakai PulseAudio untuk mixing sehari-hari, sementara studio musik memakai JACK yang berlatensi rendah tetapi rewel disiapkan. PipeWire menyatukan dua dunia itu dan sekaligus menangani video — termasuk menjadi fondasi berbagi layar di Wayland; Fedora memakainya sejak 2021, Ubuntu sejak 22.10.
Kunci kelancaran migrasinya adalah pipewire-pulse, lapisan kompatibilitas yang menyamar sebagai PulseAudio, sehingga perintah lama seperti pactl dan pavucontrol tetap bekerja tanpa perubahan. Kebijakan sesi — perangkat mana yang default, kapan profil Bluetooth berganti — ditangani manajer sesi WirePlumber. Ikhtisar lengkapnya ada di wiki PipeWire
.
Sink, Source, dan Perangkat Default #
Sink adalah titik keluaran suara (speaker, headset), sedangkan source adalah titik masukan (mikrofon). Perintah wpctl status merangkum keduanya; berikut contoh tampilan tipikalnya, dipotong pada bagian audio:
Audio
├─ Devices:
│
├─ Sinks:
│ * 42. alsa_output.pci-0000_00_1f.3.analog-stereo [available]
│ 55. bluez_output.00_1A_7D_DA_71_13.a2dp-sink [available]
├─ Sink endpoints:
├─ Sources:
│ * 47. alsa_input.pci-0000_00_1f.3.analog-stereo [available]
├─ Source endpoints:
└─ Streams:Bintang menandai perangkat default tempat semua suara baru diarahkan. Memindahkannya satu perintah: wpctl set-default 55 memakai nomor kolom, atau pactl set-default-sink bluez_output.00_1A_7D_DA_71_13.a2dp-sink memakai nama panjang — rinciannya di pactl(1)
. Untuk satu aplikasi yang mengarah ke perangkat lama, tab Playback di pavucontrol bisa mengubah aliran aplikasi itu saja tanpa menyentuh default global.
Konfigurasi Drop-in untuk PipeWire #
PipeWire menyimpan bawaannya di /usr/share/pipewire/ yang sebaiknya tidak disunting langsung; kustomisasi milik user ditulis sebagai fragmen kecil di ~/.config/pipewire/pipewire.conf.d/ — pola drop-in ala systemd dengan angka awal nama sebagai urutan. Kita coba bentuknya:
mkdir -p pipewire.conf.d
cat > pipewire.conf.d/10-latihan.conf <<'EOF'
context.properties = {
default.clock.rate = 48000
default.clock.quantum = 1024
}
EOF
cat pipewire.conf.d/10-latihan.confOutput yang Dihasilkan:
context.properties = {
default.clock.rate = 48000
default.clock.quantum = 1024
}Mari kita bedah isi fragmen tersebut:
- Baris
context.properties = {: membuka tabel properti konteks PipeWire — kumpulan kenop yang dibaca daemon saat dinyalakan. - Baris
default.clock.rate = 48000: sample rate graf audio; 48000 Hz adalah bawaan, dan pemilik koleksi musik 44100 Hz kadang menyamakannya agar tidak ada resampling. - Baris
default.clock.quantum = 1024: ukuran buffer per siklus pemrosesan; angka kecil memangkas latensi tetapi lebih rawan underrun (suara pecah). - Baris
}: menutup blok properti — sintaksnya bergaya dotconf dengan blok bersarang.
Latihan: Meringkas Status Sink #
Data mentah pactl list short sinks berupa baris panjang yang kurang enak dibaca cepat. Skrip cek-audio.sh di bundle chapter ini membaca berkas status bergaya serupa — kolomnya NAMA|KEADAAN|VOLUME|MUTE|DEFAULT — lalu mencetak tabel ringkas beserta peringatannya:
cat > status-audio.txt <<'EOF'
alsa_output.pci-0000_00_1f.3.analog-stereo|RUNNING|65|no|yes
alsa_output.hdmi-stereo|SUSPENDED|0|yes|no
bluez_output.00_1A_7D_DA_71_13.a2dp-sink|IDLE|80|no|no
EOF
bash cek-audio.sh status-audio.txtOutput yang Dihasilkan:
SINK VOL MUTE DEFAULT
alsa_output.pci-0000_00_1f.3.analog-stereo 65% no yes
alsa_output.hdmi-stereo 0% yes no
bluez_output.00_1A_7D_DA_71_13.a2dp-sink 80% no no
ringkasan: 3 sink, 1 bermute/ber-volume nol
saran: periksa mute dan volume sink tersebutTiga sink terpampang jelas: speaker analog sebagai default, sink HDMI yang bermute, dan headset Bluetooth siap pakai. Dua baris akhirnya menyimpulkan masalah — mari kita bedah isi skripnya:
- Baris
berkas=${1:-status-audio.txt}: nama berkas status diambil dari argumen pertama, denganstatus-audio.txtsebagai bawaan. - Blok
if [ ! -f "$berkas" ]: bila berkas tidak ada, skrip menyapa ramah lalu keluar dengan status sukses — bukan menggantung dengan error. - Baris
awk -F'|': memecah tiap baris pada tanda pipa menjadi kolom$1sampai$5. - Blok
{ printf ... }: mencetak tabel rata sambil menaikkan dua penghitung: total sink serta yang bermute/ber-volume nol. - Blok
END: mencetak ringkasan, dan baris saran hanya muncul bila ada yang bermasalah.
Volume dari Terminal dan GUI #
Tiga jalur mengatur volume layak dikenali. Pertama, pactl set-sink-volume @DEFAULT_SINK@ +10% menaikkan volume sink default — @DEFAULT_SINK@ adalah alias perangkat aktif. Kedua, padanannya wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 60%, dengan -l 1.5 membatasi maksimum 150% agar speaker tidak rusak. Ketiga, GUI pavucontrol dan panel Sound di pusat pengaturan menyediakan slider per aplikasi — jalur termudah melihat aplikasi mana yang sedang bersuara.
Perintah lama amixer mengatur volume di sisi ALSA, bukan server, sehingga pada sistem PipeWire ia sering tidak berdampak ke aplikasi modern. Gunakan pactl/wpctl untuk pengaturan harian; amixer cukup sebagai alat diagnosis lapisan kernel.
Bluetooth Audio: A2DP dan HFP #
Headset Bluetooth membawa dua profil yang saling bertukar:
| Profil | Arah suara | Kualitas | Cocok untuk |
|---|---|---|---|
| A2DP | satu arah, playback saja | tinggi, stereo | mendengarkan musik |
| HFP/HSP | dua arah, mikrofon aktif | rendah, telepon | panggilan suara |
WirePlumber biasanya berpindah profil otomatis: begitu aplikasi meminta mikrofon, headset turun ke HFP, lalu naik lagi ke A2DP saat panggilan selesai. Ketika musik tiba-tiba terdengar seperti telepon, pactl set-card-profile memaksa profil secara manual — bahasan lengkapnya ada di panduan headset Bluetooth
, dan perangkatnya kita susuri di Chapter Bluetooth Management
.
Troubleshooting: Tidak Ada Suara #
Keluhan paling sering di forum punya urutan pemeriksaan dari yang termurah ke yang terdalam:
- Mute dan volume — cek
pactl get-sink-mute @DEFAULT_SINK@danpactl get-sink-volume @DEFAULT_SINK@. - Perangkat default — pastikan bintang
wpctl statusberada di sink yang benar, bukan di HDMI yang diam. - Aliran per aplikasi — tab Playback pavucontrol memperlihatkan aplikasi yang mengarah ke perangkat lama.
- Profil kartu — profil yang salah menyembunyikan port speaker;
pactl list cardsmemperlihatkan profil aktifnya. - Server hidup —
systemctl --user status pipewire pipewire-pulse wireplumbermemastikan ketiganya jalan; log dibaca denganjournalctl --user -u pipewire -u wireplumberseperti teknik di Chapter Monitoring Logs .
Urutan itu menutup mayoritas kasus tanpa menyentuh konfigurasi lanjutan. Perangkat berikutnya yang sering bikin pusing punya pola serupa: headset yang sudah pair tetapi menolak tersambung — kita bongkar alur pairing-nya pada Chapter Bluetooth Management .
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
cek-audio.sh
Unduh berkas#!/usr/bin/env bash
# cek-audio.sh -- ringkas status perangkat output (sink) dari berkas status
# Pemakaian: bash cek-audio.sh [berkas-status]
# Format baris: NAMA|KEADAAN|VOLUME|MUTE|DEFAULT (satu sink per baris)
berkas=${1:-status-audio.txt}
if [ ! -f "$berkas" ]; then
echo "lewat: berkas $berkas tidak ditemukan"
exit 0
fi
awk -F'|' '
BEGIN {
printf "%-44s %-5s %-5s %s\n", "SINK", "VOL", "MUTE", "DEFAULT"
}
{
printf "%-44s %-5s %-5s %s\n", $1, $3 "%", $4, $5
total++
if ($4 == "yes" || $3 == 0) bermasalah++
}
END {
print ""
printf "ringkasan: %d sink, %d bermute/ber-volume nol\n", total, bermasalah
if (bermasalah > 0)
print "saran: periksa mute dan volume sink tersebut"
}
' "$berkas"