O Pulseaudio por design só funciona para o usuário conectado.
Você precisa do sistema Pulseaudio em todo o sistema, ou é necessário ativar um dos os módulos do método de comunicação não padrão para raiz.
Estou escrevendo um script python que utiliza o GPIO de um PI de framboesa e, portanto, o script deve ser elevado para ser executado como sudo para obter privilégios corretos para / dev / mem e / dev / gpiomem e acessar o GPIO.
No entanto, também quero reproduzir sons deste script, por isso agora estou usando o método os.system(cmd)
, que permite ao Python executar comandos shell.
Estou usando esse método para carregar arquivos wav para reprodução.
Snippit em Python:
defaultUser = 'pi' #the user to run the command as
cmd = 'sudo -H -u %s bash -c \'aplay sounds/%s &\'' % (defaultUser, filename)
os.system(cmd) #now run the command as if it were typed into the shell
As tentativas acima para iniciar o comando como o usuário padrão, e isso costumava funcionar bem quando eu estava usando o alsa por ele mesmo. no entanto, devido ao barulho estalar / estalar dos DACs ligando e desligando, tive que mudar para o pulso de áudio e desativar o módulo suspenso no modo inativo.
Isso levou ao problema acima, em que não posso mais produzir sons do usuário root.
Eu tentei executar esses comandos no shell em uma tentativa de iniciar o jogo como o usuário padrão (mas nenhum realmente toca nenhum som):
$ sudo -H -u pi bash -c 'aplay sounds/beep.wav &'
$ Playing WAVE 'sounds/3tone.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono
e
$ sudo -u pi aplay sounds/beep.wav
$ Playing WAVE 'sounds/beep.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono
Ambos produzem boa saída detalhada, apenas sem áudio.
E eu recebo áudio se eu executo como usuário não-root (também conhecido como pi)
O que poderia fazer com que pulseaudio ou aplay funcionassem para usuários não-root, mas não quando o root inicia um comando para ser executado como usuário padrão?
Isso me prendeu numa armadilha 22, onde eu preciso de sudo, mas o sudo causa problemas.
Obrigado por qualquer orientação!
O Pulseaudio por design só funciona para o usuário conectado.
Você precisa do sistema Pulseaudio em todo o sistema, ou é necessário ativar um dos os módulos do método de comunicação não padrão para raiz.
Tags root python pulseaudio