Netzlaufwerke automatisch wiederverbinden

Neustart

Seit einigen Jahren werden sämtliche Laufwerke beim Ausloggen automatisch ausgeworfen. Um Netzlaufwerke automatisch beim Login bzw. beim Neustart zu verbinden, kann ein AppleScript als ausführbares Programm gespeichert und zu den Anmeldeobjekten hinzugefügt werden. Da beim Neustart das WLAN-Netzwerk ggf. erst nach einigen Sekunden bereitsteht, ist eine Verzögerung von 10 Sekunden eingebaut:

-- Verzögerung
delay 10

-- Prüfen, ob der Server erreichbar ist
set l_result to ""

try
	set l_result to do shell script "ping -c 1 -t 1 server | grep icmp_seq"
end try

-- Nicht erreichbar = Skript beenden
if l_result = "" then
	return
end if

-- Laufwerke verbinden
tell application "Finder"
	try
		mount volume "smb://server/Mount1"
		mount volume "smb://server/Cafe%CC%81"
	end try
end tell

Netzlaufwerke mit Sonderzeichen

AppleScript und der Finder kodieren Sonderzeichen auf unterschiedliche Weise. Café kann sowohl als Caf%C3%A9 als auch Cafe%CC%81 kodiert werden. Zuerst das Netzlaufwerk manuell per Finder mounten und anschließend mit dem Befehl mount die Kodierung ausgeben lassen und übernehmen (siehe Beispiel oben).

Ruhezustand

Der Mac wirft Netzlaufwerke gerne selbstständig während des Ruhezustands aus. Um diese automatisch wiederzuverbinden, ist das Kommandozeilenprogramm sleepwatcher erforderlich. Dieses kann u.a. beim Beenden des Ruhezustands ein Shellskript ausführen. Dieses Shellskript startet dann ein ausführbares AppleScript-Programm, welches die Laufwerke mountet (s. oben) – jedoch ohne die Verzögerung. Dadurch daß der eigentliche Mount-Vorgang nicht durch das Skript, sondern durch ein “normales” Programm realisiert wird, kann dieses im Fehlerfall (z.B. kein Netzwerk oder Server offline) mit der rechten Maus abgebrochen werden.

Installation von sleepwatcher

Diese Anleitung bezieht sich auf Version 2.2.1. Im Ergebnis wird “sleepwatcher” nicht an den üblichen Unix-Verzeichnissen (in diesem Fall /usr/local/sbin) installiert, sondern im von Apple bereitgestellten Programme-Ordner innerhalb des Benutzerordners.

