c’t 12/2025
Het einde van Windows 10 - of niet?
Cover van
Linux NetworkManager

Linux NetworkManager: scripts uitvoeren bij het wisselen van netwerk

Bij veel Linux-distributies zorgt de NetworkManager-daemon meestal onopvallend op de achtergrond voor de netwerkverbindingen. Maar die service kan naar wens ook scripts uitvoeren bij het wisselen van netwerk. We laten zien hoe je zelf zo’n script maakt om de NetworkManager in Linux te gebruiken.

Lees verder na de advertentie

Tip!

De laptop waar kracht, creativiteit en AI samenkomen!
De laptop waar kracht, creativiteit en AI samenkomen!

Ontworpen voor creators en professionals: configureer jouw eigen ASUS ProArt P16 nu.

Wat kun je met de Linux NetworkManager?

De daemon NetworkManager gaat verder dan wat zijn grafische gebruikersinterfaces in Gnome, Cinnamon en andere Linux-desktops suggereren. Het probeert automatisch een werkende netwerkverbinding op de achtergrond tot stand te brengen via een bekabelde aansluiting, wifi of VPN zoals NordVPN. NetworkManager biedt ook een service genaamd de Dispatcher, die zelf gemaakte scripts uitvoert wanneer er wijzigingen zijn in de netwerkverbinding. Je kunt bijvoorbeeld automatisch een netwerkshare mounten zodra je laptop verbinding maakt met het thuisnetwerk. Of je kunt de accuduur verlengen door wifi uit te schakelen zodra je een netwerkkabel aansluit.

Hoe werkt de Linux NetworkManager?

NetworkManager doorzoekt de directory’s /etc/NetworkManager/dispatcher.d en /usr/lib/NetworkManager/dispatcher.d en voert de aanwezige uitvoerbare scripts in alfabetische volgorde uit bij het maken van een verbinding. Bij het verbreken wordt de omgekeerd alfabetische volgorde gevolgd. Voor de duidelijkheid is het handig scriptnamen met cijfers te beginnen (10-scripta, 20-scriptb).

Het opslaan van scripts

Aangezien /usr/lib bedoeld is voor distributiescripts, moet je je eigen scripts opslaan in /etc/ NetworkManager/dispatcher.d, zodat die niet overschreven of verwijderd worden tijdens updates. Het script moet toebehoren aan de gebruiker root en alleen die mag schrijftoegang hebben, anders zal NetworkManager het negeren.

Argumenten doorgegeven aan scripts

Wanneer het wordt aangeroepen, geeft NetworkManager twee argumenten door aan de scripts: de naam van de netwerkinterface (enx…, tun1 …), gevolgd door de gebeurtenis die de trigger is (up, down, dhcp4-change …), ook wel actie genoemd. Mogelijke waarden staan in de tabel NetworkManager-acties. Bij VPN-verbindingen via plug-ins worden de actienamen voorafgegaan door vpn- (vpn-up, vpn-pre-down …). Dat geldt niet voor (native) WireGuard-verbindingen.


Ontvang informatie en tips over Linux, schrijf je in voor de gratis nieuwsbrief:

Ontvang elke week het laatste IT-nieuws, de handigste tips en speciale aanbiedingen.

Uitvoering van pre-up/pre-down

De acties pre-up/pre-down worden alleen uitgevoerd wanneer NetworkManager de netwerkinterface zelf activeert of deactiveert. Als je bijvoorbeeld de netwerkkabel loskoppelt, heeft NetworkManager niet langer de mogelijkheid om pre-down aan te roepen. Bovendien worden daarbij alleen scripts uitgevoerd die aanwezig zijn in de subdirectory’s pre-up.d of pre-down.d. Het is echter genoeg om een in dispatcher.d aanwezig script te koppelen.

Speciaal geval voor hostname en connectivity-change

De acties hostname en connectivity-change zijn een speciaal geval, die geven none of een leeg veld door als interfacenaam.

Een script maken met Linux NetworkManager

Met het voorbeeldscript hieronder kun je energie besparen door de wifi-interface uit te schakelen wanneer er een netwerkkabel wordt aangesloten. In de alinea’s hieronder zullen we het voorbeeldscript verder voor je toelichten.

#!/bin/bash IFACE=”$1″; EVENT=”$2″ # Lijst van te monitoren netwerknamen DEVICES=”eth0 enx1234567890AF” # Debug-informatie logger “Netwerk-dispatcher: iface:$IFACE event:$EVENT” “id: $CONNECTION_ID uuid: $CONNECTION_UUID” # Als $DEVICES de tekenreeks uit $IFACE bevat, dan… if [[ $DEVICES =~ $IFACE ]]; then # Afhankelijk van EVENT, wifi aan- of uitschakelen.

