У меня есть приложение веб-камеры в Linux. Когда он запускается, он инициализирует веб-камеру, и изображение отображается в реальном времени в новом окне внутри startx. Некоторые вычисления также будут выполнены, и результат будет отображен в окне. В окне также есть несколько кнопок, чтобы пользователь мог настроить параметры.
Теперь я хотел бы, чтобы программа запускалась автоматически (отсюда и запуск веб-камеры) при каждой загрузке Linux. Проблема заключается в том, что, если я поместил программу в сценарии, такие как /etc/rc.local, и запустил в качестве фона, программа не может быть запущена, поскольку X-дисплей не существует. Кроме того, я бы хотел, чтобы пользователи могли видеть живое изображение и обрабатывать результаты по запросу. Теперь я придумываю несколько возможных решений:
(1) Используйте какой-либо метод (например, VNCserver), чтобы запустить X-сервер, не отображая его на экране, а затем перенаправить отображение на сервер и запустить программу. Когда пользователь хочет увидеть изображение в реальном времени и обработанные результаты, он запускает клиент VNC, чтобы просмотреть его.
(2) Используйте какой-либо метод, чтобы перенаправить дисплей на фиктивный X-сервер, чтобы программа могла запускаться без ошибок. Но тогда должен быть какой-то метод для пользователя, чтобы вызвать программу, унаследовать информацию о выполняющемся процессе, чтобы видеть живое изображение и обработанные результаты по требованию.
(3) Измените программу так, чтобы, если дисплей не поддерживает X windows, часть дисплея пропускается. Как и (2), должен быть какой-то метод для пользователя, чтобы вызывать программу, наследовать информацию о выполняющемся процессе, чтобы видеть живое изображение и обработанные результаты по требованию.
(4) Измените программу и разделите ее на две программы, чтобы одна из них автоматически выполняла только инициализацию веб-камеры, получала данные изображения и выполняла вычисления, а другая программа получает данные изображения и обрабатывает результаты (через общую память IPC). например), и при вызове пользователем он отображает результат в окне в X.
Хотя я считаю, что (1) и (4) осуществимы, как насчет (2) и (3)? И среди возможных решений, какое из них будет лучшим?