Вопрос или проблема
Я пишу тесты для проекта потокового видео. Чтобы проверить, правильно ли я транслирую видео, я настроил виртуальную машину, на которой работает видеоклиент (например, ffmpeg / vlc) в качестве демона. Я хочу, чтобы по команде клиент подключался к серверу, отображал видео и сохранял видео в файл.
Для этого я настроил службу. Вот мой .service файл:
[Unit]
Description=Видеоклиент для тестирования
[Service]
Type=simple
WorkingDirectory=/home/user/
ExecStart=client.sh
Restart=always
[Install]
WantedBy=default.target
В идеале я хочу, чтобы это была пользовательская служба. К сожалению, моя виртуальная машина работает на CentOS 7, который не может запускать пользовательские службы. В качестве обычной службы также необходимо установить $DISPLAY и $XAUTHORITY, но я не смог найти ни одного скрипта, который их инициализирует, как в Arch, поэтому я не думаю, что будет полезно настраивать их самостоятельно. Я также не уверен, как это будет работать, если вход в систему не автоматический. Сам скрипт не работает хорошо даже при сохранении видео и не открывании графического окна. Однако он работает хорошо при его запуске.
Я думал запустить скрипт из .profile, но мне не очень нравится эта идея, она кажется неудобной (или вообще не хорошим вариантом). Другим вариантом было бы настроить скрипт через SSH (например, используя paramiko, который требует дополнительных зависимостей / скриптов).
Я был бы очень признателен за любые предложения / альтернативы / способы действия, так как не хочу сильно хакерить это.
Спасибо,
Джои.
Рекомендованная мной схема заключается не в systemd
, а в том, чтобы настроить пользователя для автоматического входа в систему и использовать функцию “автозапуск” вашего рабочего стола, чтобы автоматически запускать VLC при входе и начинать стримить содержимое.
Этот подход будет автоматически настраивать $DISPLAY и $XAUTHORITY для вас.
Эта схема часто используется в проектах киосков на Raspberry Pi, где пользователи хотят, чтобы браузер автоматически запускался и открывал URL в полноэкранном режиме после загрузки устройства.
Ответ или решение
Когда вы работаете с видео-стримингом на CentOS 7 и пытаетесь запустить FFMPEG (или другой видео-клиент, такой как VLC) в качестве сервиса, важно учесть несколько ключевых моментов, особенно если вы стремитесь к стабильной и эффективной настройке. Ниже приведены рекомендации о том, как это реализовать.
1. Настройка сервиса systemd
Вы уже создали файл сервиса client.service
, который выглядит корректно. Однако, как вы заметили, для работы с графическими приложениями в соответствии с требованиями X11 необходимо передать переменные окружения $DISPLAY
и $XAUTHORITY
. К сожалению, на CentOS 7 не поддерживаются пользовательские системы сервиса systemd, что значительно усложняет установку.
[Unit]
Description=Video client for testing
[Service]
Type=simple
WorkingDirectory=/home/user/
ExecStart=/home/user/client.sh
Environment="DISPLAY=:0" "XAUTHORITY=/home/user/.Xauthority"
Restart=always
[Install]
WantedBy=default.target
Вам нужно убедиться, что путь к client.sh
указан правильно, и соответствующие переменные среды установлены. Это укажет systemd, как понять, где находиться графическим компонентам.
2. Автоматический вход в систему
Если автоматизация работы вашего видео-клиента является важной частью вашего проекта, рекомендуется настроить автоматический вход в систему, чтобы избежать проблем с переменными окружения, которые часто возникают при запуске графических приложений в системных сервисах. Настройка автологина обеспечивает, что все необходимые переменные окружения ($DISPLAY и $XAUTHORITY) будут установлены системой.
Для настройки автоматического входа:
- Откройте конфигурационный файл управления вашим диспетчером (например, GDM, LightDM и др.) в зависимости от вашего окружения.
- Убедитесь, что параметры автоматического входа для нужного пользователя включены.
3. Использование автозапуска
После того как автоматический вход настроен, вы можете воспользоваться функцией автозапуска вашего видео-клиента. В зависимости от вашего рабочего окружения, файлы автозапуска могут находиться в различных местах. Например, для большинства дистрибутивов Linux с GNOME/XFCE они могут располагаться в ~/.config/autostart/
.
Создайте новый .desktop
файл:
[Desktop Entry]
Type=Application
Name=Video Client
Exec=/home/user/client.sh
X-GNOME-Autostart-enabled=true
Этот файл будет автоматически запускать ваш скрипт client.sh
при входе в систему.
4. Тестирование и отладка
После выполнения всех шагов хорошо протестируйте вашу систему, чтобы убедиться, что видео-клиент автоматически запускается, подключается к серверу и корректно отображает и сохраняет видео. Если возникают ошибки, вы можете использовать логи systemd для отладки:
journalctl -u client.service -f
5. Упрощение через SSH
Если вам необходимо запускать процессы удаленно, можно рассмотреть вариант использования SSH в сочетании с такими библиотеками, как Paramiko. Однако имейте в виду, что это приведет к дополнительным зависимостям и усложнит вашу настройку.
Заключение
Настройка FFMPEG или VLC как сервиса на CentOS 7 требует особого внимания к переменным окружения X11 и правильной конфигурации системы. Автоматический вход в систему и использование функции автозапуска являются удобными альтернативами, которые могут значительно упростить процесс и избежать множества потенциальных проблем. Эти шаги обеспечат, что ваше видео-стриминговое приложение функционирует стабильно и без сбоев.