MacでAirDropできない原因はファイアウォール?ワンクリックで解決する自動化設定

コンピュータ関連
スポンサーリンク

iPhone -> iMac でのAirDrop受け入れの設定について。

なんとなくMacのセキュリティを意識して、
普段は「ファイアウォール ON」、オプションで「外部からの接続をすべてブロック」、「Bluetooth OFF」にしています。(今使ってるbluetooth機器はないので)
しかし、いざAirDropを使おうとすると、設定画面をあちこち開くハメになり手間がかかるというか煩わしい。

そんな面倒な手順をワンクリック(ある程度の自動化)で完結させてみました。

スポンサーリンク

事前準備:必要なツールをインストール

※bluetooth接続の機器を使用しているならこれは必要ありません。後ほど出てくるスクリプトでもコメントアウトしてください。

スクリプトでBluetoothを操作するために、「blueutil」という便利なツールを使います。

Homebrew経由でインストール。(未導入の場合は先にHomebrewを入れてください)

brew install blueutil

ちなみに、Homebrewのインストール先が新旧macで異なるそうです。

  • Intel Mac: /usr/local/bin/blueutil
  • Apple Silicon Mac: /opt/homebrew/bin/blueutil

が、一応スクリプトの中でパスをエクスポートしているので大丈夫なはず。

スクリプトの作成

まずは、自動化の心臓部となる2つの実行ファイルを作成します。

ファイルはユーザーフォルダ直下に置くと仮定しますが、(例:/Users/ユーザー名/)
使いやすいところに置いてパスは適宜修正してください。

① AirDropを「ON」にするスクリプト

名前:airdrop_receive.sh

#!/bin/zsh
export PATH="/opt/homebrew/bin:/usr/local/bin:$PATH"

# blueutil を root (sudo) で動かすための許可証
export BLUEUTIL_ALLOW_ROOT=1
# Bluetooth ON
blueutil --power 1

# Firewall OFF
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off

# Finder起動してAirDrop表示
open /System/Library/CoreServices/Finder.app/Contents/Applications/AirDrop.app

作成したファイルには、ターミナルで実行権限を付与

chmod +x ~/airdrop_receive.sh

② 元のセキュリティ状態に「戻す」スクリプト

次に元の状態に戻すスクリプトを作成。

名前:airdrop_restore.sh

#!/bin/zsh
export PATH="/opt/homebrew/bin:/usr/local/bin:$PATH"
# blueutil を root (sudo) で動かすための許可証
export BLUEUTIL_ALLOW_ROOT=1

# Firewall ON
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on

# Firewall option ON
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setblockall on

# Bluetooth OFF(必要なら)
blueutil --power 0

こちらも実行権限を付与

chmod +x ~/airdrop_restore.sh

ファイアウォールオプションの「内蔵ソフトウェアの外部接続許可」だけでは、iPhoneからMacが見つからない不安定な状態になりやすい。というか、なる。自分の場合は。

結局「使う時だけ全開放、終わったら即閉じる」が自分にとっての最適解かなと。

スポンサーリンク

「ショートカット」アプリでボタン化する

スクリプトをいちいちターミナルで叩くのは大変。
Mac標準の「ショートカット」アプリを使って、メニューバーや右クリックから実行できるようにします。

「ショートカット」アプリを起動したら、「新規ショートカット」か「+」ボタンから新規作成。

検索か「スクリプティング」から「シェルスクリプトを実行」を持ってくる。
シェルスクリプトを実行

テキストエリアに、以下を記入します。”ユーザー名”は自分の名前に変更すること。
例:sudo /Users/ユーザー名/airdrop_receive.sh
sudoで実行

シェル:zsh
あとはそのままでok
名前はわかりやすいよう適当に。例:「AirDrop受信」

毎回パスワードを入力するのは面倒なので、次項目で入力を省略するための設定を行います。
なので「管理者として実行」にチェックはいりません。

右上の i マークから詳細タブ、「✅メニューバーにピン固定」をチェック
これでメニューバーから選んで簡単に実行できます。

同様に「復元用」のショートカットも作成しておいてください。起動するスクリプトのパスと名前が違うだけであとは同じです。
例:/Users/ユーザー名/airdrop_restore.sh

パスワード入力を省略するための sudoers 設定

「管理者として実行」
にチェックを入れると実行時にパスワードが聞かれます。

自分以外が触る可能性があるならそれでも良いのですが、普段から自分しか触らないのであればパスワード入力の手間も省きたいところ。

そこで sudoers に設定しておきます。

ただし直接 /etc/sudoers を編集すると、構文エラー(スペルミスや形式ミス)があった場合に即座にsudoが機能しなくなり、修正不能になる危険があります。
visudo を使うことで編集終了時(保存時)に自動的にチェックが行われ、エラーが判明した時点で修正を促されるため安全に作業できます。

ターミナルから

sudo visudo

でエディタを開きます。
が、普段 vi を使わない自分にはちょっとやりづらい。

そこで

sudo EDITOR=nano visudo

とすることで nano (初心者向けで画面下部にコマンドが表示される直感的なエディタ)表示になる。こちらの方が良い。

開いたら矢印キーで移動してファイルの最後に追記(コピペ)


## 「ユーザー名」は自分の名前に書き換えて
ユーザー名 ALL=(ALL) NOPASSWD: /Users/ユーザー名/airdrop_receive.sh, /Users/ユーザー名/airdrop_restore.sh

書いたら ctrl + x で終了、
保存するか聞かれるので Y を押下、リターンキーで戻ります。

/etc/sudoers

ちなみに自分のユーザー名はターミナルで whoami と打つと出ます。わからないことはないと思いますが念の為。

% whoami
スポンサーリンク

AirDropショートカットの実際の使い方

AirDropしたい時にメニューバーのショートカットアイコンから、
「AirDrop受信」ショートカットをクリック。

自動でBluetoothがONになり、ファイアウォールが解除され、FinderのAirDrop画面が開きます。

「このMacを検出可能な相手:すべての人」になっていることを確認。

なってなければ手動で変更。

受信が終わったら「AirDrop設定復元」用のショートカットをクリックして、元の鉄壁の布陣に戻すだけ!

iCloudにログインして連絡先等の設定をしているならそのように。「すべての人」である必要はありません

まとめ

「すべての人を許可」など、AirDropの許可範囲の設定はMacが前回の状態を記憶してくれるので、このスクリプトだけで準備の9割が自動化されます。

そこまでガチガチにしておく必要あるか?と言えば微妙なところですが、なんとなくそうしてます。

ちなみに以前はUSBに接続して写真などのデータを移動させていたのですが、なんか端子の調子が悪くて接続したりしなかったり・・・。
AirDropがあるんだからまぁそっちでいいかと。

でも、iMacからiPhoneにAirDropする時はさらっと送れるのですが、逆の場合はファイアウォールが邪魔をするのです。なんか・・・もう面倒くさくて。

あちこち設定開いて・・・とかが煩わしかったので、できるところは自動化してみました。

大量の写真なんかを移動する時は有線接続の方が安定する気がしますけど。

ニーズがあるかわかりませんが備忘録として記事化しておきます。
何かのヒントにでもなれば幸いです。
以上!

コメント

タイトルとURLをコピーしました