Вопрос или проблема
Я работаю над аудиопроектом с помощью Raspberry Pi 3 (на последней версии Raspbian Jessie) с использованием звуковой карты AudioInjector (http://www.audioinjector.net/) для ввода/вывода. Я пытаюсь сохранить настройки ввода с помощью команды `sudo alsactl store`, но настройки ввода сбрасываются после перезагрузки. Я просто хочу, чтобы линейный вход был включен по умолчанию.
Я изменяю настройки в alsamixer, чтобы включить линейный вход и затем выполняю:
sudo alsactl store 0
Я вижу, что настройки изменились в /var/lib/alsa/asound.state, но они все равно возвращаются при перезагрузке, включая файл asound.state. Я ищу в asound.state следующее:
state.audioinjectorpi {
...
control.4{
iface MIXER
name 'Line Capture Switch'
value.0 false
value.1 false
comment{
access 'read write'
type BOOLEAN
count 2
}
}
...
}
Я также пробовал обходной путь, где добавляю строку:
sudo amixer -c 0 sset Line,0 100%, 100% unmute cap > /home/pi/Desktop/result.txt
в мой /etc/rc.local, который успешно выполняется и создает файл result.txt, показывающий, что команда успешно включила линейный вход, но когда я открываю alsamixer, захват линейного входа снова выключен.
Кажется, что что-то еще происходит во время загрузки, что загружает другие настройки и отключает линейный вход.
Какие-нибудь идеи, что происходит?
Я использую ту же звуковую карту и после долгих исследований выяснил, что путь по умолчанию — это /etc/asound.state.
После того как настроил конфигурацию в этом пути и перезагрузил устройство, все вернулось в правильное состояние, как было определено в файле State.
Если ваша дистрибуция не предоставляет этого, вы можете использовать systemd-сервис, как показано ниже.
> systemctl cat alsa-restore.service
# /lib/systemd/system/alsa-restore.service
#
# Обратите внимание, что существуют две различные схемы управления состоянием звуковых карт ALSA, и они
# могут переключаться с помощью проверки существования файла - /etc/alsa/state-daemon.conf.
#
[Unit]
Description=Сохранить/восстановить состояние звуковой карты
Documentation=man:alsactl(1)
ConditionPathExists=!/etc/alsa/state-daemon.conf
ConditionPathExistsGlob=/dev/snd/control*
After=alsa-state.service
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=-/usr/sbin/alsactl -E HOME=/run/alsa -E XDG_RUNTIME_DIR=/run/alsa/runtime restore
ExecStop=-/usr/sbin/alsactl -E HOME=/run/alsa -E XDG_RUNTIME_DIR=/run/alsa/runtime store
Ответ или решение
Проблема, с которой вы столкнулись, связана с сохранением настроек AlsaMixer на Raspberry Pi 3 при использовании звуковой карты AudioInjector. После перезагрузки настройки входа сбрасываются, несмотря на попытки сохранения с помощью команды sudo alsactl store
.
Причина проблемы:
Скорее всего, причина заключается в том, что система загрузки в Raspbian может указывать на другое местоположение файла состояния ALSA, или загрузочная последовательность может переопределять уже сохраненные настройки. Это может происходить из-за конфликтов в системе управления состоянием звуковых карт или отложенных служб, загружающихся позже и изменяющих настройки.
Решение проблемы:
-
Проверьте путь сохранения состояния ALSA:
Убедитесь, что конфигурационный файлasound.state
, расположенный в/etc/asound.state
, является правильным местоположением для вашего дистрибутива. Из вашего описания следует, что перенесение состояния в/etc/asound.state
решает проблему. -
Используйте systemd для управления состоянием:
Создайте или проверьте существование системной службы ALSA, которая будет правильно сохранять и восстанавливать состояние звуковой карты. Воспользуйтесь следующим шаблоном systemd-сервиса:[Unit] Description=Save/Restore Sound Card State Documentation=man:alsactl(1) ConditionPathExists=!/etc/alsa/state-daemon.conf ConditionPathExistsGlob=/dev/snd/control* After=alsa-state.service [Service] Type=oneshot RemainAfterExit=true ExecStart=-/usr/sbin/alsactl -E HOME=/run/alsa -E XDG_RUNTIME_DIR=/run/alsa/runtime restore ExecStop=-/usr/sbin/alsactl -E HOME=/run/alsa -E XDG_RUNTIME_DIR=/run/alsa/runtime store [Install] WantedBy=multi-user.target
Убедитесь, что данный сервис активирован и запускается автоматически при старте системы.
-
Модификация файлов rc.local:
Проблема может возникать из-за недостатка времени для применения команд восстановления, добавленных вrc.local
. Попробуйте добавить временные задержки или передвинуть данную команду в systemd-сервис, как описано выше. -
Проверка других конфигурационных файлов:
Обязательно проверьте, нет ли других скриптов или конфигурационных файлов, которые могут изменять параметры звуковой карты на более поздних этапах загрузки.
Я надеюсь, что данные шаги помогут вам решить проблему и ваши настройки звука будут сохраняться после перезагрузки. Если возникнут дополнительные вопросы, пожалуйста, не стесняйтесь обратиться за помощью.