Systemd/networkd/dispatcher: Difference between revisions
Appearance
imported>Onny mNo edit summary |
imported>Onny Update interface to latest PR state |
||
| Line 3: | Line 3: | ||
{{Note|Parts of this instruction and module are not yet stable and will be available in the upcoming NixOS 23.05 release.}} | {{Note|Parts of this instruction and module are not yet stable and will be available in the upcoming NixOS 23.05 release.}} | ||
== | == Usage == | ||
The following example triggers a script every time the networkd state <code>routable</code> or <code>off</code> is reached. This is the case when you connect to a new network or quit an existing connection as with [[OpenVPN]]. An additional check ensures that the affected interface corresponds to <code>wlan0</code> and that the uplink is <code>configured</code>. After that the [[Tor]] daemon gets restarted. | |||
<syntaxhighlight lang="nix"> | <syntaxhighlight lang="nix"> | ||
services.networkd-dispatcher | services.networkd-dispatcher = { | ||
enable = true; | |||
rules."restart-tor" = { | |||
onState = ["routable" "off"]; | |||
script = '' | |||
#!${pkgs.runtimeShell} | |||
if [[ $IFACE == "wlan0" && $AdministrativeState == "configured" ]]; then | |||
{ | echo "Restarting Tor ..." | ||
systemctl restart tor | |||
if [[ $IFACE == "wlan0" && $AdministrativeState == "configured" ]]; then | fi | ||
exit 0 | |||
fi | ''; | ||
exit 0 | }; | ||
}; | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Revision as of 19:32, 8 March 2023
Networkd-dispatcher is a dispatcher service for systemd-networkd connection status changes. This daemon is similar to NetworkManager-dispatcher, but is much more limited in the types of events it supports due to the limited nature of systemd-networkd.
Note: Parts of this instruction and module are not yet stable and will be available in the upcoming NixOS 23.05 release.
Usage
The following example triggers a script every time the networkd state routable or off is reached. This is the case when you connect to a new network or quit an existing connection as with OpenVPN. An additional check ensures that the affected interface corresponds to wlan0 and that the uplink is configured. After that the Tor daemon gets restarted.
services.networkd-dispatcher = {
enable = true;
rules."restart-tor" = {
onState = ["routable" "off"];
script = ''
#!${pkgs.runtimeShell}
if [[ $IFACE == "wlan0" && $AdministrativeState == "configured" ]]; then
echo "Restarting Tor ..."
systemctl restart tor
fi
exit 0
'';
};
};
Please refer upstream documentation for configuration syntax and additional examples.