저는 Raspberry PI의 GPIO를 활용하는 Python 스크립트를 작성 중이므로 /dev/mem 및 /dev/gpiomem에 대한 올바른 권한을 얻고 GPIO에 액세스하려면 sudo로 승격된 스크립트를 실행해야 합니다.
하지만 이 스크립트에서 사운드도 재생하고 싶기 때문에 이제 os.system(cmd)
Python이 셸 명령을 실행할 수 있도록 하는 방법을 사용하고 있습니다.
저는 이 방법을 사용하여 wav 파일을 aplay에 로드합니다.
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
위의 명령은 기본 사용자로 명령을 실행하려고 시도하는데, 이는 제가 직접 alsa를 사용할 때 잘 작동했습니다. 하지만 전원을 켰다 껐을 때 DAC에서 나는 펑/크랙 소리 때문에 펄스 오디오로 전환하고 유휴 상태인 모듈을 비활성화해야 했습니다.
이로 인해 위의 문제가 발생하여 더 이상 루트 사용자로부터 소리를 낼 수 없습니다.
기본 사용자로 aplay를 시작하려고 셸에서 다음 명령을 실행해 보았습니다(그러나 실제로는 소리가 전혀 재생되지 않았습니다).
$ sudo -H -u pi bash -c 'aplay sounds/beep.wav &'
$ Playing WAVE 'sounds/3tone.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono
그리고
$ sudo -u pi aplay sounds/beep.wav
$ Playing WAVE 'sounds/beep.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono
둘 다 훌륭하고 상세한 출력을 생성하지만 오디오는 없습니다.
루트가 아닌 사용자(pi라고도 함)로 실행하면 오디오가 들립니다.
루트가 아닌 사용자에게는 pulseaudio 또는 aplay가 작동하지만 루트 시작 명령이 기본 사용자로 실행될 때는 작동하지 않는 원인은 무엇입니까?
이로 인해 sudo가 필요하지만 sudo로 인해 문제가 발생합니다.
안내해 주셔서 감사합니다!
답변1
Pulseaudio는 로그인한 사용자에게만 작동하도록 설계되었습니다.
너도 필요해시스템 전반에 걸친 Pulseaudio또는 기본이 아닌 옵션 중 하나를 활성화해야 합니다.통신모듈루트를 위해.