如何使sysfs更改持续在centos 7(systemd)

Kev*_* G. 3 linux centos systemd

我试着在CentOS 7上修复苹果键盘上的fn键

$ cat /etc/modprobe.d/hid_apple.conf
options hid_apple fnmode=2
Run Code Online (Sandbox Code Playgroud)

然而在重启之后

$ cat /sys/module/hid_apple/parameters/fnmode
1
Run Code Online (Sandbox Code Playgroud)

互联网上的建议包括运行update-initramfs,这在Centos 7上似乎不存在,并在/etc/rc.local中执行"echo 2 >>/sys/module/hid_apple/parameters/fnmode",其中在systemd下,课程根本不存在.

什么是坚持这种设置的正确方法?

小智 7

有三种方法可以实现这一目标:

  1. rc.local(仍然可以,在添加行之后记得chmod + x)
  2. systemd
  3. udev规则(我自己的首选)

使用systemd:

# /etc/systemd/system/hid_apple_fnmode_set.service 
[Unit]
Description=Set Apple keyboard fn mode
After=multi-user.target

[Service]
ExecStart=/usr/bin/bash -c '/usr/bin/echo 2 > /sys/module/hid_apple/parameters/fnmode'

[Install]
WantedBy=graphical.target
Run Code Online (Sandbox Code Playgroud)

接下来是使服务在启动时运行.

sudo systemctl enable hid_apple_fnmode_set.service
Run Code Online (Sandbox Code Playgroud)

使用udev规则:

# /etc/udev/rules.d/99-hid_apple.rules
SUBSYSTEM=="module", DRIVER=="hid_apple", ATTR{parameters/fnmode}="2"
Run Code Online (Sandbox Code Playgroud)

systemd脚本和udev规则与一些疯狂的猜测放在一起,可能需要一些调整才能工作.以下命令可以帮助调整和调试udev规则:

udevadm info --attribute-walk --path=/module/hid_apple

udevadm test /sys/module/hid_apple/
Run Code Online (Sandbox Code Playgroud)