case “$EVENT” in up) logger “Netwerk-dispatcher: schakel wifi uit.” nmcli radio wifi off ;; down) logger “Netwerk-dispatcher: schakel wifi aan.” nmcli radio wifi on ;; esac fi

Argumenten toewijzen aan variabelen

Om de leesbaarheid te vergroten, wijst regel 2 de doorgegeven argumenten toe aan de variabelen $IFACE en $EVENT. De parameters $1 en $2 staan tussen aanhalingstekens om te voorkomen dat een leeg veld, zoals bij connectivity-change, fouten veroorzaakt. Om het debuggen te vergemakkelijken, schrijft de logger details van de dispatcher-aanroep naar het systeemlogboek. Je kunt dit bekijken door journalctl -f aan te roepen in een terminalvenster.

Andere omgevingsvariabelen ophalen

Naast de doorgegeven parameters zijn er andere omgevingsvariabelen die je in je script kunt ophalen. Zo bevat $CONNECTION_ID de naam van de verbinding. Een lijst van de beschikbare variabelen is te vinden in de manpage, die je kunt oproepen met man NetworkManager-dispatcher. Sommige variabelen zijn alleen beschikbaar voor bepaalde acties, bijvoorbeeld $CONNECTIVITY_STATE voor connectivity-change.

Bewaakte netwerkinterfaces

Het script definieert een lijst van te bewaken netwerkinterfaces in $DEVICES. Je kunt deze namen vinden met ip link. Als de interfacenaam die door dispatcher wordt doorgegeven op de lijst voorkomt, verwerkt het script de actie. Als de actie up is, deactiveert de opdrachtregeltool nmcli de wifi-interface. Als de actie down is, oftewel de LAN-interface gedeactiveerd is, schakelt nmcli de wifi-interface weer in. Het programma nmcli hoort bij NetworkManager.

Kopieer het script naar de juiste directory

Kopieer het voltooide script met rootrechten naar /etc/NetworkManager/dispatcher.d. Ga vervolgens naar die directory en pas de bestandsrechten aan:

sudo -i cd /etc/NetworkManager/dispatcher.d/ sudo chmod 755 50-wifi-switch.sh sudo chmod a+x 50-wifi-switch.sh

Script uitvoeren met NetworkManager

Om NetworkManager het script voortaan te laten uitvoeren, herstart je de service via Systemd:

sudo systemctl restart NetworkManager

Controleer of NetworkManager het script uitvoert

Gebruik journalctl -f om te zien of de Linux NetworkManager correct start en het script uitvoert wanneer de netwerkkabel wordt aangesloten of losgekoppeld.

Gebruikstips voor Linux NetworkManager

Om ervoor te zorgen dat scripts snel werken, is het belangrijk om rekening te houden met de tijd die het script nodig heeft om te voltooien. NetworkManager heeft namelijk geen exacte limiet voor de uitvoeringstijd van scripts en breekt deze af als het te lang duurt.

Gebruik subdirectory no-wait.d voor parallelle scripts

Als scripts parallel moeten starten, bewaar of koppel deze dan in de subdirectory no-wait.d. NetworkManager wacht niet op scripts en beëindigt ze ook niet als er ondertussen een nieuwe netwerkactie is. Hierdoor kan het voorkomen dat een script blijft proberen om een netwerkshare te mounten bij het maken van een verbinding met het bedrijfsnetwerk, terwijl de netwerkkabel snel achter elkaar wordt aangesloten en losgekoppeld.

Automatiseer acties bij wijziging netwerkverbinding

Door rekening te houden met de snelheid van scripts en parallelle uitvoeringen, kunnen acties geautomatiseerd worden die moeten worden uitgevoerd bij het wijzigen van de netwerkverbinding. Zo kan je ervoor zorgen dat het automatiseren van deze acties op een veilige en efficiënte manier gebeurt.

NetworkManager-acties


Ontvang informatie en tips over Linux, schrijf je in voor de gratis nieuwsbrief:

Ontvang elke week het laatste IT-nieuws, de handigste tips en speciale aanbiedingen.

Tip!

De laptop waar kracht, creativiteit en AI samenkomen!
De laptop waar kracht, creativiteit en AI samenkomen!

Ontworpen voor creators en professionals: configureer jouw eigen ASUS ProArt P16 nu.

0

Praat mee

Abonneer
Laat het mij weten wanneer er
0 Reacties
oudste
nieuwste

Inspiratie in je mailbox

Blijf bij op IT-gebied en verbreed je expertise. Ontvang elke week artikelen over de laatste tech-ontwikkelingen, toepassingen, nieuwe hard- en software én ontvang tips en aanbiedingen.

Loginmenu afsluiten