お知らせ:


 ◇ YouTube Apple Japan チャンネル で有用なヒントや使い方を配信中です。
 ◇ iOS 向け Apple サポート App のバージョン 2.4.1 が公開されました。

しばらく返答が寄せられていないようです。 再度ディスカッションを開始するには、新たに質問してください。

質問:

質問: Apple Scriptでwi-fiを切り替える

Wi-Fi機能のついたSDカードアダプタを買ったので、Apple Scriptを使ってメニューバーにあるwi-fiを切り替えたいと考えています。コマンドベースでnetworksetupを使って切り替えるという方法は見つけたのですが、メニューバーにあるのだから直接操作できないのかなと思い立ちました。


System Eventを使ってmenubar1のアイテム名(例えば「ファイル」など)は検索することはできたのですが、右側にあるアイコン群へのアクセスの仕方がわかりません。Finderとは違うプロセスなのかと考えてアクティビティモニターを見てみたのですがシステムイベントが拾えるwi-fi関係のプロセスはなさそうです。


Apple Scriptからwi-fiメニュー(おうぎ形に電波がでているようなアイコン)にアクセスする方法というのはないものでしょうか。


よろしくお願いいたします。

iMac, OS X El Capitan (10.11.6)

投稿日

返信
スレッドに付いたマーク この回答で解決
回答:
回答:

High Sierraで以下のScriptで動作確認できました。

set SSID to "AirMac Extreme"

activate application "SystemUIServer"

tell application "System Events"

tell process "SystemUIServer"

set sMenu to (menu bar item 1 of menu bar 1 whose description contains "Wi-Fi")

tell sMenu

click

tell (menu item SSID of menu 1)

click

end tell

end tell

end tell

end tell

投稿日

スレッドに付いたマーク 参考になった

2018/03/01 05:43 T22T への返信 T22T への返信

ページの URL はスレ主さんの返事を待つとして、networksetup の説明は man にあります。ただ、どば〜〜〜っと出てくるので読むのは大変。


man networksetup


ちなみに当方の環境ではこんな感じです。


一覧

networksetup -listnetworkserviceorder


AirMac が ON か OFF かを取得

networksetup -getairportpower AirPort


AirMac を ON

networksetup -setairportpower AirPort on


AirMac を OFF

networksetup -setairportpower AirPort off


これ以外のことは...、気力がないのでできません。ま、何かの参考にでもなればと。

ディスカッションを部分的に表示しています

返信をすべて表示

ページコンテンツが読み込まれました

2018/02/28 10:40 hidezumi への返信 hidezumi への返信

メニューから選択ということはGUI スクリプトとかいうやつですよね。

コマンドで直接指定できるならGUI スクリプトにする必要はないのでは。

2018/02/28 10:40

返信 参考になった

2018/02/28 14:59 hidezumi への返信 hidezumi への返信

せっかくお時間いただいたのに申し訳ないのですが、わからないなら「わからない」と書いていただいてもいいんですよ。


ちなみにAppleScriptからアクセスしたい理由はディレクトリを作ってそこに写真を移動するという別のスクリプトと組み合わせたいということと、技術的に未熟なスクリプトファイルを書いて予期しない動きになるのを避けたいからです。

2018/02/28 14:59

返信 参考になった

2018/02/28 16:58 hidezumi への返信 hidezumi への返信

ステータスメニューは SystemUIServer からアクセス出来ます。こんな感じでステータスメニューを操作してみてはどうでしょうか?


tell application "System Events" tell process "SystemUIServer" tell menu bar 1 tell menu bar item 1 click # メニューを表示する tell menu 1 UI elements --click menu item 2 end tell end tell end tell end tell end tell


当方の環境 (Mac OS X 10.6.8) は古く、wi-fi メニューが存在しないため、そのものズバリの答えでなくてすみません。また、GUI スクリプティングは OS のバージョンにより異なる場合があるので、もしダメな場合はご容赦を。

2018/02/28 16:58

返信 参考になった
スレッドに付いたマーク この回答で解決

2018/03/01 05:30 hidezumi への返信 hidezumi への返信

High Sierraで以下のScriptで動作確認できました。

set SSID to "AirMac Extreme"

activate application "SystemUIServer"

tell application "System Events"

tell process "SystemUIServer"

set sMenu to (menu bar item 1 of menu bar 1 whose description contains "Wi-Fi")

tell sMenu

click

tell (menu item SSID of menu 1)

click

end tell

end tell

end tell

end tell

2018/03/01 05:30

返信 参考になった (2)

2018/02/28 19:33 hidezumi への返信 hidezumi への返信

失礼致します。 こちらのガイド等も参考になると思います。



以下の、networksetupを使った方法というのは、Terminal.appのコマンドを使った処理の方法でしょうか? 参考にしたいので、リンク先を教えて頂けないでしょうか? よろしくお願い申し上げます。

hidezumi による書き込み:


コマンドベースでnetworksetupを使って切り替えるという方法は見つけた

2018/02/28 19:33

返信 参考になった
スレッドに付いたマーク 参考になった

2018/03/01 05:43 T22T への返信 T22T への返信

ページの URL はスレ主さんの返事を待つとして、networksetup の説明は man にあります。ただ、どば〜〜〜っと出てくるので読むのは大変。


man networksetup


ちなみに当方の環境ではこんな感じです。


一覧

networksetup -listnetworkserviceorder


AirMac が ON か OFF かを取得

networksetup -getairportpower AirPort


AirMac を ON

networksetup -setairportpower AirPort on


AirMac を OFF

networksetup -setairportpower AirPort off


これ以外のことは...、気力がないのでできません。ま、何かの参考にでもなればと。

2018/03/01 05:43

返信 参考になった (2)

