কনসোল থেকে গ্রাফিক্স প্রদর্শন করতে, কনসোল থেকে লগইন না করে এবং প্রোগ্রামটিকে মূল হিসাবে চালিত না করেই আমি এসডিএল-ভিত্তিক প্রোগ্রামটি ব্যবহার করতে চাই। উদাহরণস্বরূপ, আমি এটি ssh এর মাধ্যমে চালাতে সক্ষম হতে চাই। লক্ষ্যযুক্ত ওএস হ'ল রাস্পিয়ান।
সমস্যাটি বর্ণনা করার জন্য এখানে অজগরটির একটি সংক্ষিপ্ত উদাহরণ দেওয়া হল:
import os, pygame
os.environ['SDL_VIDEODRIVER'] = 'fbcon'
pygame.init()
s = pygame.display.set_mode()
print "Success"
এটি কাজ করে (সমাপ্তির দিকে চালিত হয়, ব্যতিক্রম ছুঁড়ে না) আমি যদি এটি কনসোল থেকে চালনা করি এবং আমি এটির মূল হিসাবে চালিত করি তবে এটি ssh এর মাধ্যমে কাজ করে।
আমি দেখেছি যে আমার ব্যবহারকারীর অডিও এবং ভিডিও গ্রুপ রয়েছে।
এটি কনসোল থেকে চালানো (যা কাজ করে), এটি ssh এর মাধ্যমে রুট হিসাবে চালানো (এটিও কাজ করে) এবং এসএসএসের মাধ্যমে এটি নিয়মিত ব্যবহারকারীর হিসাবে চালানোর (কোনও কাজ করে না) মধ্যে কী আলাদা তা দেখার জন্য আমি স্ট্রেস ব্যবহার করেছি।
প্রথম পার্থক্যটি হ'ল আমার ব্যবহারকারীর / dev / tty0 অ্যাক্সেস করার অনুমতি নেই। আমি একটি নতুন গোষ্ঠী তৈরি করেছি (tty0), আমার ব্যবহারকারীকে সেই গোষ্ঠীতে রেখেছি এবং সেই গোষ্ঠীকে / dev / tty0 এ অ্যাক্সেস দেওয়ার জন্য একটি udev নিয়ম যুক্ত করেছি।
স্ট্রেস আউটপুট এই ioctl কলটিতে ডাইভারেজ করে - ব্যর্থতা এখানে প্রদর্শিত হয়; প্রোগ্রামটি যখন কনসোল থেকে চালিত হয় বা এসএসএস থেকে মূল হিসাবে চালিত হয় তখন আইওসিটিএল 0 প্রদান করে:
open("/dev/tty", O_RDWR) = 4
ioctl(4, VT_GETSTATE, 0xbeaa01f8) = -1 EINVAL (Invalid argument)
(ঠিকানাগুলিও পৃথক, তবে এটি গুরুত্বপূর্ণ নয়))
আমার প্রোগ্রামটি যখন এটি রুট হিসাবে চালিত হয় কাজ করে তা দেওয়া, আমি মনে করি এর অর্থ আমার অনুমতি সংক্রান্ত সমস্যা আছে। কনসোলে লগইন না করে (এবং রুট হিসাবে চালিত না হয়ে) এই প্রোগ্রামটি চালাতে সক্ষম হওয়ার জন্য আমি কীভাবে আমার ব্যবহারকারীকে প্রয়োজনীয় অনুমতিগুলি দেব?