Quiero usar un programa basado en SDL para mostrar gráficos en la consola, sin tener que iniciar sesión desde la consola y sin ejecutar el programa como root. Por ejemplo, quiero poder ejecutarlo a través de ssh. El sistema operativo de destino es raspbian.
Aquí hay un breve ejemplo en Python para ilustrar el problema:
import os, pygame
os.environ['SDL_VIDEODRIVER'] = 'fbcon'
pygame.init()
s = pygame.display.set_mode()
print "Success"
Esto funciona (se ejecuta hasta su finalización, no arroja excepciones) si lo ejecuto desde la consola, y funciona a través de ssh si lo ejecuto como root.
Verifiqué que mi usuario está en los grupos de audio y video.
He usado strace para ver qué es diferente entre ejecutarlo desde la consola (que funciona), ejecutarlo como root a través de ssh (también funciona) y ejecutarlo como un usuario normal a través de ssh (no funciona).
La primera diferencia fue que mi usuario no tenía permiso para acceder a / dev / tty0. Creé un nuevo grupo (tty0), puse a mi usuario en ese grupo y agregué una regla udev para darle acceso a ese grupo a / dev / tty0.
La salida strace diverge en esta llamada ioctl: el fallo se muestra aquí; ioctl devuelve 0 cuando el programa se ejecuta desde la consola o se ejecuta desde ssh como root:
open("/dev/tty", O_RDWR) = 4
ioctl(4, VT_GETSTATE, 0xbeaa01f8) = -1 EINVAL (Invalid argument)
(Las direcciones también difieren, pero eso no es importante).
Dado que mi programa funciona cuando se ejecuta como root, creo que esto significa que tengo un problema de permisos. ¿Cómo otorgo los permisos necesarios a mi usuario para poder ejecutar este programa sin iniciar sesión en la consola (y sin ejecutar como root)?