如何让 Mac 自动重新连接到 wifi 网络?

GJ.*_*GJ. 12 mac wireless-networking

我有一台 Mac Mini 服务器,它每隔几天左右就会与 wifi 网络断开连接。可能有其他参数导致初始断开连接(例如无线路由器重新启动),但 Mac 不会自动重新连接。

这是一个主要问题,因为它是一台服务器机器,它突然变得不可用,直到有人亲自进入机器并使用 wifi 菜单手动重新连接到网络。我应该提到,虽然 wifi 网络是 WPA2,但手动重新连接不涉及重新输入密码,因此没有明显的原因不自动重新连接。

如何让 Mac 定期尝试重新连接到指定的 wifi 网络?

小智 12

这是一个 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
Run Code Online (Sandbox Code Playgroud)
#!/bin/bash
if [ $(networksetup -getinfo Wi-Fi | grep -c 'IP address:') = '1' ]
then networksetup -setairportnetwork en1 <networkName> <passwordToNetwork>
fi
Run Code Online (Sandbox Code Playgroud)

替换<networkName>为网络名称和<passwordToNetwork>密码。如果您没有更改网络设备,“en1”应该是正确的。

现在你需要做的就是循环这个或者调用它来检查连接。

尽管如此,如果连接丢失,机场应自动重新连接。也许尝试重置所有网络首选项,看看是否有效。

如何完全重置您的网络偏好设置:关闭机场。关闭系统偏好设置。导航至:/Library/Preferences/SystemConfiguration/ 制作副本,然后删除以下文件:

com.apple.airport.preferences.plist
com.apple.network.*
com.apple.smb.server.plist
NetworkInterfaces.plist
Run Code Online (Sandbox Code Playgroud)


小智 6

我想对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
Run Code Online (Sandbox Code Playgroud)