Я хочу использовать программу на основе SDL для отображения графики на консоли, без необходимости входа в систему с консоли и без запуска программы от имени пользователя root. Например, я хочу иметь возможность запустить его через SSH. Целевая ОС распбиана.
Вот короткий пример на python для иллюстрации проблемы:
import os, pygame
os.environ['SDL_VIDEODRIVER'] = 'fbcon'
pygame.init()
s = pygame.display.set_mode()
print "Success"
Это работает (работает до завершения, не выдает исключений), если я запускаю его из консоли, и работает через ssh, если я запускаю его как root.
Я проверил, что мой пользователь в аудио и видео группах.
Я использовал strace, чтобы увидеть, что отличается от запуска его из консоли (который работает), запуска от имени пользователя root через ssh (также работает) и запуска его как обычного пользователя через ssh (не работает).
Первым отличием было то, что мой пользователь не имел разрешения на доступ к / dev / tty0. Я создал новую группу (tty0), поместил моего пользователя в эту группу и добавил правило udev, чтобы дать этой группе доступ к / dev / tty0.
Выходные данные strace расходятся при вызове ioctl - здесь показывается ошибка; ioctl возвращает 0, когда программа запускается из консоли или запускается из ssh от имени пользователя root:
open("/dev/tty", O_RDWR) = 4
ioctl(4, VT_GETSTATE, 0xbeaa01f8) = -1 EINVAL (Invalid argument)
(Адреса также различаются, но это не важно.)
Учитывая, что моя программа работает, когда она запускается с правами root, я думаю, это означает, что у меня проблема с разрешениями. Как дать пользователю необходимые полномочия для запуска этой программы без входа в систему с консоли (и без запуска с правами root)?