USB WiFiドングルの存在に依存するsystemdサービスを書きたいのですが。デバイスが接続されていないときに起動しない限り、デバイスが接続されているときに起動する必要はありません。これを行うにはどうすればよいですか?
Systemd構成ファイルはnetwork @ .conf形式です。 %i
プレースホルダーを使用します。だから私はこれをユニットファイルに追加してみました:
[Path]
PathExists = /dev/%i
%i
はwlan0
のようになります。残念ながら、これは完全に無視されるため、このセクションの適切な使用法を理解できない可能性があります。
私も試しました:
[Unit]
....
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device
私はどこから拾ったのか(どこで忘れたか)、それもうまくいきません。
udevとsystemdを組み合わせる必要があります。
次のように、/ etc/udev/rules.d /95-mywifi.rulesにudevの新しいルールを追加します。
ACTION=="add", ATTRS{idVendor}=="...", ATTRS{idProduct}=="...", SYMLINK=="mywifi", TAG+="systemd", ENV{SYSTEMD_WANTS}="[email protected]"
(ドットの代わりに、ドングルに適したベンダーコードと製品コードを使用する必要があります)。
既存の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
これが機能するためには、netctlプロファイルをセットアップする必要があります。その方法については、 Arch Linux Wiki を参照してください。 。