Включить автоматический поиск WiFi в OS X

В моей школе установлен PowerCloud, который официально не поддерживает OS X. Иногда он работает, иногда нет. Я пытался сузить круг, но это невозможно. Мне было интересно, есть ли способ написать сценарий Automater/AppleScript для подключения к 1 сети, а затем посмотреть, получит ли он ! в символе WiFi, а затем попробуйте следующий, а затем выполните цикл. Есть ли способ сделать это?

Было бы полезно, если бы вы добавили, что именно делает PowerCloud. Хотя он может не поддерживать OS X, лучшее представление о том, чего вы пытаетесь достичь, может позволить кому-то предложить обходной путь.

Ответы (1)

Вместо этого я бы сделал это с помощью сценария bash, поскольку основа Unix для OSX предоставляет все, что вам нужно, и вам не нужно играть с графическим интерфейсом, что непросто.

Две самые важные вещи

  1. Тестирование подключения.
  2. Принудительное повторное подключение к точке доступа.

Для первого должно быть достаточно простого ping, а для второго вы можете использовать следующую команду.

networksetup -setairportnetwork en1 "BLAH" "mypassword"

Таким образом, сценарий будет выглядеть так...

#!/bin/sh

whotest[0]='test' || (echo 'Failure: arrays not supported in this version of bash.' && exit 2)

# Assuming all APs use the same pass code
myAPpass="mypassword"

# List of APs
myAPlist=(
'NetFasteR WLAN 3'
'WiFi HRC7dE'
'BLAH'
)

myAPcount=0
while [ "x${myAPlist[myAPcount]}" != "x" ]
do
   myAPcount=$(( $myAPcount + 1 ))
done
echo "There are $myAPcount APs available."

# IP address to target
myIntIP="192.168.0.1"

# Which AP in the list to attempt next
myAPnum=0

# We'll loop forever
while true ; do

   # Monitor connection; Loop until ping fails
   while true ; do
      # Test connection. If non zero status it failed.
      ping -c 1 -t 1 $myIntIP >/dev/null 2>&1 || break

      echo "Successfull heart beat at `date`\t\r\c"

      # Wait # secs before testing again.
      sleep 2
   done

   echo " "
   echo "Failed to contact internal IP. Reconnecting..."

   # Try to connect to an AP in the list
   while true; do
      # Get next AP in the list
      if [ $myAPnum -eq $myAPcount ] ; then
     myAPnum=0
      else
     myAPnum=$(( $myAPnum + 1 ))
      fi
      myNewAP=${myAPlist[myAPnum]}

      echo "Trying AP '$myNewAP' : \c"

      # Connect to new network
      networksetup -setairportnetwork en1 "$myNewAP" "$myAPpass" >/dev/null 2>&1
      if [ "x$?" = "x0" ] ; then
     echo "Success!" 

     # Wait for DHCP etc...
     sleep 2 

     break
      else
     echo "Failed :("
      fi
   done
done

Вам, вероятно, придется немного настроить его, чтобы получить правильные задержки и т. д., но для меня это работает довольно хорошо.

Если точки доступа не используют общие пароли, вам потребуется добавить к ним второй массив.

Если вы беспокоитесь о безопасности паролей, вы можете настроить его для запуска от имени пользователя root и изменить разрешения, чтобы только root мог его прочитать.

РЕДАКТИРОВАТЬ: сценарий довольно глупый. Поиск работающей точки доступа может занять некоторое время, если список длинный. Вы можете уменьшить задержки, сделав его умнее. Например, вы можете проверить с помощью инструмента аэропорта список доступных точек доступа, а затем выбрать одну из них для подключения.