обзор
Это Баш скрипт, который будет автоматически превратит ваш Wi-Fi, если вы подключите ваш компьютер к соединению локальных сетей и включите Wi-Fi обратно, когда вы отключите сетевой кабель / адаптер. Если вы решили обратиться Wi-Fi по тем или иным причинам, он будет помнить, что выбор. Это был импровизированный изэто макинтош намек работать с Йосемити, и без жесткого кодирования имена адаптеров. Он должен поддерживать рычание, но я не проверял, что часть. я сделал, тем не мение, добавлена поддержка уведомления центр OSX. Не стесняйтесь раскошелиться и исправить любые проблемы, с которыми Вы сталкиваетесь.
Большинство кредит на эти изменения идут вDave Holland.
инструкции по установке
- копия
toggleAirport.sh
к/Library/Scripts/
- Бегать
chmod 755 /Library/Scripts/toggleAirport.sh
- копия
com.mine.toggleairport.plist
к/Library/LaunchAgents/
- Бегать
chmod 600 /Library/LaunchAgents/com.mine.toggleairport.plist
- Бегать
sudo launchctl load /Library/LaunchAgents/com.mine.toggleairport.plist
чтобы начать Бодрствующего
Инструкции по удалению
- Бегать
sudo launchctl unload /Library/LaunchAgents/com.mine.toggleairport.plist
чтобы остановить Бодрствующего - удалять
/Library/Scripts/toggleAirport.sh
- удалять
/Library/LaunchAgents/com.mine.toggleairport.plist
- удалять
/private/var/tmp/prev_eth_on
- удалять
/private/var/tmp/prev_air_on
Разное
Для отладки, просто беги: sudo /Library/Scripts/toggleAirport.sh
и добавить ECHO везде, где вы хотите
com.mine.toggleairport.plist
<?XML версия ="1.0" кодирование ="UTF-8,"?> <!DOCTYPE PLIST PUBLIC "-//Apple, // DTD PLIST 1,0 // EN" "HTTP://www.apple.com/DTDs/PropertyList-1.0.dtd"> <PLIST версия ="1.0"> <ДИКТ> <ключ> Этикетка</ключ> <строка> com.asb.toggleairport</строка> <ключ> OnDemand</ключ> <верно /> <ключ> ProgramArguments</ключ> <массив> <строка> /Library/Scripts/toggleAirport.sh</строка> </массив> <ключ> WatchPaths</ключ> <массив> <строка> / Library / Preferences / SystemConfiguration</строка> </массив> </ДИКТ> </PLIST>
toggleAirport.sh
#!/бен / Баш функция set_airport { NEW_STATUS = $ 1 если [ $NEW_STATUS = "На" ]; тогда / USR / SBIN / networksetup -setairportpower $ air_name на Сенсорный / вар / TMP / prev_air_on еще / USR / SBIN / networksetup -setairportpower $ air_name от если [ -е "/вар / TMP / prev_air_on" ]; тогда гт / вар / TMP / prev_air_on фи фи } функция рычание { # Проверяет, имеют ли Growl установлен если [ -е "/USR / местные / бен / growlnotify" ]; тогда / USR / местные / бен / growlnotify -m "$1" -a "AirPort Utility.app" еще osascript -e "уведомление дисплей \"$1\" с названием \"Wifi Toggle\" звук имя \"Hero\"" быть } # Установить значения по умолчанию prev_eth_status ="выключено" prev_air_status ="выключено" eth_status ="выключено" # Захватите имена адаптеров. Мы предполагаем, что любое имя соединения локальных сетей заканчивается "Ethernet" если [ -г $ eth_names ]; тогда eth_names = $(networksetup -listnetworkserviceorder | Grep "Порт Оборудование" | Grep "Belkin USB-C LAN" | AWK -F»:«»{Распечатать $3}' | СЕПГ -e "s / //" | СЕПГ -e "s /)//") Элиф [ -г $ eth_names ]; тогда eth_names = $(networksetup -listnetworkserviceorder | Grep "Порт Оборудование" | Grep "Ethernet Adapter" | AWK -F»:«»{Распечатать $3}' | СЕПГ -e "s / //" | СЕПГ -e "s /)//") фи # Eth_names = `networksetup -listnetworkserviceorder | СЕПГ -I «s|^\(Порт Оборудование: .*Ethernet Adapter, устройство: (дюйм)\)$|\1|p'` air_name = `networksetup -listnetworkserviceorder | sed -En 's/^\(Порт Оборудование: (Wi-Fi|AirPort), устройство: (дюйм)\)$/\2/p'` # Определить предыдущее состояние локальных сетей # Если файл существует prev_eth_on, Ethernet был активным в последний раз мы проверили если [ -е "/вар / TMP / prev_eth_on" ]; тогда prev_eth_status ="На" быть # Определение же для статуса AirPort # Файл prev_air_on если [ -е "/вар / TMP / prev_air_on" ]; тогда prev_air_status ="На" быть # Проверьте фактическое текущее состояние локальных сетей для eth_name в ${eth_names}; делать если ([ "$eth_name" !знак равно "" ] && [ "`Ifconfig $ eth_name | Grep "положение дел: активный"`" !знак равно "" ]); тогда eth_status ="На" фи сделанный # И фактический текущий статус AirPort air_status = `/ USR / SBIN / networksetup -getairportpower $ air_name | AWK '{ Распечатать $4 }«` # Если какое-либо изменение произошло. Запуск внешнего скрипта (если она существует) если [ "$prev_air_status" !знак равно "$air_status" ] || [ "$prev_eth_status" !знак равно "$eth_status" ]; тогда если [ -е "./statusChanged.sh" ]; тогда "./statusChanged.sh" "$eth_status" "$air_status" & фи фи # Определите, изменился ли статус локальных сетей если [ "$prev_eth_status" !знак равно "$eth_status" ]; тогда если [ "$eth_status" знак равно "На" ]; тогда set_airport "выключено" рычание "Проводная сеть обнаружена. Включение AirPort выключен." еще set_airport "На" рычание "Нет проводной сети не обнаружено. Включение AirPort на." быть # Если локальные сети не изменились еще # Проверьте, изменилось ли состояние AirPort # Если так это было сделано вручную пользователем если [ "$prev_air_status" !знак равно "$air_status" ]; тогда set_airport $ air_status если [ "$air_status" знак равно "На" ]; тогда рычание "AirPort включен вручную." еще рычание "AirPort отключена вручную." фи фи фи # статус локальных сетей Обновления если [ "$eth_status" == "На" ]; тогда Сенсорный / вар / TMP / prev_eth_on еще если [ -е "/вар / TMP / prev_eth_on" ]; тогда гт / вар / TMP / prev_eth_on фи фи Выход 0