Fix: wifi werkt niet na slaapstand

Het kan zijn dat de geïnstalleerde Linuxkernel een bug bevat die erin resulteert dat de wifi van bijvoorbeeld een laptop niet meer functioneert nadat het systeem uit slaapstand ontwaakt is. Het betreft hier een oplossing voor systemen die werken met systemd, wat feitelijk voor de standaard is voor de meest gangbare Linuxdistributies.

Snel en slordig …

Op de diverse online fora circuleert een eenvoudige workaround: een script dat de wifi-hardware uitschakelt zodra de slaapstand wordt geactiveerd en dat bij het ontwaken van het systeem de wifi-hardware weer inschakelt. Een snelle en relatief eenvoudige fix.

#!/usr/bin/env bash
case ${1} in
    pre)
    rfkill block all
    echo “Killed wifi/bluetooth”
    ;;
    post)
    rfkill unblock all
    echo “Started wifi/bluetooth”
    ;;
esac

Een Bash-script dat alle draadloze hardware respectievelijk uit- of inschakelt bij inslapen en ontwaken van het systeem.*

Bovenstaand script dient geplaatst te worden in een speciaal voor dit soort scripts bestemde directory: /usr/lib/systemd/system-sleep, met een willekeurige naam als `wifisleep.sh`. Zorg ervoor dat dit bestand het recht heeft om uitgevoerd te worden.

… of omslachtig op de nette manier

Bovenstaande eenvoudige oplossing werkt niet op bij bestandssystemen die onveranderlijk zijn, zoals mijn favoriete besturingssysteem Aeon Desktop. De mogelijkheid om simpelweg een bestand weg te schrijven in de system-sleep directory ontbreekt. In dat geval rest de standaard manier van werken met systemd. Die houdt in het aanmaken van twee systemd unit-bestanden, die respectievelijk elk geactiveerd dienen te worden met het commando systemctl enable [servicenaam].

De bestandsnaam is willekeurig en in dit geval rfkill-block.service voor het bestand om de wlan-apparatuur uit te schakelen. De feitelijke opdrachtregel is rfkill block wlan.

# file: /etc/systemd/system/rfkill-block.service
# enable: sudo systemctl enable rfkill-block.service

[Unit]
Description=On sleep disable wlan
Before=sleep.target

[Service]
Type=oneshot
ExecStart=rfkill block wlan

[Install]
WantedBy=sleep.target

Script voor het uitschakelen van de wlan-hardware voordat het systeem in slaapstand gaat.

En een bestand rfkill-unblock.service om alle wlan-apparatuur weer in te schakelen. De opdrachtregel waar het hier om gaat, betreft rfkill unblock wlan.

# file: /etc/systemd/system/rfkill-unblock.service
# enable: sudo systemctl enable rfkill-unblock.service

[Unit]
Description=On resume enable wlan
After=sleep.target

[Service]
type=oneshot
ExecStart=rfkill unblock wlan

[Install]
WantedBy=sleep.target

Script voor het inschakelen van de wlan-hardware nadat het systeem uit slaapstand komt.


*. Dit script is overgenomen van het openSUSE-forum.