9 linux usb arch-linux systemd
我想编写一个依赖于 USB WiFi 加密狗存在的 systemd 服务。只要在设备未插入时它不启动,它就不需要在设备插入时启动。我怎样才能做到这一点?
systemd 配置文件采用 network@.conf 格式。它使用%i占位符。所以我尝试将其添加到单元文件中:
[Path]
PathExists = /dev/%i
Run Code Online (Sandbox Code Playgroud)
哪里%i会有类似的东西wlan0。不幸的是,这完全被忽略了,所以我可能不明白这一节的正确用法。
我也试过:
[Unit]
....
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device
Run Code Online (Sandbox Code Playgroud)
我是从某个地方捡到的(我忘了在哪里),这也不起作用。
您需要结合udev和systemd。
在/etc/udev/rules.d/95-mywifi.rules中为udev添加一条新规则,如下:
ACTION=="add", ATTRS{idVendor}=="...", ATTRS{idProduct}=="...", SYMLINK=="mywifi", TAG+="systemd", ENV{SYSTEMD_WANTS}="netctl-auto@mywifi.service"
Run Code Online (Sandbox Code Playgroud)
(您必须用适合您的加密狗的供应商和产品代码替换点)。
现有的netctl-auto@.service是:
# cat /lib/systemd/system/netctl-auto\@.service
[Unit]
Description=Automatic wireless network connection using netctl profiles
Documentation=man:netctl.special(7)
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device
Before=network.target
Wants=network.target
[Service]
ExecStart=/usr/bin/netctl-auto start %I
ExecStop=/usr/bin/netctl-auto stop %I
RemainAfterExit=yes
Type=forking
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
为此,您必须设置netctl配置文件,请参阅Arch Linux Wiki以了解如何执行此操作。