Я хочу використовувати програму на основі SDL для відображення графіки на консолі, не входячи з консолі та не запускаючи програму як корінь. Наприклад, я хочу мати змогу запустити його через 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.
Вихід напруги розходиться при цьому виклику йоктлу - тут виявляється збій; ioctl повертає 0, коли програма запускається з консолі або запускається з ssh як root:
open("/dev/tty", O_RDWR) = 4
ioctl(4, VT_GETSTATE, 0xbeaa01f8) = -1 EINVAL (Invalid argument)
(Адреси також відрізняються, але це не важливо.)
Зважаючи на те, що моя програма працює, коли вона працює як root, я думаю, що це означає, що у мене є проблема з дозволом. Як я можу дати користувачеві необхідні дозволи для того, щоб мати змогу запускати цю програму без входу в консоль (і без запуску як root)?