Systemd 服务不会将更改保存到磁盘

Systemd 服务不会将更改保存到磁盘

编写了一个简单的keychron.service文件来在每次启动期间覆盖参数。

[Unit]                                                                                                                                                                                                    
Description=The command to make the Keychron K2 work                            
                                                                            
[Service]                                                                       
Type=oneshot                                                                    
ExecStart=/bin/echo 0 | sudo /usr/bin/tee /sys/module/hid_apple/parameters/fnmode
                                                                               
[Install]                                                                       
WantedBy=multi-user.target

该脚本用于修补我的键盘,它只是将 a0写入/sys/module/hid_apple/parameters/fnmode.不幸的是我无法让它工作。以下是我尝试解决该问题时所做的操作。

  1. 检查fnmode1
thekenu:~
$ cat /sys/module/hid_apple/parameters/fnmode
1
  1. 重新启动keychron.service,并使用systemctl status以确保重新启动成功
thekenu:~
$ sudo systemctl restart keychron.service
thekenu:~
$ systemctl status keychron.service
● keychron.service - The command to make the Keychron K2 work
   Loaded: loaded (/etc/systemd/system/keychron.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Wed 2020-07-22 06:33:13 PDT; 3s ago
  Process: 28778 ExecStart=/bin/echo 0 | sudo /usr/bin/tee /sys/module/hid_apple/parameters/fnmode (code=exited, status=0/SUCCESS)
 Main PID: 28778 (code=exited, status=0/SUCCESS)

Jul 22 06:33:13 thekenu-XPS-15-9560 systemd[1]: Starting The command to make the Keychron K2 work...
Jul 22 06:33:13 thekenu-XPS-15-9560 echo[28778]: 0 | sudo /usr/bin/tee /sys/module/hid_apple/parameters/fnmode
Jul 22 06:33:13 thekenu-XPS-15-9560 systemd[1]: Started The command to make the Keychron K2 work.
  1. 预计fnmode0,但仍然是1
thekenu:~
$ cat /sys/module/hid_apple/parameters/fnmode
1
  1. 运行ExecStart命令从keychron.service
thekenu:~
$ /bin/echo 0 | sudo /usr/bin/tee /sys/module/hid_apple/parameters/fnmode
0
  1. 现在fnmode0。但似乎我只是输入了keychrone.service应该做的事情。
thekenu:~
$ cat /sys/module/hid_apple/parameters/fnmode
0

答案1

ExecStart不是普通的 shell 线。从systemd.service(5)

执行开始=

启动此服务时执行的带有参数的命令。根据下面描述的规则,该值被分成零个或多个命令行(请参阅下面的“命令行”部分)。

您正在操作系统单元,而不是用户单元,因此您已经root并且不需要使操作复杂Execsudo

ExecStart=/bin/bash -c "echo 0 > /sys/module/hid_apple/parameters/fnmode"

相关内容