Netzlaufwerke bleiben unter macOS nicht verbunden

Seit dem Update auf macOS Catalina (10.15) hat mein Mac Probleme damit, Netzlaufwerke zu behalten, die über SMB verbunden wurden. Kehrt der Mac aus dem Ruhezustand zurück, werden die Laufwerke zwar noch als verbunden angezeigt, beim Zugriff sind jedoch keinerlei Inhalte mehr sichtbar. Kurz danach werden die Laufwerke auch getrennt. Teilweise hilft dann nur noch ein Neustart, damit die Laufwerke wieder verbunden werden können. Um das Problem zu lösen, habe ich diverse Blogs und Foren durchforstet, jedoch keine Lösung finden können. Apple hat mit macOS 10.15 NetBios und SMB v1 deaktiviert. Beides kann natürlich zu grundsätzlichen Problemen führen, die dafür sorgen, dass eine Verbindung gar nicht mehr funktioniert. Diese Punkte konnte ich beide ausschließen, da die grundsätzliche Verbindung unter Catalina genauso funktionierte, wie bereits unter Mojave.

Die Laufwerke wurden jedoch ungewollt getrennt, wenn der Mac aus dem Ruhezustand zurückgekehrt ist. Auch ein DNS Problem konnte ich ausschließen, indem ich die Netzlaufwerke über die IP Adresse des NAS verbunden habe. Dann kam mir die Idee, die Netzlaufwerke automatisch zu trennen, bevor der Mac schlafen geht und automatisch wieder zu verbinden, sobald er aufwacht. Leider bietet macOS erstmal keine direkte Möglichkeit, eine Aktion auszulösen, wenn der Mac schlafen geht bzw. aufwacht. Wäre ja auch zu einfach gewesen. Allerdings gibt es genau dafür das Open Source Werkzeug “Sleepwatcher”. Die Installation kann sowohl manuell als auch über Homebrew erfolgen.

brew install sleepwatcher

Nach der Installation von Sleepwatcher geht es um die Aktionen, die jeweils ausgeführt werden sollen. Da ich bereits die Laufwerke nach einem Neustart durch ein Automator Skript verbinden lasse, nutze ich dieses Vorgehen auch weiterhin. Wie die Verbindung der Laufwerke über Automator funktioniert, habe ich hier beschrieben: Klick

Die Aktionen zum Verbinden der Laufwerke können dann wie folgt aussehen:

macOS Catalina 10.15 Netzlaufwerke SMB Sleepwatcher

Damit die Laufwerke vor dem Ruhezustand getrennt werden, wird eine weitere Automator App benötigt. Als Aktionen werden “Get Specified Finder Items” und “Eject Disk” benötigt.

macOS Catalina 10.15 Netzlaufwerke SMB Sleepwatcher

Jetzt werden noch zwei Shell Skripte angelegt, die dann tatsächlich durch Sleepwatcher ausgeführt werden.

nano ~/Documents/Scripts/sleepwatcher_sleep.sh

Das Skript benötigt folgenden Inhalt.

#!/bin/sh
/usr/bin/open ~/Documents/Scripts/disconnect_nas.app/

Das zweite Skript ist zuständig, sobald der Mac wieder aufwacht.

nano ~/Documents/Scripts/sleepwatcher_wake.sh

Das Skript benötigt folgenden Inhalt.

#!/bin/sh
/usr/bin/open ~/Documents/Scripts/connect_nas.app/

Die Pfade und Dateinamen müssen natürlich mit den eigenen Umgebungen übereinstimmen. Es ist auch nicht zwingend erforderlich, die Laufwerke über Automator Apps zu verbinden bzw. zu trennen. Dies kann auch direkt in den Shell Skripten realisiert werden. Nachdem die Vorbereitungen abgeschlossen sind, wird jetzt noch ein „launchd“ Job benötigt, der die Skripte zur richtigen Zeit automatisiert aufruft, damit die Laufwerke auch getrennt bzw. wieder verbunden werden.

nano ~/Library/LaunchAgents/de.bernhard-baehr.sleepwatcher.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyLi>
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>de.bernhard-baehr.sleepwatcher</string>
        <key>ProgramArguments</key>
        <array>
                <string>/usr/local/sbin/sleepwatcher</string>
                <string>-V</string>
                <string>-s ~/Documents/Scripts/sleepwatcher_sleep.sh</string>
                <string>-w ~/Documents/Scripts/sleepwatcher_wake.sh</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>KeepAlive</key>
        <true/>
</dict>
</plist>

Der neu eingerichtete Job wird mit folgendem Befehl aktiviert.

launchctl load -w ~/Library/LaunchAgents/de.bernhard-baehr.sleepwatcher.plist

Ob der Job läuft, kann über die Kommandozeile geprüft werden.

launchctl list | grep de.bernhard-baehr.sleepwatcher

Diese Lösung läuft jetzt bei mir bereits mehrere Wochen und ich habe seitdem keine Probleme mehr mit meinen Netzlaufwerken. Diese sind immer automatisch verbunden, sobald ich am Rechner sitze.