Konsolda grafik görüntülemek, konsoldan oturum açmak zorunda kalmadan ve programı kök olarak çalıştırmadan SDL tabanlı bir program kullanmak istiyorum. Örneğin, ssh ile çalıştırabilmek istiyorum. Hedef işletim sistemi ahududu.
İşte sorunu göstermek için python'da kısa bir örnek:
import os, pygame
os.environ['SDL_VIDEODRIVER'] = 'fbcon'
pygame.init()
s = pygame.display.set_mode()
print "Success"
Konsoldan çalıştırırsam bu çalışır (tamamlamaya çalışır, istisnalar atmaz) ve kök olarak çalıştırırsam ssh ile çalışır.
Kullanıcımın ses ve video gruplarında olduğunu kontrol ettim.
Konsolu çalıştırmak (hangi çalışır), ssh üzerinden root olarak çalıştırmak (ayrıca çalışır) ve ssh üzerinden normal bir kullanıcı olarak çalıştırmak (çalışmıyor) arasındaki farkı görmek için strace kullandım.
İlk fark, kullanıcımın / dev / tty0 erişimine sahip olmamasıydı. Yeni bir grup (tty0) oluşturdum, kullanıcımı bu gruba koydum ve bu gruba / dev / tty0'a erişim vermek için bir udev kuralı ekledim.
Strace çıkışı bu ioctl çağrısında ayrılır - hata burada gösterilir; Program konsoldan çalıştırıldığında veya ssh'den root olarak çalıştırıldığında ioctl 0 değerini döndürür:
open("/dev/tty", O_RDWR) = 4
ioctl(4, VT_GETSTATE, 0xbeaa01f8) = -1 EINVAL (Invalid argument)
(Adresler de farklıdır, ancak bu önemli değildir.)
Programımın kök olarak çalıştığı göz önüne alındığında, bunun bir izin sorunum olduğu anlamına geldiğini düşünüyorum. Konsolda oturum açmadan (ve root olarak çalıştırmadan) bu programı çalıştırabilmek için kullanıcıma gerekli izinleri nasıl verebilirim?