pyopyopyo - Linuxとかプログラミングの覚え書き - (original) (raw)

macOSでネット切替時にスクリプトを自動実行する方法です

といった場合に利用できます

動作原理

起動したいコマンドを /path/to/reconnect.sh とします

macOSはネットワークの構成が変わるとDNSを再設定します
例えば

は,DNSが再設定されます

DNSの設定はファイル /etc/resolv.conf に保存されます.つまりネット切替時は,ファイル /etc/resolv.conf のタイムスタンプが更新されます.

そこでファイルのタイムスタンプを監視し,タイムスタンプが更新されたら コマンド /path/to/reconnect.sh を実行する,という設定を launchd に登録します.

launchd の設定

plist ファイルの作成

以下の内容で ~/Library/LaunchAgents/reconnect.plist を作成します

xml version="1.0" encoding="UTF-8" Label networkchange LowPriorityIO ProgramArguments /path/to/reconnect.sh WatchPaths /var/run/resolv.conf RunAtLoad

/path/to/reconnect.sh の部分は適宜修正してください.ここで起動したいスクリプトをフルパスで指定します

構文のチェック

$ plutil -lint reconnect.plist reconnect.plist: OK

動作確認

動作確認は launchctl コマンドで行います

load で登録,

$ launchctl load ~/Library/LaunchAgents/reconnect.plist

unloadで登録解除です

$ launchctl unload ~/Library/LaunchAgents/reconnect.plist

なおLoad済みの状態で,再度 launchctl load すると「Load failed: 5: Input/Output error」のエラーがでます

自動登録

設定は不要です

設定ファイルで RunAtLoad を指定しているので,ログイン時に自動で loadされます

jupyter notebookで plotly が動作しない場合は,
jupyter lab を使うと plotly が動作するようになります

コマンドラインから notebookを起動している場合は

$ jupyter notebook

で notebookを起動せずに,代わりに

$ jupyter lab

で jupyter lab を起動すれば plotly が動作します

2024年の春辺りからnotebook の仕様変更に plotly が追従できてないようで,2024年の10月の時点では深く考えずに jupyter lab を使うのが得策のようです.