Desejo usar um programa baseado em SDL para exibir gráficos no console, sem precisar fazer logon no console e sem executar o programa como root. Por exemplo, eu quero poder executá-lo via ssh. O SO de destino é raspbian.
Aqui está um pequeno exemplo em python para ilustrar o problema:
import os, pygame
os.environ['SDL_VIDEODRIVER'] = 'fbcon'
pygame.init()
s = pygame.display.set_mode()
print "Success"
Isso funciona (é executado até a conclusão, não gera exceções) se eu o executar no console e via ssh se eu o executar como root.
Eu verifiquei se meu usuário está nos grupos de áudio e vídeo.
Eu usei o strace para ver o que é diferente entre executá-lo no console (que funciona), executá-lo como root via ssh (também funciona) e executá-lo como um usuário comum via ssh (não funciona).
A primeira diferença foi que meu usuário não tinha permissão para acessar / dev / tty0. Criei um novo grupo (tty0), coloquei meu usuário nesse grupo e adicionei uma regra do udev para conceder a esse grupo acesso a / dev / tty0.
A saída strace diverge nesta chamada ioctl - a falha é mostrada aqui; O ioctl retorna 0 quando o programa é executado no console ou no ssh como root:
open("/dev/tty", O_RDWR) = 4
ioctl(4, VT_GETSTATE, 0xbeaa01f8) = -1 EINVAL (Invalid argument)
(Os endereços também diferem, mas isso não é importante.)
Dado que meu programa funciona quando é executado como root, acho que isso significa que tenho um problema de permissões. Como concedo as permissões necessárias ao meu usuário para poder executar este programa sem fazer logon no console (e sem executar como root)?