/etc/systemd/system/volume.service
유닛 파일을 생성하는 것은 이번이 처음입니다.
[Unit]
Description="Set volume level."
After=sound.target
[Service]
Type=simple
ExecStart='/usr/bin/amixer sset PCM -- 97%'
[Install]
WantedBy=multi-user.target
유닛 파일을 업데이트해야 해요
systemctl daemon-reload
Volume.service를 시작하려고 합니다.
systemctl start volume
journalctl -xe
노출된:
systemd[1855]: volume.service: Failed at step EXEC spawning /usr/bin/amixer sset PCM -- 97%: No such file or directory
답변1
해당 줄의 작은따옴표 에 문제가 있습니다 ExecStart
.
ExecStart='/usr/bin/amixer sset PCM -- 97%'
~에 따르면시스템 서비스:
큰 따옴표("...")와 작은 따옴표('...')를 사용할 수 있습니다. 이 경우 다음 일치하는 따옴표까지의 모든 내용은 동일한 매개 변수의 일부가 됩니다.
이는 인수 및 를 /usr/bin/amixer sset PCM -- 97%
사용하는 대신 systemd에 실행하도록 지시한다는 의미입니다 ./usr/bin/amixer
sset
PCM
--
97%
작은따옴표 제거:
ExecStart=/usr/bin/amixer sset PCM -- 97%
귀하의 장치가 작동합니다.
답변2
유닛 파일 "드롭인" 생성
이를 통해 업그레이드(업스트림 변경)를 망칠 필요 없이 유닛 파일을 변경할 수 있습니다. 유닛 파일은 브레이킹 체인지(여기서는 단체 협약인 것 같습니다)의 대상이 되어서는 안 되기 때문에 다운스트림 변경(드롭인)은 장기적으로 효과적이어야 합니다.
개인적으로는 바꾸고 싶다 alsa-restore.service
. 특히 이
ExecStart=
부분은 더욱 그렇다.
ExecStart=-@sbindir@/alsactl restore
- 드롭 폴더 만들기
mkdir /etc/systemd/system/alsa-restore.d
- 볼륨을 원하는 수준으로 설정하십시오. ALSA 상태 저장
alsactl store -f /etc/systemd/system/alsa-restore.d/alsa-state
- 특별히 변경된 인서트 유닛 파일 생성
ExecStart=
/etc/systemd/system/alsa-restore.d/volume.conf
[Service]
ExecStart=/etc/systemd/system/alsa-restore.d/volume.sh
/etc/systemd/system/alsa-restore.d/volume.sh
#!/bin/sh
/usr/sbin/alsactl restore -f /etc/systemd/system/alsa-restore.d/alsa-state