ปัญหาที่ผู้ใช้ Ubuntu พบบ่อยหลังติดตั้ง Ubuntu หรืออัปเกรดเวอร์ชันใหม่ คือ ปัญหาเสียง หรือเฉพาะเจาะจง "no-sound" เกิดจากหลายเหตุผล บางครั้งเกี่ยวกับ misconfiguration ใน speaker settings หรือ hardware ไม่ได้รับการ support ดี
สำหรับคนส่วนใหญ่ มักเป็นปัญหาง่ายที่แก้ได้ เพราะส่วนใหญ่มาจาก issue กับ services ที่รันบนระบบ บทความนี้ผ่าน fixes ง่ายๆ ที่ลองได้ ไม่จำเป็นลองทั้งหมด เริ่มจากบนสุดรายการลงมา
ติดตั้ง Volume Control สำหรับ PulseAudio
PulseAudio เป็น default sound service สำหรับ Ubuntu และอื่นๆ Open source และน่าเชื่อถือ ทำงานกับ ALSA และ OSS drivers ให้แน่ใจว่าสัญญาณเสียงที่ระบบสร้าง ส่งไปยังสเปกเกอร์
แตแอปพลิเคชันและ desktop environments มาพร้อม volume controls ของ PulseAudio เอง ไม่ได้ granular และไม่ให้ควบคุม playback streams แต่ละอัน Pavucontrol ให้ control มากกว่าบน audio devices แต่ละตัวบน PC เล่นกับ sliders ให้แน่ใจว่า speaker หรือ headphone volume ตั้งค่าที่ควร
ติดตั้ง pavucontrol เปิด Terminal ใส่คำสั่ง:
pulseaudio --start sudo apt install pavucontrol
หลังจากนั้น รัน pavucontrol จาก terminal หรือหา "PulseAudio Volume Control" ใน launch menu ของ desktop environment ไปที่ tab "Output Devices" ตรวจสอบว่า default speakers ถูกเลือก
ตรวจสอบ Speaker Settings
เวลาเจอปัญหาเสียงบน Ubuntu ต้องเช็ค headphones และ speakers ก่อน สำหรับปัญหา connection อาจเป็น audio cable เสียบ port ผิด หรือไม่ได้เสียบเลย
ถ้าใช้ Bluetooth device เช็คว่า paired ถูกต้อง อย่าลืมดู volume controls ของอุปกรณ์ ให้อยู่ที่ระดับที่ยอมรับได้ ควร verify ว่า output volume ไม่ได้ mute บนคอมพิวเตอร์ และ output device ที่ถูกต้องถูกเลือก
ตรวจสอบ ALSA Mixer
ใต้ฝาครอบ PulseAudio ใช้ ALSA kernel module ที่ควบคุม sound devices โดยตรง ถ้าต้องการ control ALSA-level volume แบบละเอียด ตามขั้นตอน:
- เปิด terminal
- พิมพ์
alsamixerกด Enter จะเห็น output ใน terminal
- เลือก sound card ที่ถูกต้อง กด F6 สำหรับผม defaults ใช้ได้ แตลอง options อื่นถ้าไม่ได้
- ใช้ left arrow และ right arrow เลือก volume control item ที่เลือกแสดงสีแดงด้านล่าง
- ใช้ up arrow และ down arrow เพิ่ม/ลด volume levels สำหรับแต่ละ control
- ตอน mixer control ถูก mute "MM" จะปรากฏใต้ volume bar สังเกต: bar อาจเต็ม 100% แต่ยัง muted อยู่ เช็คให้ดี Unmute control ด้วยการกด m จะเปลี่ยน "MM" เป็น "OO"
- ออกจาก alsamixer กด Esc
หมายเหตุ: เวลา mute/unmute control pulseaudio อาจจับมันและ mute/unmute controls อื่นด้วย ต้อง confirm ว่า relevant controls และ master control unmute ก่อนออก
Reload ALSA
อีกวิธีถ้าปัญหาเสียงยังคงอยู่ คือ reload ALSA ด้วยคำสั่งใน terminal:
sudo alsa force-reload
Output 长这样:
เสร็จแล้ว ถ้ายังมีปัญหาเสียง ลอง
pulseaudio -k && pulseaudio -D
อาจมีปัญหาหลัง reload ALSA ถ้า pulseaudio ไม่ register ว่า modules ถูก reload แล้ว
ถ้ายังไม่ได้ audio ลอง one-shot ALSA command โดยตรง:
alsactl restore
ติดตั้ง ALSA และ PulseAudio ใหม่
ถ้าวิธีข้างบนไม่แก้ปัญหา ลอง reinstall ALSA และ PulseAudio เปิด terminal ใส่คำสั่ง:
sudo apt remove --purge alsa-base pulseaudio sudo apt install alsa-base pulseaudio
Reload ALSA อีกครั้ง และ reboot คอมพิวเตอร์
Advanced Troubleshooting
Troubleshoot audio อย่างถูกต้องหลังลองหมดแล้ว ต้องลงมือทำลึกลงไป advanced troubleshooting:
Output ของคุณอาจ Trigger ALSA แต่ไม่ใช่ PulseAudio
ที่จริง ถ้า PulseAudio mute output ไม่สำคัญว่า ALSA พูดอะไร เสียงออกไปยังอุปกรณ์จะผ่าน ALSA แต่ไม่ได้ served ให้พวกเขาผ่าน PulseAudio
เพื่อแก้ บังคับ ALSA พูดกับ PulseAudio เวลา master volume เปลี่ยน เพื่อให้ PulseAudio ตามไปด้วย
amixer -D pulse sset Master toggle
Devices ที่ volume โต้ตอบได้แค่ ALSA ด้วยเหตุผลแปลกๆ จะโต้ตอบกับ PulseAudio ด้วย
แน่ใจไหมว่าไม่ใช่แค่แอปพลิเคชันเดียว?
Application ที่ทำงานผิดปกติ อาจทำปัญหามากกว่าคิด ในแบบที่ทำให้ประหลาด อาจเป็นแอปที่คุณไม่ได้เปิด!
ดูทุกอย่างที่ใช้ audio control พิมพ์:
pacmd list-sink-inputs
อยาก surgical มากกว่านั้น พิมพ์:
pacmd list-sink-inputs | grep application.name
ในกรณีของผม ตามรูป Firefox คือสิ่งเดียวที่กำลังฟัง ถ้าใช้ grep narrow output ใน terminal ใช้คำสั่งเดิมอีกครั้ง สังเกต values "muted:", "index:" และ "volume:"
อาจมี volume ในแอป แต่มัน muted หรือ volume เป็นศูนย์!
แก้ muted application พิมพ์ (แทนที่ application_index ด้วย index number จาก "index:"):
pacmd set-sink-input-mute application_index false
แก้ applications ที่ volume ต่ำผิดปกติ พิมพ์:
pacmd set-sink-input-volume application_index 0x10000
No Audio เมื่อ Resume หลัง Suspend/Sleep
บางครั้ง PulseAudio ไม่อยาก wake up กับคอมพิวเตอร์ ในกรณีนี้ รัน
pasuspender /bin/true
ดึง audio กลับจากตาย แต่别太开心 ไม่รอด reboot หรือ suspend/sleep อีก ตาม mini-guide นี้ให้ระมัดระวัง เพื่อแก้ปัญหาตลอดกาล:
- ใน terminal พิมพ์
sudo touch /etc/systemd/system/pulseaudio-sleep-fix@.service
สร้าง systemd service manager file
- เปิดไฟล์แก้ไข:
sudo nano /etc/systemd/system/pulseaudio-sleep-fix.service
Paste (Ctrl + Shift + V สำหรับ terminal paste) นี้เข้าไป:
[Unit] Description=Fix PulseAudio after resume from suspend After=suspend.target [Service] User=%I Type=oneshot Environment="XDG_RUNTIME_DIR=/run/user/%U" ExecStart=/usr/bin/pasuspender /bin/true [Install] WantedBy=suspend.target
- กด Ctrl + X ออก และ Y ใน prompt ถามว่าจะ save modified buffer ไหม
- พิมพ์คำสั่ง register เป็น systemd service
sudo systemctl enable pulseaudio-sleep-fix@your_username.service
จำได้ว่าแทนที่ your_username ด้วยค่าที่เหมาะสม
คุณรัน Timidity อยู่ไหม?
ถ้ารัน timidity package ใน Ubuntu (เช็คด้วย apt search timidity ดู [installed] ท้าย entry ที่เหมาะสม) อาจมีปัญหารัน PulseAudio กับมัน เพราะวิธีจัดการ audio processing ที่แปลก
ให้ timidity ทำงานถูก เริ่มเพิ่มใน autostart (บางครั้งเรียก Startup Applications ใน desktop environments เช่น GNOME) แก้คำสั่งที่รันแอปพลิเคชันเป็น:
timidity -iA -Os
ไปไกลกว่านั้น พิมพ์คำสั่งเพิ่ม root เข้า pulse-access group
sudo usermod -a -G pulse-access root
Reboot แล้ว audio ควรทำงาน ถ้ายัง fail วิธีแก้อีกอย่างคือลบ timidity จาก Ubuntu
ตอนนี้มี service ที่รันตอน resume หลัง suspend ทันทีปิดตัวเองหลังทำงานเสร็จ หลีกเลี่ยง bloat
คำถามที่พบบ่อย
1. ลบ ALSA และเก็บ PulseAudio ได้ไหม?
ระวังมาก! PulseAudio ต้องการ kernel-level audio module ถ้าวางแผนแทนที่ ALSA ด้วยอย่างอื่นที่ทำงานใน kernel (อย่าง Open Sound System) ไปข้างหน้า กระบวนการซับซ้อนกว่าแทนที่ Realtek kernel module สำหรับ networking จงระวังว่าอาจนั่งนานมากแก้ปัญหา
2. PulseAudio มี alternatives ไหม?
มี! Alternative ยอดนิยมและ viable สำหรับ desktop คือ PipeWire รองรับ Bluetooth devices ดีกว่า และปรับปรุง sampling และ post-processing ของ PulseAudio ที่ wonky หลาย distros ทำให้มีใน official repositories และ stability ดีขึ้นมากในไม่กี่ปี
ถ้าอยาก professional audio setup อย่างไรก็ตาม อาจเลือก JACK
3. รัน PulseAudio ควบคู่กับ services อื่นได้ไหม?
แม้ services บางอย่างมี libraries และ setup options ให้ PulseAudio ทำงานกับพวกเขา แตแนะนำอย่างยิ่ง stick to one service บนระบบ tạiเวลาเดียว Services ส่วนใหญ่จะแค่แข่งกับ PulseAudio สำหรับ applications ของระบบ และทำให้ unpredictable behavior อื่นๆ จะไม่ทำงานเลยโดยไม่ได้ลบ PulseAudio ทั้งหมด (PipeWire ใช้ pipewire-pulse service แทน pulseaudio)
หวังว่าคำแนะนำที่ให้มา ทำให้เสียงบน Ubuntu ทำงานอีกครั้ง เริ่มเพลิดเพลินกับ OS อีกครั้ง เคยลองทำ website เป็น app ใน Linux และ cast หน้าจอ Android ไป Linux ไหม?