您可以通過 Wi-Fi、USB 或藍牙來在設備上共享您的 iPhone 的移動數據連接,除非您的服務提供商(運營商)禁用了此功能:
- 只要您的電腦能夠連接無線網絡,Wi-Fi 就不需要其他額外配置,
- 下文提供使用 USB 與藍牙的操作指南。
通過 USB 進行共享
通過原生的 USB 進行共享是最理想的方式,因為其可以提供更加穩定的連接,且較藍牙和 Wi-Fi 共享消耗的電量較少。
要使用 USB 進行 iPhone 網絡共享,您需要安裝 libimobiledevice包 與 usbmuxd包。usbmuxd 依賴於 libimobiledevice ,其中 usbmuxd 負責系統與 iOS 設備間的底層連接。usbmuxd 包也包含了一條 udev 規則,使其能夠在設備連接或斷開連接時自動啟動與停止該守護進程。相關內容詳見 iOS。
連接 iOS 設備,並確保 usbmuxd.service
已經自動啟動。
下一步,在您的 iPhone 上啟用個人熱點(Personal Hotspot),並將其用數據線連接至您的電腦。這時您應該會多出一個可用的乙太網連接,並能夠使用任意網絡管理器通過新加入的 iPhone 乙太網設備連接到 Internet,與使用其他普通的乙太網連接沒有什麼區別。
如果您在使用 MAC 地址偽裝,您可能需要將不支持 MAC 複製的 ipheth
驅動程序列為例外。
/etc/NetworkManager/conf.d/your-file-here.conf
[your-section] match-device=*,except:driver:ipheth
使用 systemd-networkd
如果您使用 systemd-networkd 進行網絡管理,您能輕易將其配置為通過 iPhone 連接 Internet,與使用其他普通網絡適配器時別無二致。
假設 enp0s26u1u2c4i2 是運行 networkctl list
命令時展示的 iPhone 創建的網絡設備的名稱,創建下面的 .network 文件:
/etc/systemd/network/30-tethering.network
[Match] Name=enp0s26u1u2c4i2 [Network] DHCP=yes
故障排除
若設備列表中有 iPhone 但無法連接,您有可能需要在使用網絡共享之前先將 iPhone 與您的電腦連接並進行配對。過程中,使用 PIN 的 iPhone 需要解鎖。
# idevicepair pair
缺少驅動程序
如果您按照上面的步驟操作,但 networkctl list
命令仍無法檢測到 iPhone,您可能缺少了ipheth 驅動。您可以運行 modprobe ipheth
命令來檢查您是否安裝了該驅動程序。如果出現了錯誤消息,可能是您自行編譯內核時發生的問題。請在編譯內核時設置 ipheth
flag。
.config
CONFIG_USB_IPHETH=y
通過藍牙進行共享
使用藍牙進行網絡共享會相對較快地將電池耗盡。如果您同時連接了 USB 電源供應器,情況可能會稍好一些。
硬體要求
- 運行 iPhone OS 3.0 及以上的開啟了網絡共享的 iPhone。在設置 > 通用 > 網絡中開啟網絡共享選項。
- 藍牙控制器或類似的硬體設備,最好支持 EDR (Enhanced Data Rate) 以便獲得相對較好的速度。在 Belkin F8T016NE 上經過了測試。
設置
參考主文章藍牙並設置好藍牙守護程序。
Gnome/XFCE
安裝 Blueman GTK 藍牙管理器。
您的通知區域中應該會出現一個藍牙圖標(注意:如果在開機時未啟用藍牙,圖標可能不會出現)。點擊該圖標,並搜索附近的設備,添加您的 iPhone。(注意,要使 iPhone 可以被發現,您可能需要在 iPhone 上打開設置中的藍牙頁面。)
一旦 iPhone 被添加到了設備列表中,打開設備菜單並選擇 配對 。通常這需要先在電腦後在 iPhone 上輸入 PIN 碼。連接好後,再次打開設備菜單,選擇網絡訪問 > 網絡訪問點。如果一切正常的話,blueman 會報告成功,您的 iPhone 上的狀態欄也會變為藍色,表示成功建立了網絡共享。
Blueman 將會創建一個新的網絡設備,一般為 bnep0。要連接到該設備,以 root 身份運行以下命令:
# dhcpcd bnep0
netcfg
您也可以創建一個 netcfg 網絡檔案,以便在命令行界面中就可以輕鬆地進行網絡共享而不需要使用 Blueman 或 Gnome。假設您有一部地址為 '00:00:DE:AD:BE:EF' 的已經配對好的 iPhone,只需要在 /etc/network.d called
中創建一個檔案,例如 'tether' :
CONNECTION="ethernet" DESCRIPTION="Ethernet via pand tethering to iPhone" INTERFACE="bnep0" IPHONE="00:00:DE:AD:BE:EF" PRE_UP="pand -E -S -c ${IPHONE} -e ${INTERFACE} -n 2>/dev/null" POST_DOWN="pand -k ${IPHONE}" IP="dhcp"
接下來執行:
# netcfg tether
要關閉網絡連接並停止網絡共享:
# netcfg down tether