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.