こんにちは、hachi8833です。平日の通勤に電車で片道2時間かかっているので、車内での作業環境の快適化を長らく模索してきました。
結果、Macbook ProとiPhone(7)の間をUSBケーブルでつないでテザリングするのが今の所最も快適です。パケ死さえ除けば...
必要なもの
- BetterTouchTool -- ショートカット設定以外にもウィンドウサイズ修正やスクリーンショット撮影など非常に細やかな機能が満載です。
- dark-mode -- メニューバーを白黒反転してテザリング中であることを示すのに使っています。つなぎっぱなしを防ぐためです。
- USBケーブル: iPhoneとMacbook Proの接続用。
設定&コード
今後のOSアップデートの影響を受けにくそうなシェルスクリプトにしました。
macOSのネットワークプロファイルを追加する
当初はmacOSのネットワーク設定をスクリプトでコントロールしようと躍起になってましたが、それよりもネットワークプロファイル複数作って切り替える方が断然楽でした。
- USB-iPhone接続がオンのプロファイル(以下では「自動」と表示されていますが、スクリプトでは「Automatic」という名前でアクセスします) -- デフォルト
- USB-iPhone接続がオフのプロファイル(以下ではUSB_Tethering_offという名前) -- これを追加しました
「自動」プロファイルは通常用の設定にし、それを複製してUSB_Tethering_offのプロファイルを作成してから「iPhone USB」という設定を削除しておきます。
dark-modeのインストール
Homebrewで以下を実行してインストールしました。npmでもインストールできるようです。
$ brew install dark-mode
テザリングをトグルするシェルスクリプト
BetterTouchToolからシェルスクリプトを呼び出す場合は、スクリプト内のパスを絶対パスにしておく必要があります。これに気づくのにちょっとかかりました。
#!/usr/bin/env bash
# -*- coding: utf-8 -*-
## iPhone USBへの接続をトグルする。BetterTouchToolの ⌘ + F10 から起動
# set -eux
LOCATION=`networksetup -getcurrentlocation`
if [ $LOCATION = "USB_tethering_off" ]
then
scselect Automatic
echo "Connected to iPhone USB"
/usr/local/bin/dark-mode on
else
scselect USB_tethering_off
echo "Disconnected from iPhone USB"
/usr/local/bin/dark-mode off
fi
BetterTouchToolの設定
BetterTouchToolで「execute terminal command」を追加して適当なキーを割り当てます。
以下の設定を追加します。これも絶対パスにする必要がありました。
以上で快適な車内テザリングができるようになりました。
おまけ
おまけ1: Wi-Fiをトグルするシェルスクリプト
#!/usr/bin/env bash
# -*- coding: utf-8 -*-
## Wi-Fiをトグルする。BetterTouchToolの ⌘ + F9 から起動
set -eux
networkList="$(networksetup -listallhardwareports)"
wifiDEV="$(echo "$networkList" |grep -E '(Wi-Fi|AirPort)' -A 1 | grep -o "en[0-9]")"
# switch wi-fi
if [ -n $wifiDEV ]
then
wifiST="$(networksetup -getairportpower $wifiDEV)"
[[ $wifiST == *On ]] && val=Off || val=On
networksetup -setairportpower $wifiDEV $val && exit 0
fi
おまけ2: Bluetoothをトグルするシェルスクリプト
これを使うにはblueutilのインストールが必要です。
#!/usr/bin/env bash
# -*- coding: utf-8 -*-
## Bluetoothの接続をトグルする。BetterTouchToolの ⌘ + F8 から起動
# set -eux
BLUEUTIL='/Users/hachi8833/bin/blueutil'
STATUS=`$BLUEUTIL status`
if [[ $STATUS = 'Status: off' ]]
then
$BLUEUTIL on
echo "Bluetooth: on"
else
$BLUEUTIL off
echo "Bluetooth: off"
fi