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.tgzauf dem Schreibtisch entpacken.- Ins Verzeichnis wechseln:
cd ~/Desktop/sleepwatcher_2.2.1/ - Sourcecode bewegen:
mv ./sources/* ./; rm -R ./sources/ Makefileim 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
sleepwatchererzeugt 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
sleepwatcheranlegen: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
sleepwatcherund 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
sleepwatcherundman sleepwatcherfunktionieren. - Leider berücksichtigt
open x-man-page://...bis heute nicht Dateien aus/etc/manpaths.d/. Wenn man das will, muß/etc/man.confdirekt geändert werden:sudo nano /etc/man.confund 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://sleepwatcherfunktionieren.
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
nanoverlassen. - Das Skript als ausführbar markieren:
chmod a+x ~/Applications/sleepwatcher/wakeup.sh - Das Skript testen:
~/Applications/sleepwatcher/wakeup.shEs 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
nanoverlassen. - 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
unloadund anschließendenloadBefehls, um Änderungen in der Dateide.bernhard-baehr.sleepwatcher.plistwirksam 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.