Вы прямо заявили, что хотите найти решение, используя vi
. Но этого также можно добиться с помощью однострочной -инструкции sed
sed -i -e 's/.*CPU_check/# &/' -e 's/.*Memory_check/# &/' crontab
Это решение изменяет встроенный файл. Вы можете сохранить резервную копию файла, изменив флаг -i
на -i.bak
в вызове sed.
Прежде чем перейти к пользовательской службе ниже, alsa перезагрузит вашу конфигурацию, проверив, существует ли /var/lib/alsa/asound.state
и что в ней находится (ваш список звуковых устройств ), через systemd alsa-restore.service
, который запускается при загрузке (для перезагрузки вашей конфигурации )и при выключении (для сохранения вашей последней конфигурации)
Важно сначала проверить, существует ли эта конкретная служба с помощью
sudo systemctl status alsa-restore.service
и статус должен сообщать
alsa-restore.service - Save/Restore Sound Card State
Loaded: loaded (/lib/systemd/system/alsa-restore.service; static; vendor preset: enabled)
Active: active (exited) since Sun 2020-09-27 11:43:13 EDT; 5h 43min ago
Docs: man:alsactl(1)
Main PID: 755 (code=exited, status=0/SUCCESS)
Tasks: 0 (limit: 11833)
Memory: 0B
CGroup: /system.slice/alsa-restore.service
Sep 27 11:43:13 FOOT systemd[1]: Starting Save/Restore Sound Card State...
Sep 27 11:43:13 FOOT systemd[1]: Finished Save/Restore Sound Card State.
Служба восстановления alsa -, расположенная в /lib/systemd/system/alsa-restore.service
, должна выглядеть так:
#
# Note that two different ALSA card state management schemes exist and they
# can be switched using a file exist check - /etc/alsa/state-daemon.conf.
#
[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
если эта служба существует, но отключена, вы можете включить и запустить ее с помощью
sudo systemctl enable alsa-restore.service
sudo systemctl start alsa-restore.service
Если sudo systemctl status alsa-restore.service
сообщает о какой-либо дополнительной ошибке в своем статусе, которая приводит к сбою, возможно, сначала необходимо решить эту проблему.
После двойной -проверки alsa force-reload
не является одноразовой командой-оболочкой для alsactl
, а вместо этого отвечает за перезапуск соответствующей службы alsa, который происходит в два этапа: сначала останавливается, а затем снова запускается.
Подводя итог, sudo alsa force-reload
делает следующее
alsactl
быть обнаружена, и, если нет, она сразу завершается /usr/share/alsa/utils.sh
, который, среди прочего, предоставляет некоторые функции индексации./var/lib/alsa/asound.state
alsactl -E HOME="$ALSACTLHOME" -E XDG_RUNTIME_DIR="${ALSACTLRUNTIME}" restore $CARD >/dev/null 2>&1
для восстановления состояний томов для каждой карты, найденной в asound.state
Шаг #4 — это именно то, что alsa-restore.service
выполняет при загрузке и завершении работы при правильной работе, следовательно, все проблемы указывают на то, что он отключен или отсутствует вообще.
Мы уже знаем, что alsactl
существует в вашей системе, потому что alsa force-reload
работает, но В следующий раз, когда вы перезагрузитесь и ваш звук не перезагрузится автоматически, вместо использования alsa force-reload
попробуйте запустить из терминала:
sudo /usr/sbin/alsactl -E HOME=/run/alsa -E XDG_RUNTIME_DIR=/run/alsa/runtime restore
Если эта команда восстанавливает ваш звук, то это то, что вы хотите запускать при запуске в качестве службы (, и ее соответствующую версию также запускать при завершении работы )в соответствующий момент.
Следовательно, если alsa-restore.service
не существует в вашей системе, вы должны тогда и только тогда создать свой собственный myaudio.service
вот так:
sudo nano /etc/systemd/system/myaudio.service
Скопируйте в него следующее:
[Unit]
Description=Start Audio
ConditionPathExists=!/etc/alsa/state-daemon.conf
[Service]
Type=oneshot
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
RemainAfterExit=true
[Install]
WantedBy=sound.target
Сохранение, затем:
sudo systemct enable myaudio.service
sudo systemctl start myaudio.service
sudo systemctl status myaudio.service
Который включит, запустит и сообщит о состоянии вашей новой службы. Если 3 команды выполнены без ошибок, вы можете перезагрузить компьютер и протестировать его.
Это сообщение ¨code=exited, status=99¨, вероятно, связано с тем, что он не является членом аудиогруппы.
sudo usermod -a -G audio username
Затем перезагрузитесь и проверьте с помощью:
journalctl -b | grep alsa