解决Ubuntu使用supervisor管控的程序不能使用麦克风的问题

项目场景:

Ubuntu服务器有时候可能更多的是用来跑服务,但是如果用来调取麦克风又担心自己的程序崩溃掉,你可能自然想到使用supervisor来管控自己的程序,但是似乎并不是那么好用。


问题描述

Ubuntu正常使用机器的能力是没有问题的,比如CPU、GPU等,唯独有一些东西有问题,比如麦克风。如果你的程序是使用root启动的,你就不能使用麦克风,同样也不意味着你把user设置为普通用户就能正常使用。


原因分析:

处于安全的考虑,Ubuntu不允许root用户使用麦克风等硬件,如果你的程序是使用root用户启动,你就不能正常使用麦克风。


解决方案:

解决方法很简单,我使用普通用户不就行了吗。恐怕也不完全行,实际上你需要切换用户才能使用麦克风设备,因为你需要初始化用户环境变量。默认supervisor是不自动切换用户环境变量的,你只能手动切。平常使用的ssh和桌面都初始化了用户环境变量,是可以直接使用麦克风的。

下面是一个简单的python程序用来获取可用麦克风设备。需要使用sounddevice这个module,没装的手动装下。

pip3 install sounddevice -i https://mirrors.aliyun.com/pypi/simple
import time
import sounddevice as sd

print(sd.query_devices())

while True:
    time.sleep(1)

下面是成功的设备列表:

  0 HDA Intel HDMI: 0 (hw:0,3), ALSA (0 in, 8 out)
  1 HDA Intel HDMI: 1 (hw:0,7), ALSA (0 in, 8 out)
  2 HDA Intel HDMI: 2 (hw:0,8), ALSA (0 in, 8 out)
  3 HDA Intel PCH: CX20751/2 Analog (hw:1,0), ALSA (2 in, 2 out)
  4 hdmi, ALSA (0 in, 8 out)
  5 pulse, ALSA (32 in, 32 out)
* 6 default, ALSA (32 in, 32 out)

上面是我的笔记本的设备列表,不用管打印了什么一定要出现星号(*)标注的设备。如果没有就是访问权限的问题。

下面是失败的设备列表:

< 0 HDA Intel HDMI: 0 (hw:0,3), ALSA (0 in, 8 out)
  1 HDA Intel HDMI: 1 (hw:0,7), ALSA (0 in, 8 out)
  2 HDA Intel HDMI: 2 (hw:0,8), ALSA (0 in, 8 out)
> 3 HDA Intel PCH: CX20751/2 Analog (hw:1,0), ALSA (2 in, 2 out)
  4 hdmi, ALSA (0 in, 8 out)

看到了没有,5跟6没有了,星号也没有了。说明你的程序访问不了麦克风了。

注意:不同的设备列表可能不一样!

终极大法:
下面贴出supervisor的program配置

[program:input_output]
directory=/home/anold/XTTS
command=su - <普通用户> -c "cd /home/anold/XTTS && python3 -u input_output.py"
autostart=true
autorestart=true
user=root
redirect_stderr=true
stdout_logfile = /home/anold/XTTS/starts.log
stdout_logfile_maxbytes = 50MB
staout_logfile_backups = 5

总结:

不一定只有切换用户才行,也可以修改系统配置来让root也支持直接访问麦克风。但是,不要把自己想象的比设计操作系统的人还聪明。这种方法不会对系统造成破坏,影响面只在当前程序而已。

猜你喜欢

转载自blog.csdn.net/jiexijihe945/article/details/134835429