编写了一个简单的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
.不幸的是我无法让它工作。以下是我尝试解决该问题时所做的操作。
- 检查
fnmode
是1
thekenu:~
$ cat /sys/module/hid_apple/parameters/fnmode
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.
- 预计
fnmode
是0
,但仍然是1
thekenu:~
$ cat /sys/module/hid_apple/parameters/fnmode
1
- 运行
ExecStart
命令从keychron.service
thekenu:~
$ /bin/echo 0 | sudo /usr/bin/tee /sys/module/hid_apple/parameters/fnmode
0
- 现在
fnmode
是0
。但似乎我只是输入了keychrone.service
应该做的事情。
thekenu:~
$ cat /sys/module/hid_apple/parameters/fnmode
0
答案1
ExecStart
不是普通的 shell 线。从systemd.service(5)
:
执行开始=
启动此服务时执行的带有参数的命令。根据下面描述的规则,该值被分成零个或多个命令行(请参阅下面的“命令行”部分)。
您正在操作系统单元,而不是用户单元,因此您已经root
并且不需要使操作复杂Exec
化sudo
:
ExecStart=/bin/bash -c "echo 0 > /sys/module/hid_apple/parameters/fnmode"