Download und kompilieren:

  • Download von der Homepage von Bernhard Baehr
  • Download des aktualisierten Makefiles
  • sleepwatcher_2.2.1.tgz auf dem Schreibtisch entpacken.
  • Ins Verzeichnis wechseln: cd ~/Desktop/sleepwatcher_2.2.1/
  • Sourcecode bewegen: mv ./sources/* ./; rm -R ./sources/
  • Makefile im Finder ersetzen durch das gerade geänderte.
  • Erweiterte Attribute löschen: xattr -cr ./
  • Zur Sicherheit das alte Programm löschen: make clean
  • Kompilieren: make
  • Es sollte ein ausführbares Kommandozeilenprogramm sleepwatcher erzeugt worden sein.
  • Daß es auch für Apple Silicon kompiliert wurde (“arm64”), kann geprüft werden: file sleepwatcher

Kopieren in den Benutzerordner:

  • In dem Benutzer-Programmeordner einen Unterordner sleepwatcher anlegen: mkdir -p ~/Applications/sleepwatcher; if [ -e ~/Applications/.localized ]; then {}; else { touch ~/Applications/.localized }; fi
  • Programm kopieren: cp ~/Desktop/sleepwatcher_2.2.1/sleepwatcher ~/Applications/sleepwatcher/
  • Orderstruktur für man-Page anlegen: mkdir -p ~/Applications/sleepwatcher/man/man8/
  • man-Page kopieren: cp ~/Desktop/sleepwatcher_2.2.1/sleepwatcher.8 ~/Applications/sleepwatcher/man/man8/

Im Terminal verfügbar machen

  • Damit sleepwatcher und die zugehörige man-Page im Terminal gefunden werden, müssen die PATH- und die MANPATH-Variablen erweitert werden. Hierzu: cd ~/Applications/sleepwatcher/; pwd > ~/Desktop/de.bernhard-baehr.sleepwatcher; sudo cp ~/Desktop/de.bernhard-baehr.sleepwatcher /etc/paths.d/; sudo mv ~/Desktop/de.bernhard-baehr.sleepwatcher /etc/manpaths.d/
  • In einem neuen Terminal-Fenster sollte sleepwatcher und man sleepwatcher funktionieren.
  • Leider berücksichtigt open x-man-page://... bis heute nicht Dateien aus /etc/manpaths.d/. Wenn man das will, muß /etc/man.conf direkt geändert werden: sudo nano /etc/man.conf und dort recht weit oben eine Zeile ergänzen à la: MANPATH /Users/BENUTZER/Applications/sleepwatcher/man
  • In einem neuen Terminal-Fenster sollte nun auch open x-man-page://sleepwatcher funktionieren.

AppleScript-Programm erstellen

  • Das AppleScript-Programm von oben duplizieren und die erste Zeile mit dem delay-Befehl entfernen.
  • Als ausführbares Programm abspeichern und testen, daß die Laufwerke korrekt gemountet werden.

Shellscript erstellen

  • Ein Shellscript erstellen: nano ~/Applications/sleepwatcher/wakeup.sh
  • Folgenden Code einfügen:
#!/bin/sh

# Beim Aufwachen die Netzlaufwerke wieder verbinden.
# Automatisierung durch sleepwatcher.

open "/Users/BENUTZER/Applications/Netzlaufwerke sofort.app"
  • Den absoluten Pfad zu dem AppleScript-Programm anpassen, speichern und nano verlassen.
  • Das Skript als ausführbar markieren: chmod a+x ~/Applications/sleepwatcher/wakeup.sh
  • Das Skript testen: ~/Applications/sleepwatcher/wakeup.sh Es sollte das AppleScript-Programm gestartet werden, welches bei Bedarf die Netzlaufwerke verbindet.

Automatisierung mit sleepwatcher testen

  • Im Terminal folgenden Befehl eingeben: sleepwatcher --verbose --wakeup ~/Applications/sleepwatcher/wakeup.sh
  • Typischerweise werden für Terminal nun Berechtigungen abverlangt. (Nach dem erfolgreichen Test können diese Berechtigungen wieder entzogen werden.)
  • Nach Beenden des Ruhezustands sollte das Skript – und damit das AppleScript-Programm – automatisch gestart werden.

Automatisierung mit sleepwatcher einrichten

  • Eine launchd-Konfiguration anlegen: nano ~/Library/LaunchAgents/de.bernhard-baehr.sleepwatcher.plist
  • Folgenden Code einfügen und den Pfad zum Shellskript anpassen:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>KeepAlive</key>
	<true/>
	<key>Label</key>
	<string>de.bernhard-baehr.sleepwatcher</string>
	<key>ProgramArguments</key>
	<array>
		<string>/Users/BENUTZER/Applications/sleepwatcher</string>
		<string>-V</string>
		<string>-w ~/Applications/sleepwatcher/wakeup.sh</string>
	</array>
	<key>RunAtLoad</key>
	<true/>
</dict>
</plist>
  • Speichern und nano verlassen.
  • Es sollte unmittelbar eine Meldung eingeblendet werden, daß “sleepwatcher” im Hintergrund ausgeführt wird.
  • Starten: launchctl load ~/Library/LaunchAgents/de.bernhard-baehr.sleepwatcher
  • Erforderliche Berechtigung erteilen.
  • Mac in den Ruhezustand versetzen und aufwecken; nach dem Aufwachen muß nochmal eine Berechtigung erteilt werden.
  • Ab jetzt sollte es klappen!
  • Statt des unload und anschließenden load Befehls, um Änderungen in der Datei de.bernhard-baehr.sleepwatcher.plist wirksam werden zu lassen, kann auch in “Systemeinstellungen → Allgemein → Anmeldeobjekte” der Hebel bei “sleepwatcher” aus- und wieder angemacht werden. Wenn “sleepwatcher” erfolgreich geladen wurde, muß er im Programm “Aktivitätsanzeige” zu sehen sein.