Edited at

ターミナルやAlfred、Dockからインターネット共有のオンオフを切り替える

More than 3 years have passed since last update.

仕事の都合でMacのインターネット共有のオンオフを割りと頻繁に切り替えている

今までは「システム環境設定」の「共有」の「インターネット共有」のチェックボックスを押して切り替えていたのだがいかんせんめんどくさい

ターミナルとかAlfredからぽんと1発で切り替えたい!!


どーせコマンドかなんかあってちょちょいのちょいでしょ!!

・・・

ググってもでてこねぇ・・・!!

コマンドワンパンじゃねぇのか・・・

と諦めかけていた矢先、やはり先人は偉大であるのであった

Start/Stop Internet Sharing via Terminal in Yosemite without AppleScript

恐ろしい発想の転換だ

インターネット共有は常にONにしておいて経路に用いるネットワーク設定のほうを切り替えるとは・・・


下準備


インターネット共有に使うための経路を用意する

システム環境設定のネットワークを開く

使いたい経路を選んで歯車ボタンから「サービスを複製...」を選ぶ

とりあえずこの例では「Thunderbolt Ethernet」を元に「Sharing」という名前で保存

優先度は一番下にしておく


共有設定をする

システム環境設定の共有を開く

「共有する接続経路」に先ほど作成した「Sharing」を設定、Wi-Fiを使用することにして、「入」に!

以上で事前準備は終了


ターミナルから切り替える

以下のコマンドをターミナルから叩く


インターネット共有をONにする

$ sudo networksetup -setnetworkserviceenabled "Thunderbolt Ethernet" off



インターネット共有をOFFにする

$ sudo networksetup -setnetworkserviceenabled "Thunderbolt Ethernet" on


ね?簡単でしょ?

普段インターネット接続に使っている「Thunderbolt Ethernet」がoffになると待機していた「Sharing」が使われ、共有の経路が出来上がるという仕組み

逆にonになると、優先度の低い「Sharing」は使われなくなるので共有も止まる

on,offの記述が「やりたいこと」と「パッと見の見た目」とで逆だし絶対忘れるので叩くと切り替えてくれるの書いた

共有してるかどうかはWi-Fiのアイコンとかみればわかるしね


インターネット共有のON/OFFを切り替える

service="Thunderbolt Ethernet"

status=`networksetup -getnetworkserviceenabled "$service"`
if [ $status = 'Disabled' ]; then
sudo networksetup -setnetworkserviceenabled "$service" on
else
sudo networksetup -setnetworkserviceenabled "$service" off
fi

パスワード入力がめんどくさいから/etc/sudoersnetworksetupを許可した、なんかザルな気もする

$ sudo visudo

# 下記をどっかに追加(%userは自分のユーザ名に置き換える)
%user ALL=(root) NOPASSWD: /usr/sbin/networksetup


Alfredから切り替える

ターミナルからはいいけどAlfredからでも切り替えられるようにしたい・・・どうしよう

そうだ、Automatorだ!

というわけでAutomatorでアプリ化した、もはやDockからでも切り替えられる

Automatorを起動して、アプリケーションを選択

シェルスクリプトの実行を選んできてコードをぽい!

Automatorのシェルスクリプト実行だとsudoつけてるとパスワードの入力で止まっちゃうので外す

sudoがついてないといつものシステムダイアログでパスワードを聞いてくる

/etc/sudoersnetworksetupを許可していれば止まらないのでsudoつけてても良い)

出来上がった



アプリケーションなのでAlfredにかぎらずSpotlightからでもDockからでもFinderからでもopen /Applications/InternetSharing.appからでも何でも起動できるぜ!!!

ああ〜超快適になった!