如何让 Mac 自动重新连接到 Wi-Fi 网络?

如何让 Mac 自动重新连接到 Wi-Fi 网络?

我有一台 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或类似的路径中)。

具体来说,JoinModeJoinModeFallback首选项可能很有用。在我的计算机上,默认JoinModeFallback设置为。将其更改为似乎是一个不错的开始。DoNothingKeepLooking

不带参数运行airport以查看其帮助。

答案4

这是一个对我有用的简单重构。

#!/bin/bash
networksetup -getinfo Wi-Fi | grep -q Subnet: ||
networksetup -setairportnetwork en1 "$ssid" "$password"

显然,$ssid用实际的网络 SSID 和$password该网络的密码替换。

相关内容