2017-10-15 21 views
0

저는 Ramesberry Pi를 사용하여 소리를 재생하고 (파이 게임을 사용하여) 온보드 GPIO를 사용합니다. GPIO에 액세스하려면 sudo를 사용하여 스크립트를 실행해야하지만 코드를 실행하면 sudo python myscript.py을 사용하지만 사운드가 재생되지 않는 것으로 나타났습니다. python myscript.py을 사용하면 사운드는 재생되지만 분명히 GPIO는 재생되지 않습니다. 오디오 파일을 절대 경로로 참조하는 위치를 변경해 보았습니다. sudo의 내부 동작에 지나치게 친숙하지 않습니다. 누군가이 문제에 대해 밝힐 수 있습니까?sudo를 사용하여 Python을 실행하면 사운드 파일을 재생할 수 없습니다.

import pygame 
pygame.init() 
pygame.mixer.music.load("alert.wav") 
pygame.mixer.music.play() 
while pygame.mixer.music.get_busy() == True: 
    continue 

    GPIO.output(16,True) 
    GPIO.output(18,True) 

출력의 printenv

LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36: 
SSH_CONNECTION=192.168.0.114 64152 192.168.0.196 22 
LANG=en_US.UTF-8 
INFINALITY_FT_CHROMEOS_STYLE_SHARPENING_STRENGTH=0 
INFINALITY_FT_AUTOHINT_INCREASE_GLYPH_HEIGHTS=true 
INFINALITY_FT_CONTRAST=0 
INFINALITY_FT_STEM_FITTING_STRENGTH=25 
INFINALITY_FT_GLOBAL_EMBOLDEN_X_VALUE=0 
XDG_SESSION_ID=c5 
USER=pi 
INFINALITY_FT_AUTOHINT_SNAP_STEM_HEIGHT=100 
INFINALITY_FT_GRAYSCALE_FILTER_STRENGTH=0 
INFINALITY_FT_GAMMA_CORRECTION=0 100 
PWD=/home/pi 
HOME=/home/pi 
TEXTDOMAIN=Linux-PAM 
SSH_CLIENT=192.168.0.114 64152 22 
INFINALITY_FT_WINDOWS_STYLE_SHARPENING_STRENGTH=10 
SSH_TTY=/dev/pts/1 
INFINALITY_FT_BRIGHTNESS=0 
MAIL=/var/mail/pi 
TERM=xterm 
SHELL=/bin/bash 
INFINALITY_FT_USE_VARIOUS_TWEAKS=true 
SHLVL=1 
INFINALITY_FT_BOLD_EMBOLDEN_Y_VALUE=0 
INFINALITY_FT_GLOBAL_EMBOLDEN_Y_VALUE=0 
INFINALITY_FT_AUTOHINT_HORIZONTAL_STEM_DARKEN_STRENGTH=10 
LOGNAME=pi 
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus 
XDG_RUNTIME_DIR=/run/user/1000 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games 
INFINALITY_FT_FILTER_PARAMS=11 22 38 22 11 
INFINALITY_FT_USE_KNOWN_SETTINGS_ON_SELECTED_FONTS=true 
INFINALITY_FT_STEM_SNAPPING_SLIDING_SCALE=40 
INFINALITY_FT_STEM_ALIGNMENT_STRENGTH=25 
INFINALITY_FT_BOLD_EMBOLDEN_X_VALUE=0 
INFINALITY_FT_AUTOHINT_VERTICAL_STEM_DARKEN_STRENGTH=25 
INFINALITY_FT_FRINGE_FILTER_STRENGTH=0 
_=/usr/bin/printenv 

출력의 sudo printenv

LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36: 
LANG=en_US.UTF-8 
TERM=xterm 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
MAIL=/var/mail/root 
LOGNAME=root 
USER=root 
USERNAME=root 
HOME=/root 
SHELL=/bin/bash 
SUDO_COMMAND=/usr/bin/printenv 
SUDO_USER=pi 
SUDO_UID=1000 
SUDO_GID=1000 
+0

보통 sudo를 사용하여 명령을 실행하면 환경 변수가 달라지며 작동하지 않도록 설정해야하는 항목이있을 수 있습니다. 명령 줄에서 'printenv'를 실행 한 다음 'sudo printenv'를 사용하면 다른 점을 확인하는 데 도움이됩니다. 결과물을 질문에 추가하는 것이 도움이 될 것입니다. –

+1

'sudo' 대신에 GPIO 포트에 대한 권한을 수정해야합니다. –

+0

@JeffRichards 두 printenv 명령의 출력을 추가했습니다. 나는 당신이 나를 도울 수 있기를 바랍니다. – Exeleon

답변

0

sudo을 필요로하지 않는 또 다른 해결책은, 만들고 gpio 그룹을 사용하는 것입니다. raspbian에서 groupadd으로 새 그룹을 만들 수 있습니다.

해당 그룹에 대한 그룹 읽기/쓰기 액세스 권한이있는 gpio 장치에 해당 그룹을 할당하십시오. chown으로 그 작업을 수행 할 수 있지만 재부팅 후에도 지속되지는 않습니다. raspbian에서 이것은 으로 영구적으로 이루어지며,udev 규칙입니다. 예 : this example.

그런 다음 Python 프로그램을 실행하는 user-id를 해당 그룹에 추가하십시오. Raspbian에서 이것은 adduser으로 이루어집니다.

raspbian 배포판을 실행하지 않는 경우 관련 명령의 이름이 다를 수 있습니다.

이 설정을 사용하면 gpio 그룹의 모든 사용자가 GPIO 장치에 액세스 할 수 있습니다.