朝会社に来たらまずはメールの確認ですが、その次にはプロジェクトフォルダを弄りたいんです。
が!!!
プロジェクトフォルダが共有フォルダにある場合はマウントしないと弄れないんです。
mountコマンドを起動時に走らせればいい
一時はこれで解決したかと思ったのですが、スリープ解除後にアンマウントされていることがよくあるんですよね。
今回はこれを解決したいです。
使うプログラム
- Launchd
- SleepWatcher
- AppleScript
SleepWatcherでスリープ解除を検知し、マウントスクリプトを走らせる
簡単なお仕事です。
まずはSleepWatcherをインストール
とその前に、SleepWatcherとはなんぞやということですが、
「Macのスリープ/スリープ解除イベントを検知してプログラムを呼び出す」
というものです。
ここからしばらく以下のサイトをほぼ丸パクリしています。
https://blog.ishkawa.org/2018/11/09/1541697110/
インストールは簡単にbrew
brew install sleepwatcher
SleepWatcherを常駐させる
LaunchAgentに登録することで常に実行できるようです。
ということで下記コマンドを実行してファイルとディレクトリを用意します。
mkdir -p ~/Library/LaunchAgents
cp /usr/local/opt/sleepwatcher/de.bernhard-baehr.sleepwatcher-20compatibility-localuser.plist ~/Library/LaunchAgents/de.bernhard-baehr.sleepwatcher.plist
設定ファイルを見てみましょう。
cat ~/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/PropertyList-1.0.dtd">
<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 ~/.sleep</string>
<string>-w ~/.wakeup</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
一言で言うと、スリープするときに「~/.sleep」が、スリープ解除するときに「~/.wakeup」が実行されます。
なので上記2つのファイルを作って実行権を与えておきましょう。
touch ~/.sleep ~/.wakeup
chmod +x ~/.sleep ~/.wakeup
これでファイル構成の準備は整いました。
ここまで以下のサイトをほぼ丸パクリしています。
https://blog.ishkawa.org/2018/11/09/1541697110/
あとはLaunchAgentが読み込めるように登録します。
launchctl load ~/Library/LaunchAgents/de.bernhard-baehr.sleepwatcher.plist
マウント用のスクリプトを書く
ここまででスリープ/スリープ解除時に自動的にスクリプトを実行する環境が整いました。
続いてはスリープ解除時にマウントするスクリプトを書きます。
シェルスクリプトが極めて苦手なので、AppleScriptを使っています。
vim ~/automount.scpt
on run argv
if (count of argv) > 0 then
delay (item 1 of argv) as integer
end if
try
mount volume "smb://マウントしたいパス1"
delay 1
mount volume "smb://マウントしたいパス2"
delay 1
end try
end run
このスクリプトはコマンドライン引数で数値を与えると、その秒数後にマウント処理を実行します。後ほど使い道を解説します。
マウントしたいパスは必要に応じて増減できます。
マウントの間のdelayはいわゆるsleep命令なのですが、念の為入れているのだけなので不要かもしれないです。
最後にこいつを.wakeupから呼び出せるようにします。
vim ~/.wakeup
osascript ~/automount.scpt 120
これでスリープ解除して120秒後にマウント処理を開始します。
やりましたね!
なぜ120秒後かと言うと、スリープ解除直後ってWi-Fiを掴んでいないことが多いんですね。
なので掴むまでの時間としてを120秒待つようにしています。
環境に応じて変更してください。
おまけ
osascript ~/automount.scpt
このようにコマンドライン引数をつけずに実行すると即座にマウントを開始します。
たまにスリープ解除後にWi-fiを掴めなかったり、なぜかアンマウントされてしまったときにすぐ実行できると便利です。
でもいちいちこのコマンド打つのは面倒なので、私はパスの通ったディレクトリにこんなスクリプトファイルを置いています。
vim ~/bin/allmaunt # ~/bin/はパスが通っている前提です
#!/bin/sh
osascript ~/automount.scpt
これでパスを覚えることなく、以下コマンドですぐにマウントできるようになります。
allmount
ならスリープ解除後に自動マウントいらなくね?
と思うかもしれませんが、何事も自動化できることは自動化したほうがいいのです。