/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%'

根据系统服务

可以使用双引号(“...”)和单引号('...'),在这种情况下,直到下一个匹配的引号为止的所有内容都将成为同一参数的一部分。

这意味着您告诉 systemd 执行/usr/bin/amixer sset PCM -- 97%而不是使用/usr/bin/amixer参数ssetPCM和。--97%

删除单引号:

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

你的单位将会工作。

答案2

创建一个单元文件“drop-in”

这使得更改单元文件而不会搞乱升级(上游更改)成为可能。因为单元文件不应进行重大更改(我想这里是集体协议),所以下游更改(直接插入)应该会长期有效。

就我而言,我想改变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

笔记

相关内容