SDL 기반 프로그램을 사용하여 콘솔에서 로그온하지 않고 루트로 프로그램을 실행하지 않고 콘솔에 그래픽을 표시하려고합니다. 예를 들어, ssh를 통해 실행할 수 있기를 원합니다. 대상 OS는 라즈 비안입니다.
다음은 파이썬에서 문제를 설명하는 간단한 예입니다.
import os, pygame
os.environ['SDL_VIDEODRIVER'] = 'fbcon'
pygame.init()
s = pygame.display.set_mode()
print "Success"
콘솔에서 실행하면 작동하고 (실행 완료, 예외는 발생하지 않음) 루트로 실행하면 ssh를 통해 작동합니다.
사용자가 오디오 및 비디오 그룹에 있는지 확인했습니다.
나는 strace를 사용하여 콘솔에서 작동하는 것 (작동하는), ssh를 통해 루트로 실행하는 것 (또한 작동하는) 및 ssh를 통해 일반 사용자로 실행하는 것 (작동하지 않는) 사이의 차이점을 확인했습니다.
첫 번째 차이점은 내 사용자에게 / dev / tty0에 액세스 할 수있는 권한이 없다는 것입니다. 새 그룹 (tty0)을 만들고 사용자를 해당 그룹에 넣은 다음 udev 규칙을 추가하여 해당 그룹에 / dev / tty0에 대한 액세스 권한을 부여했습니다.
strace 출력은이 ioctl 호출에서 분기됩니다. 여기서 실패가 표시됩니다. 프로그램이 콘솔에서 실행되거나 ssh에서 루트로 실행될 때 ioctl은 0을 리턴합니다.
open("/dev/tty", O_RDWR) = 4
ioctl(4, VT_GETSTATE, 0xbeaa01f8) = -1 EINVAL (Invalid argument)
(주소도 다르지만 중요하지 않습니다.)
루트로 실행될 때 내 프로그램이 작동한다고 가정하면 권한 문제가 있음을 의미합니다. 콘솔에 로그온하지 않고 루트로 실행하지 않고이 프로그램을 실행할 수 있도록 필요한 권한을 사용자에게 부여하려면 어떻게해야합니까?