Действительно ли возможно заставить systemd единицу ожидать, пока все ее Конфликты = не останавливаются прежде, чем попытаться запуститься?

У меня была проблема в том, что обнаружение наушников отключило динамик, который, очевидно, подключен к разъему для наушников в ноутбуке. HDA-intel на Fujitsu Siemens Amilo 1520 здесь.

Что должно дать вам ключ к разгадке, так это то, что на вашей звуковой карте открыт alsamixer, и вы видите, что на регуляторы громкости для динамика и наушников влияют (при подключении наушников, отключении звука динамика и включении наушников, и наоборот).

затем с помощью выбранной мною hdajackretask: зеленые наушники (задняя сторона) - выберите переопределение - и установите «внутренний динамик»

, затем вы можете проверить, подключив и отключив наушники, если они подходят для вашей конфигурации (документация скудная).

В моем случае это сработало, и я нажал кнопку «Установить переопределение загрузки». Перезагрузите систему и получите рабочий звук ...

(Я действительно хотел бы знать, что у него внутри, узнаю это когда-нибудь позже.)

1
30.08.2018, 18:28
2 ответа

Я предполагаю, что ваша команда ExecStop=выполняет асинхронную операцию, например, посылает сигнал завершения процессу, а затем завершает работу непосредственно перед завершением завершения процесса.

Убедитесь, что ваша команда ExecStop=является синхронной операцией, которая не завершается до тех пор, пока служба не будет полностью отключена.

0
28.01.2020, 00:29

Если ваш процесс относится к Type=exec, вы можете использовать следующее, чтобы дождаться его завершения после запроса на завершение:https://github.com/systemd/systemd/issues/13284#issuecomment-784556633

[Service]
# Type must be set correctly for $MAINPID detection to work
Type=exec
ExecStart=/path/to/myservice/start-command
ExecStop=/path/to/myservice/stop-command
ExecStop=/usr/bin/sh -c 'while kill -0 $MAINPID 2>/dev/null; do sleep 1; done'
TimeoutStopSec=15
0
15.04.2021, 22:10

Теги

Похожие вопросы