![/etc/systemd/system/volume.service](https://linux22.com/image/111523/%2Fetc%2Fsystemd%2Fsystem%2Fvolume.service.png)
/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%'
根据系统服务:
可以使用双引号(“...”)和单引号('...'),在这种情况下,直到下一个匹配的引号为止的所有内容都将成为同一参数的一部分。
这意味着您告诉 systemd 执行/usr/bin/amixer sset PCM -- 97%
而不是使用/usr/bin/amixer
参数sset
、PCM
和。--
97%
删除单引号:
ExecStart=/usr/bin/amixer sset PCM -- 97%
你的单位将会工作。
答案2
创建一个单元文件“drop-in”
这使得更改单元文件而不会搞乱升级(上游更改)成为可能。因为单元文件不应进行重大更改(我想这里是集体协议),所以下游更改(直接插入)应该会长期有效。
就我而言,我想改变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