解决Ubuntu中没有声音的问题

我在使用Ubuntu的时候,发现主机机箱上的耳机口没有声音(但是连接显卡HDMI线的显示器上的耳机口能够正常播放)。
在参考SoundTroubleshootingProcedureHow To Fix: No Sound In Ubuntu And Linux Mint这两个页面的方法之后,成功的使得Ubuntu正常播放声音。

alsa与pulseaudio

ALSA全称是Advanced Linux Sound Architecture,是和硬件打交道的,pulseaudio则是基于alsa的一套软件,主要用于向其他软件提供统一的接口,以及额外的功能。

alsamixer

alasmixer与windows中的音量控制器类似。
img
在Terminal中输入alsamixer,看到界面如图。如果显示MM,那么表明对应项处于静音状态,按M进行切换,上下键进行音量调整。
这里‘Headphone’表示的就是我需要的前置耳机孔。
这个方法有时候能够解决问题,但是我设置之后没有起到作用。

初始化-重启大法

在计算机领域,有句话叫“遇事不决先重启”。因为重启之后很多软硬件的设置会恢复成初始状态,很多问题就直接消失了。
在声音这个问题上,初始化的方法是非常有效果的,最终解决了我的问题。
依次执行以下命令,每条指令执行之前都需要等待上一条完成。

1
2
3
4
5
alsactl init
sudo killall pulseaudio; rm -r ~/.config/pulse/* ; rm -r ~/.pulse*
killall pulseaudio; rm -r ~/.config/pulse/* ; rm -r ~/.pulse*
pulseaudio -k
sudo alsa force-reload

然后使用alsamixer调整音量设置即可。

保存设置

需要注意的是,即使当前调整完成,当下次重启系统之后仍然没有声音。对于这个问题我的解决方案是将需要的指令写进一个脚本,每次开机运行脚本即可。

保存alsamixer配置

首先调整好alsamixer设置,然后运行sudo alsactl --file ~/.config/asound.state restore将配置文件保存到~/.config/asound.state。

最后建立一个脚本,在其中添加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Sound
alsactl init
wait
sleep 3s
sudo killall pulseaudio; rm -r ~/.config/pulse/* ; rm -r ~/.pulse*
killall pulseaudio; rm -r ~/.config/pulse/* ; rm -r ~/.pulse*
wait
sleep 3s
echo 'killall pulseaudio have finished'
pulseaudio -k
wait
sleep 1s
echo 'pulseaudio -k have finished'
sudo alsa force-reload
wait
sleep 3s
echo 'alsa force-reload have finished'
sudo alsactl --file ~/.config/asound.state restore