Lock/unlock your Mac with your iPhone, Apple Watch, or any other Bluetooth LE devices
BLEUnlockはiPhone, Apple Watchやその他のBluetooth Low Energyデバイスの距離によってMacをロック・アンロックする小さなメニューバーユーティリティーです。
$ brew install bleunlock
Releasesからzipファイルをダウンロードし、解凍してアプリケーションフォルダに移動します。
初回起動時、以下の許可を要求します。適切に許可してください。
許可 | 説明 |
---|---|
Bluetooth | 当然ながら、Bluetoothへのアクセスが必要です。 |
アクセシビリティ | ロック画面を解除するために必要です。システム環境設定の画面で左下のロックアイコンをクリックしてアンロックし、BLEUnlockをオンにしてください。 |
キーチェイン | (要求されない場合もあります) 要求された場合、必ず常に許可を選んでください。ロック中に必要になるためです。 |
通知 | (任意) BLEUnlockはロック中に通知メッセージを表示します。正しく動作しているか確認するのに役立ちます。Big Sur以降、デフォルトでロック画面ではメッセージが表示されません。メッセージを表示するには通知環境設定パネルでプレビューを表示を常にに設定してください。 |
| 必要になる許可はmacOSのバージョンが上がるにつれ増えています。古いmacOSをお使いの場合は上に挙げた許可が表示されない場合があります。
次にあなたのログインパスワードを聞いてきます。これはロック画面を解除するために必要です。キーチェインに安全に保存されます。
最後に、メニューバーアイコンからデバイスを選択してください。近くにあるBLEデバイスのスキャンが始まります。使いたいデバイスを選べば完了です。
BLEデバイスが近くにあるかどうかに関わらず、画面をロックします。BLEデバイスが一度遠ざかり、再び近づくと解除されます。席を離れる前に確実にロックするのに有効です。
ロック解除に必要なBluetooth信号の強度です。値が大きいほどBLEデバイスがMacの近くにないとロック解除しません。無効にするを選ぶとBLEデバイスが近くにあってもロック解除をしません。
MacをロックするBluetooth信号の強度の閾値です。値が小さいほどBLEデバイスがMacから遠い時点でロックをします。無効にするを選ぶとBLEデバイスが遠くなるもしくは信号がなくなってもロックをしません。
BLEデバイスが遠ざかってから実際にロックをするまでの時間です。BLEデバイスがこの時間内に再び近づくと、ロックは行われません。
最後に信号を受信してからロックするまでの時間です。意図せず「デバイスからの信号がありません」でロックされる場合、この値を増やしてください。
ロック中にBLEデバイスが近づいてきたとき、ディスプレイをスリープ画面から復帰させます。
ディスプレイがスリープから復帰したとき(「画面スリープから復帰」による自動または手動に関わらず)、Macをアンロックしません。
これはApple WatchやTouch IDなどのよりセキュアなアンロック機構を使用したい場合に、「画面スリープから復帰」と共に使用すると素早く画面にアクセスできます。
ロック時に音楽や動画の再生を一時停止し、ロック解除時に再開します。対応しているのはApple Music, QuickTime Player, Spotifyなど、再生中ウィジェットやキーボードの⏯キーで制御できるアプリです。
ロック時にスクリーンセーバーを起動します。このオプションが正しく動作するには、セキュリティとプライバシーシステム環境パネルでスリープとスクリーンセーバーの解除にパスワードを要求をすぐにに設定する必要があります。
ロック時にロック画面を表示せずディスプレイをスリープします。
Macのログインパスワードを変更したときに、このオプションを使って変更してください。
デフォルトでBLEUnlockはBLEデバイスに接続を確立し信号強度を読み取ろうとします。これはサポートされているデバイスでは最も安定して信号強度を読み取ることができる方法です。しかしながら、キーボード、マウス、トラックパッドや特にインターネット共有など、他のBluetooth機器を使用している場合、このモードが干渉することがあります。2.4GHz帯のWiFiも干渉する可能性があります。Bluetoothが不安定になる場合は、パッシブモードを有効にしてください。
このRSSI未満のデバイスはデバイススキャンリストに表示されません。
Apple製以外のBLEデバイスでは、BLEUnlockはデバイスの名前を取得できない場合があります。その場合、デバイスはUUID(ハイフンで区切られた長い16進数)で表示されます。
デバイスを識別するには、Macから遠ざけたり近づけたりして、信号強度(dB値)がそれに応じて変化するかどうかを確認してください。
もしリストに何も表示されない場合、下記のBluetoothモジュールのリセットを試してください。
システム環境設定 > セキュリティとプライバシー > アクセシビリティ でBLEUnlockがオンになっているか確認してください。すでにオンになっている場合、一度オフにしてもう一度オンにしてみてください。
もしキーチェインの許可を求められた場合、常に許可を選択してください。ロック中に必要になるためです。
無信号タイムアウトを大きくしてください。それでも解決しない場合、パッシブモードを試してください。
メニューバーもしくはコントロールセンターにあるBluetoothアイコンをShift+Option+クリックし、表示されるBluetoothモジュールのリセットをしてみてください。
macOS 12 Montereyでは、上記のオプションはなくなっています。
代わりに、ターミナルで以下のコマンドを入力してBluetoothモジュールをリセットしてください。
sudo pkill bluetoothd
このコマンドは、ログインパスワードを要求します。
それでも問題が繰り返し起こる場合、パッシブモードをオンにしてください。
クラシックBluetoothと違い、Bluetooth Low EnergyデバイスはプライベートMACアドレスを使うことができます。プライベートアドレスはランダムで、時間が経つと変わることがあります。
最近のスマートデバイスは、iOSとAndroidともに、15分ほどで変わるランダムアドレスを使う傾向にあります。おそらくトラッキング防止のためだと思われます。
一方で、BLEUnlockは、BLEデバイスをトラッキングするために、MACアドレスは静的である必要があります。
幸運なことに、Appleのデバイスでは、Macと同じApple IDでサインインしていれば、真の(パブリック)MACアドレスが取得できます。
Android等、その他のデバイスに関しては、今のところMACアドレスを解決する方法は分かりません。非Apple製デバイスでMACアドレスが時間が経つと変わる場合、残念ながらBLEUnlockはサポートできません。
MACアドレスが正しく解決されているかチェックするには、デバイスのリストに表示されるMACアドレスと、BLEデバイスのアドレスを比較してください。
BLEUnlockはロック・アンロック時に以下のスクリプトを実行します。
~/Library/Application Scripts/jp.sone.BLEUnlock/event
スクリプトにはイベントに応じて以下の引数の一つが渡されます。
Event | Argument |
---|---|
信号強度のためBLEUnlockによりロックされた | away |
無信号のためBLEUnlockによりロックされた | lost |
BLEUnlockによりアンロックされた | unlocked |
手動でアンロックされた | intruded |
注意:
intruded
イベントが正常に働くには、システム環境設定の セキュリティとプライバシー で スリープとスクリーンセーバの解除にパスワードを要求 を すぐに に設定してください。
例としてLINE Notifyにメッセージを送るスクリプトを示します。
手動でアンロックされた場合Macの前にいる人の写真を添付します。
#!/bin/bash
set -eo pipefail
LINE_TOKEN=xxxxx
notify() {
local message=$1
local image=$2
if [ "$image" ]; then
img_arg="-F imageFile=@$image"
else
img_arg=""
fi
curl -X POST -H "Authorization: Bearer $LINE_TOKEN" -F "message=$message" \
$img_arg https://notify-api.line.me/api/notify
}
capture() {
open -Wa SnapshotUnlocker
ls -t /tmp/unlock-*.jpg | head -1
}
case $1 in
away)
notify "$(hostname -s) is locked by BLEUnlock because iPhone is away."
;;
lost)
notify "$(hostname -s) is locked by BLEUnlock because signal is lost."
;;
unlocked)
#notify "$(hostname -s) is unlocked by BLEUnlock."
;;
intruded)
notify "$(hostname -s) is manually unlocked." $(capture)
;;
esac
SnapshotUnlocker
はスクリプトエディタで作った .app で、内容は以下のとおりです。
do shell script "/usr/local/bin/ffmpeg -f avfoundation -r 30 -i 0 -frames:v 1 -y /tmp/unlock-$(date +%Y%m%d_%H%M%S).jpg"
このappはBLEUnlockにカメラのパーミッションがないため必要となります。このappにパーミッションを与えることによりパーミッションの問題を回避できます。
Apple Developer Programの年間費用は、寄付金で賄われています。
もしこのアプリを気に入っていただけたら、継続できるよう、Buy Me a Coffee もしくは PayPal.Me で寄付をしていただけるとありがたいです。
アイコンはmaterialdesignicons.comからダウンロードしたSVGファイルをもとにしています。これらはGoogleによってデザインされApache License version 2.0でライセンスされています。
MIT
Copyright © 2019-2022 Takeshi Sone.