主机验证
这个不是必须的,但我建议你先验证主机硬件状况。例如有些老的设备可能氧化了,你在lxc中怎么搞都没有声音,结果是宿主机这一端就出问题了。
root@pve:~# apt install alsa-utils -y root@pve:~# alsamixer root@pve:~# speaker-test -c 2 speaker-test 1.2.8 Playback device is default
alsamixer。要确保master、headphone这种控制条,不是mm静音状态,应该是00(如是mm,按m键取消)。在speaker-test,音频输出口应该能听到短暂的噪音
宿主机查询声卡情况
发现设备的用户是root,归属于audio组。如果只有seq、timer,查看我上一篇关于更换指定内核的
root@pve:~# ls -l /dev/snd/ total 0 drwxr-xr-x 2 root root 60 Mar 3 06:58 by-path crw-rw---- 1 root audio 116, 6 Mar 3 06:58 controlC0 crw-rw---- 1 root audio 116, 5 Mar 3 06:58 hwC0D2 crw-rw---- 1 root audio 116, 3 Mar 3 06:58 pcmC0D0c crw-rw---- 1 root audio 116, 2 Mar 3 06:58 pcmC0D0p crw-rw---- 1 root audio 116, 4 Mar 3 06:58 pcmC0D2c crw-rw---- 1 root audio 116, 1 Mar 3 06:58 seq crw-rw---- 1 root audio 116, 33 Mar 3 06:58 timer
LXC对应组查询
在LXC中查询对应组GID
l@CT101:~$ getent group audio audio:x:29:pulse,l
LXC配置添加
dev6: /dev/snd/controlC0,gid=29 dev7: /dev/snd/hwC0D2,gid=29 dev8: /dev/snd/pcmC0D0c,gid=29 dev9: /dev/snd/pcmC0D0p,gid=29 dev10: /dev/snd/pcmC0D2c,gid=29 dev11: /dev/snd/seq,gid=29 dev12: /dev/snd/timer,gid=29
LXC中验证权限
权限归属与宿主机一致,无问题。
l@CT101:~$ ls -l /dev/snd/ total 0 crw-rw---- 1 root audio 116, 6 Mar 3 03:48 controlC0 crw-rw---- 1 root audio 116, 5 Mar 3 03:48 hwC0D2 crw-rw---- 1 root audio 116, 3 Mar 3 03:48 pcmC0D0c crw-rw---- 1 root audio 116, 2 Mar 3 03:48 pcmC0D0p crw-rw---- 1 root audio 116, 4 Mar 3 03:48 pcmC0D2c crw-rw---- 1 root audio 116, 1 Mar 3 03:48 seq crw-rw---- 1 root audio 116, 33 Mar 3 03:48 timer
配置用户权限
如果你新增了一个用户,这个用户大概率是不在audio组,这时你会发现,运行aplay -l命令检查声卡时,root用户可以识别到声卡,用户l识别不到。为此我们需要补充授权。如果你使用root,也会发现里面PulseAudio似乎不希望你以root运行。为此添加一个自己的账户有必要。
root@Xfce:~# adduser l adduser: The user `l' already exists. root@Xfce:~# groups l l : l audio users root@Xfce:~# usermod -aG audio l root@Xfce:~# groups l l : l audio users
配置声音部分
这部分的命令是提供调试和识别使用的,和宿主机上的操作差不多
root@CT101:~# apt install alsa-utils -y root@CT101:~# alsamixer root@CT101:~# speaker-test -c 2 speaker-test 1.2.8 Playback device is default
alsamixer。要确保master、headphone这种控制条,不是mm静音状态,应该是00(如是mm,按m键取消)。在speaker-test,音频输出口应该能听到短暂的噪音
查看lxc中声卡是否正常识别
aplay -l查看系统中的所有 ALSA 声卡
root@CT101:~# aplay -l **** List of PLAYBACK Hardware Devices **** card 0: PCH [HDA Intel PCH], device 0: ALC887-VD Analog [ALC887-VD Analog] Subdevices: 1/1 Subdevice #0: subdevice #0
你还可以指定测试声卡及对应的音频通道。如果上面的默认设置中没有效果,就可以尝试本项,根据自己查到的声卡和设备号修改
speaker-test -D hw:0,0 -c 2
在 PulseAudio 中,device_id=0 代表 第一张 ALSA 声卡,相当于 hw:0(ALSA 设备号)。