我有一台 Mac Mini Server,每隔几天就会与 wifi 网络断开连接。 最初断开连接可能是由其他参数导致的(例如无线路由器重新启动),但 Mac 不会自动重新连接。
这是一个大问题,因为它是一台服务器,突然不可用,直到有人亲自到机器前,使用 wifi 菜单手动重新连接到网络。我应该提到,虽然 wifi 网络是 WPA2,但手动重新连接不需要重新输入密码,所以没有明显的原因说明它为什么不能自动重新连接。
如何让 Mac 定期尝试重新连接到指定的 WiFi 网络?
答案1
这是一个 Applescript 和 shell 脚本,用于检查 Airport 是否已连接,若未连接则进行连接。
if (do shell script "networksetup -getinfo Wi-Fi | grep -c 'IP address:'") = 1 then
do shell script "networksetup -setairportnetwork en1 <networkName> <passwordToNetwork>"
end if
#!/bin/bash
if [ $(networksetup -getinfo Wi-Fi | grep -c 'IP address:') = '1' ]
then networksetup -setairportnetwork en1 <networkName> <passwordToNetwork>
fi
<networkName>
用网络名称和<passwordToNetwork>
密码替换。如果您没有更改网络设备,“en1”应该是正确的。
现在您需要做的就是循环执行或调用它来检查连接。
不过,如果连接丢失,机场应该会自动重新连接。也许可以尝试重置所有网络偏好设置,看看是否有效。
如何完全重置您的网络偏好设置:关闭 Airport。关闭系统偏好设置。导航至:/Library/Preferences/SystemConfiguration/
复制,然后删除以下文件:
com.apple.airport.preferences.plist
com.apple.network.*
com.apple.smb.server.plist
NetworkInterfaces.plist
答案2
我想评论Kassym Dorsel 的回答,但我没有足够的积分来这样做。
我的 Mac 服务器也遇到了同样的问题:
Wi-Fi 连接到 VPN,以太网连接到 LAN,因此如果 Wi-Fi 连接丢失,OS X 不会自动重新连接。
考虑一下 Kassym Dorsel 的回答:
我不太愿意将我的 Wi-Fi 密码以明文形式存储(虽然这风险极低,但还是会存在)。
如果 Wi-Fi 已被禁用,我希望它能够启用它。
我希望它能够处理以下情况:分配了静态 IP 地址、启用了 Wi-Fi,但仍然未连接或连接到错误的 Wi-Fi 网络(SSID)。
因此我修改了他的脚本来解决这些问题(替换<networkName>
为您喜欢的网络 SSID):
#!/bin/bash
# turn on Wi-Fi if it's turned 'Off'
if networksetup -getairportpower en1 | grep -q 'Off'
then networksetup -setairportpower en1 on
fi
# cycle Wi-Fi power if missing 'IP address'
if ! networksetup -getinfo Wi-Fi | grep -q 'IP address:'
then
networksetup -setairportpower en1 off
networksetup -setairportpower en1 on
fi
# initiate connection if not connected to the correct network
if ! networksetup -getairportnetwork en1 | grep -q '<networkName>'
then networksetup -setairportnetwork en1 '<networkName>'
fi
答案3
您可以尝试使用该airport
实用程序(在较新的 OS X 版本中,它隐藏在/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport
或类似的路径中)。
具体来说,JoinMode
和JoinModeFallback
首选项可能很有用。在我的计算机上,默认JoinModeFallback
设置为。将其更改为似乎是一个不错的开始。DoNothing
KeepLooking
不带参数运行airport
以查看其帮助。
答案4
这是一个对我有用的简单重构。
#!/bin/bash
networksetup -getinfo Wi-Fi | grep -q Subnet: ||
networksetup -setairportnetwork en1 "$ssid" "$password"
显然,$ssid
用实际的网络 SSID 和$password
该网络的密码替换。