Вопрос или проблема
Я использую PI Bookworm 32 бита
Статическое имя хоста: MBMCAM4
Имя иконки: компьютер
ID машины: 1d1c25fe35934cf08b2c7892eb34e3f9
ID загрузки: b653854274274fe8850a1c79ebc5264c
Операционная система: Raspbian GNU/Linux 12 (bookworm)
Ядро: Linux 6.6.31+rpt-rpi-v7
Архитектура: arm
Я запускаю простую программу, чтобы она запускалась при загрузке и записывала аудио и видео. Я использую приложения RPICAM.
Если я подожду после загрузки и вызову основную точку входа программы (startmulticam4.py), всё работает отлично. Однако, если я позволю SystemD обрабатывать загрузку, я получаю следующую ошибку до запуска основной программы:
Мой файл юнита приведен ниже:
[Unit]
Description=Multicam4
After=sound.target
[Service]
WorkingDirectory=/home/dbbarron/video
Type=idle
User=dbbabcde
ExecStart=/bin/python3 /home/dbbarron/startmulticam4.py
Restart=Always
RestartSec=10
[Install]
WantedBy=sound.target
13 октября 10:02:23 MBMCAM4 python3[772]: ERROR: *** libav: не удается открыть входное устройство pulse по умолчанию ***
Я попробовал несколько вещей, основанных на комментариях на этом форуме, но ничего не дает значительного эффекта. Мысли?
Ответ или решение
Ваша проблема с загрузкой PulseAudio и ALSA при использовании systemd на Raspbian Bookworm 32-bit имеет несколько возможных причин и решений. Давайте детально рассмотрим эти аспекты.
Контекст Проблемы
Вы используете Raspberry Pi с установленной операционной системой Raspbian GNU/Linux 12 (Bookworm), и ваша цель — автоматически запускать программу для записи аудио и видео с использованием RPICAM. При этом, когда вы позволяете systemd управлять загрузкой, возникает ошибка: ERROR: *** libav: cannot open pulse input device default ***
. Однако, если вы запускаете скрипт после загрузки вручную, он работает без каких-либо неполадок.
Возможные Причины
-
Порядок Загрузки PulseAudio и ALSA: Ваша настройка systemd говорит, что служба Multicam4 должна запускаться после
sound.target
. Однако PulseAudio может еще не инициализироваться к моменту, когда ваш сервис попытается получить доступ к аудио. В результате, библиотека libav не может найти PulseAudio, что приводит к ошибке. -
Пользовательские Права: Возможно, что ваша служба запускается с недостаточными правами для доступа к PulseAudio. При ручном запуске ваша текущая сессия может обладать необходимыми правами, тогда как служба systemd может вести себя иначе.
-
Настройки PulseAudio: PulseAudio может быть настроен на запуск только в сессии X или для пользователя, что также может вызвать проблемы с доступом к устройствам.
Рекомендации по Решению
-
Измените Порядок Загрузки: Попробуйте изменить зависимость в вашем unit-файле, добавив
After=pulseaudio.service
, чтобы убедиться, что PulseAudio загружается перед вашей службой. Ваш unit-файл может выглядеть следующим образом:[Unit] Description=Multicam4 After=sound.target pulseaudio.service [Service] WorkingDirectory=/home/dbbarron/video Type=idle User=dbbabcde ExecStart=/bin/python3 /home/dbbarron/startmulticam4.py Restart=Always RestartSec=10 [Install] WantedBy=sound.target
-
Проверьте Права На Доступ к Устройствам: Убедитесь, что пользователь
dbbabcde
имеет доступ к устройствам PulseAudio. Вы можете попробовать запустить ваш скрипт с помощьюsudo
, чтобы проверить, не связана ли проблема с правами доступа. -
Настройте Параметры PulseAudio: Убедитесь, что PulseAudio правильно инициализируется в окружении systemd. Вы можете попробовать добавить в конфигурацию PulseAudio дополнительные параметры, такие как
default-server
, чтобы указать, где найти PulseAudio сервер. -
Логи и Дебаггинг: Проверьте логи systemd с помощью команды
journalctl -xe
и найдите диагностическую информацию, которая может помочь выяснить, что происходит в момент запуска вашей службы. Это может дать дополнительные указания на проблему. -
Зависимость На Уровне Сессии: Попробуйте реализовать вашу программу так, чтобы она не зависела от PulseAudio, если это возможно, либо рассмотреть использование ALSA без PulseAudio, чтобы избежать конфликтов, связанных с их совместным использованием.
Заключение
Ваша проблема с ошибкой libav: cannot open pulse input device default
может быть вызвана рядом факторов, включая порядок загрузки служб и права доступа. Применив вышеописанные рекомендации, вы сможете устранить возникшие проблемы и обеспечить корректный запуск вашей программы записи аудио и видео. Если вопрос не будет решен, рассмотрите возможность консультации с сообществом или профессионалами, занимающимися технической поддержкой для получения дополнительной помощи.