Je souhaite utiliser un programme basé sur SDL pour afficher des graphiques sur la console, sans avoir à me connecter à partir de la console et sans exécuter le programme en tant que root. Par exemple, je veux pouvoir l'exécuter via ssh. Le système d'exploitation cible est raspbian.
Voici un court exemple en python pour illustrer le problème:
import os, pygame
os.environ['SDL_VIDEODRIVER'] = 'fbcon'
pygame.init()
s = pygame.display.set_mode()
print "Success"
Cela fonctionne (s'exécute jusqu'à la fin, ne lève pas d'exceptions) si je l'exécute à partir de la console, et cela fonctionne via ssh si je l'exécute en tant que root.
J'ai vérifié que mon utilisateur est dans les groupes audio et vidéo.
J'ai utilisé strace pour voir ce qui est différent entre l'exécuter à partir de la console (qui fonctionne), l'exécuter en tant que root via ssh (fonctionne également) et l'exécuter en tant qu'utilisateur normal via ssh (ne fonctionne pas).
La première différence était que mon utilisateur n'avait pas la permission d'accéder à / dev / tty0. J'ai créé un nouveau groupe (tty0), mis mon utilisateur dans ce groupe et ajouté une règle udev pour donner à ce groupe l'accès à / dev / tty0.
La sortie strace diverge à cet appel ioctl - l'échec est montré ici; ioctl renvoie 0 lorsque le programme est exécuté à partir de la console ou exécuté à partir de ssh en tant que root:
open("/dev/tty", O_RDWR) = 4
ioctl(4, VT_GETSTATE, 0xbeaa01f8) = -1 EINVAL (Invalid argument)
(Les adresses diffèrent également, mais ce n'est pas important.)
Étant donné que mon programme fonctionne lorsqu'il s'exécute en tant que root, je pense que cela signifie que j'ai un problème d'autorisations. Comment donner les autorisations nécessaires à mon utilisateur pour pouvoir exécuter ce programme sans ouvrir de session sur la console (et sans exécuter en tant que root)?