/etc/systemd/system/volume.service

/etc/systemd/system/volume.service

/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/amixerssetPCM--97%

一重引用符を削除:

ExecStart=/usr/bin/amixer sset PCM - 97%

お使いのデバイスが動作します。

答え2

ユニットファイル「ドロップイン」の生成

これにより、アップグレード(アップストリームの変更)を台無しにすることなく、ユニットファイルを変更できます。ユニットファイルはブレーキングチェンジ(ここでは団体条約のようです)の対象にしてはいけませんので、ダウンストリーム変更(ドロップイン)は長期的に効果的でなければなりません。

個人的には変えたいalsa-restore.service。特にこの ExecStart=部分はさらにそうだ。

ExecStart=-@sbindir@/alsactl restore
  1. ドロップフォルダの作成mkdir /etc/systemd/system/alsa-restore.d
  2. 音量を希望のレベルに設定します。 ALSAステータスの保存alsactl store -f /etc/systemd/system/alsa-restore.d/alsa-state
  3. 特別に変更されたインサートユニットファイルの生成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

ノート

関連情報