(ルートとして実行されていない)SDLアプリにコンソールを使用させるには
SDLベースのプログラムを使用して、コンソールからログオンする必要なく、またルートとしてプログラムを実行せずに、グラフィックをコンソールに表示したい。たとえば、私はそれをssh経由で実行できるようにしたい。ターゲットOSはraspbianです。 問題を説明するためのPythonの短い例を次に示します。 import os, pygame os.environ['SDL_VIDEODRIVER'] = 'fbcon' pygame.init() s = pygame.display.set_mode() print "Success" コンソールから実行する場合、これは機能します(完了まで実行され、例外はスローされません)。rootとして実行する場合、sshを介して機能します。 ユーザーがオーディオグループとビデオグループに属していることを確認しました。 私はstraceを使用して、コンソールから実行する(動作する)、ssh経由でrootとして実行する(動作する)、ssh経由で通常のユーザーとして実行する(動作しない)の違いを確認しました。 最初の違いは、ユーザーが/ dev / tty0にアクセスする許可を持っていなかったことです。新しいグループ(tty0)を作成し、ユーザーをそのグループに入れ、そのグループに/ dev / tty0へのアクセスを許可するudevルールを追加しました。 strace出力は、このioctl呼び出しで分岐します-失敗はここに示されています。ioctlは、プログラムがコンソールから実行されるか、rootとしてsshから実行されると0を返します。 open("/dev/tty", O_RDWR) = 4 ioctl(4, VT_GETSTATE, 0xbeaa01f8) = -1 EINVAL (Invalid argument) (アドレスも異なりますが、それは重要ではありません。) 私のプログラムがrootとして実行されるときに機能することを考えると、これは許可の問題があることを意味すると思います。コンソールにログオンせずに(およびrootとして実行せずに)このプログラムを実行できるようにするために、ユーザーに必要な許可を与えるにはどうすればよいですか?