Я нахожу это раздражающим, когда я забываю останавливать видео прежде, чем закрыть мой ноутбук и затем иметь проигрывание звука при открытии его на публике.
Я пытался добавить следующий сценарий к /lib/systemd/system-sleep
:
#!/bin/bash
amixer -q -D pulse sset Master mute
echo 2 >> /home/user/test
Сценарий, кажется, называют при приостановке, поскольку новые строки добавляются к test
файл (дважды, который мог бы указать, что сценарий также работает на резюме - кто-то может подтвердить это предположение?).
Или аудиосистема повторно включает себя автоматически, или что-то еще неправильно. Но amixer
команда при ручном выполнении хорошо работает.
Какие-либо идеи?
Можно отключить звук звука, прежде чем приостановят путем создания systemd
сервис.
Первый, удостоверьтесь, что Ваш сценарий является исполняемым файлом:
chmod u+x /path/to/your/script.sh
Затем создайте systemd
сервис, который запускает Ваш скрипт путем выполнения:
sudo nano /etc/systemd/system/mute_before_sleep.service
В nano
окно вводят следующее:
[Unit]
Description=Mute sound before suspend
Before=suspend.target
[Service]
ExecStart=/path/to/your/script.sh
User=<your_username>
Environment=DISPLAY=:0
[Install]
WantedBy=suspend.target
В ExecStart=
вводят путь к Вашему сценарию, и в User=
вводят Ваше имя пользователя.
Сохраняют и закрываются nano
путем нажатия Ctrl + O и затем Ctrl + X .
Наконец, включите сервис:
sudo systemctl enable mute_before_sleep.service
TL; DR: среда excution отличается, следовательно amixer команда возвращает ошибку
, сценарий, кажется, называют при приостановке, поскольку новые строки добавляются в "тестовый" файл
Да, это работает, но я протестировал сценарий и amixer
, команда возвращает ошибку (рассмотренный с sudo journalctl -b -u systemd-suspend.service
):
Jan 04 18:46:49 administrator-PC systemd-sleep[12969]: ALSA lib control.c:1373:(snd_ctl_open_noupdate) Invalid CTL pulse
Jan 04 18:46:49 administrator-PC systemd-sleep[12969]: amixer: Mixer attach pulse error: No such file or directory
проблема, кажется, -D pulse
часть. Но более простые работы команды amixer -q set Master mute
. После резюме моему ноутбуку отключили звук объема, ошибка больше не появляется.
дважды - который мог бы указать, что сценарий также работает на резюме - кто-то может подтвердить это предположение?
Да, сценарий работает дважды - после того как на приостанавливают и однажды на резюме; скрипты, запущенные с двумя позиционными параметрами на [1 111] systemd-сон (8) и статья Arch Wiki. Полный сценарий, который я использовал, упоминается ниже (примечание, части, которые звонят echo
и date
, не особенно релевантны и были для отладки только; они могут быть безопасно удалены из сценария):
#!/bin/sh
# this will go into journalctl log
echo SUSPEND SCRIPT STARTED
case $1/$2 in
pre/*) amixer -q set Master mute; { echo Suspending; date >> /suspend_log.txt;} ;;
post/*) { echo "Waking up from $2..."; date;} >> /suspend_log.txt ;;
*) echo foobar;;
esac
Что касается причины, почему исходные amixer управляют работами при выполнении ее вручную, вероятно, основы от того, что, когда systemd запускает скрипт, нет никакого DISPLAY
переменная, существующая в среде. В отличие от этого, при использовании эмулятора терминала GUI, переменная присутствует, следовательно исходные работы команды. Исходная команда может быть адаптирована для использования переменной среды через [1 121]
DISPLAY=:0 amixer -q -D pulse sset Master mute
, но я все еще рекомендовал бы использовать amixer -q set Master mute
в качестве независимой от среды команды.