Giải pháp dứt khoát cho việc chia sẻ wifi liên tục bị hỏng trong MacosX
Tôi đã tìm thấy một hệ thống cuối cùng hoạt động và khi ít bị gián đoạn chia sẻ wifi, nó sẽ tự động khôi phục hệ thống trong một phút.
Giải pháp là một ~/Library/LaunchAgents/com.me.wifisharingup.plist
daemon với nội dung tiếp theo:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.juanfal.wifisharingup</string>
<key>ProgramArguments</key>
<array>
<string>/Users/mi/bin/wifisharingup.sh</string>
</array>
<key>Nice</key>
<integer>1</integer>
<key>StartInterval</key>
<integer>60</integer>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/Users/me/Library/Logs/wifisharingup.err</string>
<key>StandardOutPath</key>
<string>/Users/me/Library/Logs/wifisharingup.out</string>
</dict>
</plist>
Bạn có thể thấy, mỗi phút nó chạy đoạn script đơn giản theo sau. Hãy cẩn thận làm cho bản gốc trước đó được sở hữu bởi root và khởi chạy nó với:
sudo chown root com.me.wifisharingup.plist
sudo launchctl load /Users/me/Library/LaunchAgents/com.me.wifisharingup.plist
Kịch bản mà nó khởi chạy mỗi phút (đừng quên làm cho nó có thể thực thi được) là:
#!/bin/sh
if [[ ! `ipconfig getifaddr en1` ]]; then
/usr/sbin/networksetup -setairportpower en1 off
/usr/sbin/networksetup -setairportpower en1 on
echo `date` >> "/Users/me/Library/Logs/wifisharingup.err"
else
touch "/Users/me/Library/Logs/wifisharingup.out"
fi
Tôi nghĩ rằng cuộc gọi đơn giản định kỳ (mỗi phút) để ipconfig getifaddr en1
làm mới một cái gì đó trong daemon chia sẻ wifi. Dù là gì đi nữa, bất cứ lúc nào việc chia sẻ wifi không thành công, nó sẽ mất địa chỉ IP tự gán, và sau đó ipconfig getifaddr en1
, vì vậy, tập lệnh của tôi hoàn toàn đặt lại wifi, khiến nó xây dựng lại trạng thái trước đó và khôi phục việc chia sẻ wifi.
Nó đã hoạt động trong nhiều ngày cho đến nay trong MacMini mà không cần bàn phím, chuột hoặc màn hình, mà chỉ cắm vào Ethernet và cho phép các thiết bị wifi của tôi truy cập vào thế giới.