Saya ingin menggunakan program berbasis SDL untuk menampilkan grafik di konsol, tanpa harus masuk dari konsol, dan tanpa menjalankan program sebagai root. Sebagai contoh, saya ingin dapat menjalankannya melalui ssh. OS target adalah raspbian.
Berikut adalah contoh singkat dalam python untuk menggambarkan masalah:
import os, pygame
os.environ['SDL_VIDEODRIVER'] = 'fbcon'
pygame.init()
s = pygame.display.set_mode()
print "Success"
Ini berfungsi (berjalan sampai selesai, tidak membuang pengecualian) jika saya menjalankannya dari konsol, dan bekerja melalui ssh jika saya menjalankannya sebagai root.
Saya telah memeriksa bahwa pengguna saya ada di grup audio dan video.
Saya telah menggunakan strace untuk melihat apa yang berbeda antara menjalankannya dari konsol (yang berfungsi), menjalankannya sebagai root melalui ssh (juga berfungsi), dan menjalankannya sebagai pengguna biasa melalui ssh (tidak berfungsi).
Perbedaan pertama adalah bahwa pengguna saya tidak memiliki izin untuk mengakses / dev / tty0. Saya membuat grup baru (tty0), menempatkan pengguna saya di grup itu, dan menambahkan aturan udev untuk memberikan akses grup itu ke / dev / tty0.
Output strace menyimpang pada panggilan ioctl ini - kegagalan ditampilkan di sini; ioctl mengembalikan 0 ketika program dijalankan dari konsol atau dijalankan dari ssh sebagai root:
open("/dev/tty", O_RDWR) = 4
ioctl(4, VT_GETSTATE, 0xbeaa01f8) = -1 EINVAL (Invalid argument)
(Alamatnya juga berbeda, tapi itu tidak penting.)
Mengingat bahwa program saya berfungsi saat dijalankan sebagai root, saya pikir ini berarti saya memiliki masalah izin. Bagaimana cara memberikan izin yang diperlukan kepada pengguna saya untuk dapat menjalankan program ini tanpa masuk di konsol (dan tanpa menjalankan sebagai root)?