У меня есть настраиваемая служба в /etc/systemd/system/microphone_disable_startup.service
[Unit]
Description=Disable microphone on startup
After=alsa-restore.service
[Service]
ExecStart=/opt/bin/check_mic_startup
. Выполняемый сценарий - check_mic_startup, расположенный в / opt / bin
#!/bin/bash
# DEBUG: touch /home/GeorgeMP/Desktop/testfile_works
i_toggle=$(amixer get Capture toggle | grep -c "\[on\]")
if [ $i_toggle = 2 ] ; then
amixer -q set Capture toggle
fi
amixer -q set Capture 0%
echo Microphone turned OFF
exit 0
Как видите, я пытался отладить службу с помощью сенсорной команды, и она работает безупречно, даже когда используется службой. Проблема заключается в более сложных командах в скрипте.
Выполняя systemctl status в моей пользовательской службе, я могу проверить, что служба прошла успешно без ошибок.
microphone_disable_startup.service - Disable microphone on startup
Loaded: loaded (/etc/systemd/system/microphone_disable_startup.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Tue 2020-12-01 17:36:39 CET; 8min ago
Process: 610 ExecStart=/opt/bin/check_mic_startup (code=exited, status=0/SUCCESS)
Main PID: 610 (code=exited, status=0/SUCCESS)
Dec 01 17:36:39 GeorgeMP systemd[1]: Started Disable microphone on startup.
Dec 01 17:36:39 GeorgeMP systemd[1]: microphone_disable_startup.service: Succeeded.
Однако после перезапуска / завершения работы, даже если он выполнен успешно, команда не была выполнена или произошло без какого-либо эффекта, потому что
amixer get Capture
Simple mixer control 'Capture',0
Capabilities: cvolume cswitch
Capture channels: Front Left - Front Right
Limits: Capture 0 - 63
Front Left: Capture 63 [100%] [30.00dB] [on]
Front Right: Capture 63 [100%] [30.00dB] [on]
They are 100% and turned [on].
Они должны быть 0% и [выкл]
Если я выполняю / opt / bin / check_mic_startup из терминала, он работает безупречно. Даже в этом случае, если я запускаю systemctl микрофон_disable_startup.service. Это просто не работает при использовании моей настраиваемой службой микрофон_disable_startup.service В чем проблема?
РЕДАКТИРОВАТЬ 1:
Я изменил свой сценарий на этот, чтобы он также содержал каталог / opt / bin
#!/bin/bash
# DEBUG: touch /home/GeorgeMP/Desktop/testfile_works
# USE THESE IF NEEDED SOMEWHERE ELSE
#DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus"
#DISPLAY=":0.0"
export PATH="$PATH:/opt/bin"
i_toggle=$(/usr/bin/amixer get Capture toggle | grep -c "\[on\]")
if [ $i_toggle = 2 ] ; then
/usr/bin/amixer -q set Capture toggle
fi
/usr/bin/amixer -q set Capture 0%
echo Microphone turned OFF
env > /home/GeorgeMP/Desktop/environment
exit 0
И я проверяю, все ли команды доступны для сценария в новой среде.
Кстати, файл среды, созданный на моем рабочем столе, имеет вид
LC_ADDRESS=en_US.UTF-8
LC_NAME=en_US.UTF-8
LC_MONETARY=en_US.UTF-8
PWD=/
LC_PAPER=en_US.UTF-8
LANG=en_US.UTF-8
INVOCATION_ID=549485b12a4149bb889e55d42711e923
LC_IDENTIFICATION=en_US.UTF-8
SHLVL=1
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_TIME=en_US.UTF-8
JOURNAL_STREAM=9:26568
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/opt/bin
LC_NUMERIC=en_US.UTF-8
_=/usr/bin/env
, поэтому он содержит путь / opt / bin. Он по-прежнему не работает ... но когда я запускаю скрипт в терминале, он работает ...