Voglio utilizzare un programma basato su SDL per visualizzare la grafica sulla console, senza dover accedere dalla console e senza eseguire il programma come root. Ad esempio, voglio essere in grado di eseguirlo tramite SSH. Il sistema operativo di destinazione è raspbian.
Ecco un breve esempio in Python per illustrare il problema:
import os, pygame
os.environ['SDL_VIDEODRIVER'] = 'fbcon'
pygame.init()
s = pygame.display.set_mode()
print "Success"
Funziona (funziona fino al completamento, non genera eccezioni) se lo eseguo dalla console e funziona tramite ssh se lo eseguo come root.
Ho verificato che il mio utente sia nei gruppi audio e video.
Ho usato strace per vedere cosa c'è di diverso tra eseguirlo dalla console (che funziona), eseguirlo come root tramite ssh (funziona anche) ed eseguirlo come utente normale tramite ssh (non funziona).
La prima differenza era che il mio utente non aveva il permesso di accedere a / dev / tty0. Ho creato un nuovo gruppo (tty0), ho inserito il mio utente in quel gruppo e ho aggiunto una regola udev per dare a quel gruppo l'accesso a / dev / tty0.
L'output di strace differisce da questa chiamata ioctl - l'errore viene mostrato qui; ioctl restituisce 0 quando il programma viene eseguito dalla console o eseguito da ssh come root:
open("/dev/tty", O_RDWR) = 4
ioctl(4, VT_GETSTATE, 0xbeaa01f8) = -1 EINVAL (Invalid argument)
(Anche gli indirizzi differiscono, ma questo non è importante.)
Dato che il mio programma funziona quando funziona come root, penso che questo significhi che ho un problema con le autorizzazioni. Come posso fornire le autorizzazioni necessarie al mio utente per poter eseguire questo programma senza accedere alla console (e senza eseguirlo come root)?