2018/03/01 05:33 Pajerow への返信 Pajerow への返信

Finder配下ではなさそうなので、SystemUIServerも試したのですが、スクリプトを拝見すると改めてアクティベートしているのですね。やってみたいと思います。


ヒントだけでもいただければと思ったのですが、検証までしていただき、本当に恐縮です。助かりました。

2018/03/01 05:33

返信 参考になった

2018/03/01 05:43 T22T への返信 T22T への返信

拙い技術力(&英語力)でどこまで参考になるかはわからないのですが、検索すると英語の情報では


networksetup -setairportnetwork [インターフェイス/en0など] ssid名 パスワード


というのがいくつか引っかかりました。ただ、試してみるとError obtaining wireless informationというエラーが出ます。英語の情報が多く、このコマンドをAppleScriptからキックするというソリューションが出回っているようです。


で、日本語で検索するとこんなのが見つかります。ネットワークのパネルをコマンドから動かしているようです。


https://qiita.com/r7kamura/items/b58c236eb1c3b1c38957


あらかじめロケーション(「自宅」とか「デジカメ」とか)を作っておいて切り替えるという方法もあるようです。オプションとしてswitchlocationというのを使ってますね。


http://blog.k-sakabe.com/2012/08/28/networksetup%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E3%83%8D%E3%83%83%E3%83%88…

2018/03/01 05:43

返信 参考になった

2018/03/01 15:18 hidezumi への返信 hidezumi への返信

ありがとうございます。当方は有線の環境しかないので、実際に試すことはできませんが、こういう情報は本当にありがたいです。


networksetup については、下のリンクも参考になるかもしれません。若干古めですが、日本語で分かりやすく書いてあります。なお、記事内容は未検証。情報提供のみです。


mac osx で無線LANをオンオフと指定SSIDに接続するコマンド

http://takuya-1st.hatenablog.jp/entry/2015/12/27/013922


GUI スクリプティングをお望みかもしれませんが、一応、ご参考まで。

2018/03/01 15:18

返信 参考になった

2018/03/01 21:26 hidezumi への返信 hidezumi への返信

Wi-Fiのアクセスポイントを変更する作業は、「おうぎ形に電波がでているようなアイコン」からSSIDを選択するだけです。わざわざAppleScriptを起動して変更するようなものではないと思います。


私は、LocationにAutomatic(Wi-Fi接続)とStandalone(ネット接続なし)を用意していて、Automaticの場合にWi-Fiに接続するような設定をしています。

ユーザがアップロードしたファイル

どのWi-Fiに接続するかは、Preferred Networksに登録されているSSIDの順番に依ります。上に登録されているものが優先されます。

ユーザがアップロードしたファイル

私の環境では、登録の順番はFlashAir(デジカメで撮った写真でカメラの電源をいれている場合に接続する)、MiniStationAir(バックアップ用のWi-Fiハードディスクの電源を入れている場合に接続する)の順で、その他は、現在の居場所に依って、自宅Wi-Fi、ネットカフェ用のSSIDに勝手に接続してくれます。私がやる動作は、AutomaticかStandaloneかをアップルメニューから選ぶだけです。

2018/03/01 21:26

返信 参考になった

2018/03/01 21:32 hidezumi への返信 hidezumi への返信

ご説明を頂きまして、有難うございます。 とても参考になりました。


私の環境(macOS High Sierra ver. 10.13.3、ネットワーク環境:自動)のTerminal.appで、


networksetup -setairportnetwork DeviceName SSIDName Password


のコマンドで自宅のWi-Fiに接続することができました。DeviceNameは、


networksetup -listallhardwareports


のコマンドを実行して、Hardware Port: Wi-Fi にあった、 デヴァイス名の en1 を使いました。


今後、Wi-Fiネットワークをもう一つ作って、複数の切り替えができるかどうか試してみる予定です。


うまくいけば、AppleScriptのCalling Command-Line Toolsを使って実行できそうです。


こちらのブログも参考になりました。

https://qiita.com/kota65535/items/4cd13ac28de51648e370

2018/03/01 21:32

返信 参考になった

2018/03/02 05:31 hohokihai への返信 hohokihai への返信

実務的には扇型を切り替えるだけなのでそれほどトラブルはないのですが、アップルスクリプトなどのスクリプティングを覚えたかったというのもありますね。あと、毎日新しいディレクトリを作成するというスクリプトがすでに組んであるので、それに組み合わせができないだろうかという気持ちもありました。


ただ、全部教えてくれというのもよくなさそうなので、環境の調べ方を知りたいと思って質問しました。

2018/03/02 05:31

返信 参考になった

2018/03/02 05:37 T22T への返信 T22T への返信

やっぱり、コマンドに抵抗のない人はこっちの方がいいんですね。あと、ちゃんとパラメータを調査してからプログラムを組むんですね。参考になりました。

2018/03/02 05:37

返信 参考になった

2018/03/02 18:50 hidezumi への返信 hidezumi への返信

> あと、毎日新しいディレクトリを作成するというスクリプトがすでに組んであるので、

> それに組み合わせができないだろうかという気持ちもありました。


なるほど、納得しました。


実は私、Wi-Fi接続後SSID毎に異なったスクリプトを実行させるアプリを作ってたりします。(設定画面とコードの一部)

ユーザがアップロードしたファイルユーザがアップロードしたファイル

Wi-Fiへ接続を試みた後、実際に接続する時間がまちまちなので、AppleScriptでは限界がある(もしくはリソースを必要以上にくってしまう)と思われます。


これを機に、是非Swiftの世界に来ませんか?w

2018/03/02 18:50

返信 参考になった
ユーザのユーザプロフィール: hidezumi

質問: Apple Scriptでwi-fiを切り替える