/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