Как запустить gui приложение в окне openbox вне его файла автозапуска

TL;DR

Работает сервер ubuntu 20.04 с установленным xserver-xorg x11-xserver-utils xinit openbox. Я могу поместить команду в файл автозапуска openbox, и он работает нормально. Теперь я хочу запустить openbox, а затем из демона в какой-то момент запустить приложение, которое будет работать в текущем окне openbox. Как получить доступ к текущему окну openbox?

Подробности

Я следовал этому очень полезному руководству по установке киоска, оно для raspberry pi, я адаптировал его для работы на сервере ubuntu.

Все работает хорошо; гостевой пользователь автоматически входит в систему при загрузке, затем файл .profile гостевого пользователя запускает startx -- -nocursor, и внутри файла автозапуска openbox есть команда для запуска chromium. Счастливые дни.

Теперь я хочу переместить команду запуска chromium из файла автозапуска openbox и поместить ее под контроль supervisor (чтобы в случае сбоя chromium supervisor автоматически перезапускал chromium).

К сожалению, когда supervisor пытается запустить chromium, работая от имени гостевого пользователя, он не может получить отображение окна openbox. Я проверил, что в окне openbox значение $DISPLAY установлено в ":0".

Я предполагаю, что здесь играют роль какие-то другие факторы, что мне нужно установить не только дисплей, но и оконный менеджер, или клиент gui, или что-то подобное.

Конфигурационный файл супервизора:

[program:chromium]
environment = DISPLAY=":0"
command = chromium-browser --kiosk
startsecs=6
user=guest
stderr_logfile=/var/log/supervisor/chromium_stderr.log
stdout_logfile=/var/log/supervisor/chromium_stdout.log
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=3

Поскольку он работает от имени пользователя guest, у него практически нет маленьких прав. Я проверил журнал ошибок супервизора для приложения chromium, и он не смог открыть /var/log/Xorg.1 .log, поэтому я chmod 777 его (он остается на 0 байт, так как не растет), теперь получаю:

xauth: таймаут в блокировке файла полномочий /.Xauthority

1
задан 31 July 2021 в 12:45

1 ответ

В Ubuntu 20.04 вам не нужен Supervisord, чтобы убедиться, что программа перезапущена. Вы можете использовать Systemd для перезапуска сбойного демона. Возможно, вам стоит попробовать этот подход.

[Service]
Restart=on-failure
RestartSec=10s

Насколько я понимаю, когда вы получаете ошибки вроде этой:

 timeout in locking authority file /.Xauthority

Это означает, что этот файл заблокирован другим приложением. Чтобы снять блокировку, я думаю, вы можете использовать опцию -b, но я не уверен. Другим решением было бы просто удалить его...

Также попробуйте настроить журналы на /tmp для /var/log/Xorg.1.log, возможно, у вашего приложения нет прав на /var/log, но я сомневаюсь...

Просто мои 2 цента...

0
ответ дан 20 August 2021 в 10:30

Другие вопросы по тегам:

Похожие вопросы: