動(dòng)問題排查與修復(fù)全攻略)
1. 問題定位與診斷思路遇到Ubuntu 18.04系統(tǒng)開機(jī)后找不到WiFi選項(xiàng)或者網(wǎng)絡(luò)設(shè)置里空空如也這確實(shí)是個(gè)讓人頭疼的經(jīng)典問題。我處理過無數(shù)次類似的工單新手和老手都可能栽在這個(gè)坑里。別急著重裝系統(tǒng)99%的情況下這都不是系統(tǒng)壞了而是驅(qū)動(dòng)或配置沒對(duì)上號(hào)。首先我們要像醫(yī)生一樣先“望聞問切”搞清楚問題到底出在哪一層。最核心的判斷依據(jù)是你的無線網(wǎng)卡硬件是否被系統(tǒng)識(shí)別。打開終端輸入lspci命令并配合grep過濾。對(duì)于大多數(shù)筆記本內(nèi)置的無線網(wǎng)卡這個(gè)命令能告訴你它的“身份證”。lspci | grep -i network或者更精確地查找無線設(shè)備lspci | grep -i wireless如果這條命令有輸出比如顯示“Realtek Semiconductor Co., Ltd. RTL8822CE 802.11ac PCIe Adapter”或“Intel Corporation Wireless-AC 9560”那么恭喜你的硬件至少被主板和系統(tǒng)總線識(shí)別了。問題大概率出在驅(qū)動(dòng)層面。如果lspci完全沒有相關(guān)輸出那可能是硬件開關(guān)被關(guān)閉了。很多筆記本有物理的無線開關(guān)FnFx組合鍵或者BIOS/UEFI里禁用了無線模塊。先去檢查一下這些開關(guān)并重啟進(jìn)入BIOS確認(rèn)無線功能是開啟狀態(tài)。另一個(gè)關(guān)鍵命令是rfkill它專門管理無線設(shè)備的軟硬塊狀態(tài)。rfkill list這個(gè)命令會(huì)列出所有無線設(shè)備WiFi、藍(lán)牙等及其阻塞狀態(tài)。如果看到WiFi設(shè)備后面跟著“Soft blocked: yes”或“Hard blocked: yes”那就意味著它被鎖住了?!癏ard blocked”通常對(duì)應(yīng)物理開關(guān)“Soft blocked”則是系統(tǒng)軟件層面的禁用。你可以用rfkill unblock all來解除所有軟阻塞。注意rfkill unblock all會(huì)同時(shí)啟用WiFi和藍(lán)牙。如果你只想啟用WiFi可以先rfkill unblock wifi。診斷的最后一步是看內(nèi)核是否加載了正確的驅(qū)動(dòng)模塊。使用lsmod命令查看已加載的模塊并用grep過濾常見無線驅(qū)動(dòng)關(guān)鍵詞。lsmod | grep -E “(rtw|rtl|iwlwifi|ath|brcm)”常見的驅(qū)動(dòng)模塊前綴iwlwifi對(duì)應(yīng)英特爾rtw、rtl對(duì)應(yīng)瑞昱ath對(duì)應(yīng)高通brcm對(duì)應(yīng)博通。如果這里沒有輸出或者輸出很少那驅(qū)動(dòng)很可能沒裝上或沒加載。2. 驅(qū)動(dòng)問題的深度解析與解決方案驅(qū)動(dòng)問題是Ubuntu 18.04 WiFi失效的罪魁禍?zhǔn)子绕涫菍?duì)于較新的硬件。Ubuntu 18.04的內(nèi)核版本相對(duì)較老其自帶的硬件驅(qū)動(dòng)庫(kù)可能無法覆蓋2018年后發(fā)布的大量新網(wǎng)卡。這時(shí)候我們需要手動(dòng)介入。2.1 確定網(wǎng)卡型號(hào)與所需驅(qū)動(dòng)首先精準(zhǔn)定位你的網(wǎng)卡型號(hào)。使用lspci -vnn或lspci -k命令可以獲取更詳細(xì)的信息包括內(nèi)核試圖使用的驅(qū)動(dòng)。lspci -vnn -s $(lspci | grep -i network | awk ‘{print $1}’)在輸出中重點(diǎn)關(guān)注兩行Subsystem:這一行往往包含了網(wǎng)卡的具體型號(hào)。Kernel driver in use:和Kernel modules:顯示了當(dāng)前正在使用和可用的驅(qū)動(dòng)模塊。如果這里是空的或者顯示stub、bcma-pci-bridge之類的通用模塊那就說明專用驅(qū)動(dòng)缺失。記下你的網(wǎng)卡型號(hào)例如 RTL8822CE然后去搜索引擎查找“Ubuntu 18.04 RTL8822CE driver”。通常GitHub是這類開源驅(qū)動(dòng)最集中的地方。2.2 安裝缺失的驅(qū)動(dòng)以常見型號(hào)為例驅(qū)動(dòng)安裝無非幾種方式使用apt安裝官方倉(cāng)庫(kù)的驅(qū)動(dòng)、添加PPA倉(cāng)庫(kù)、從DKMS源碼編譯。風(fēng)險(xiǎn)從低到高。方案A通過apt和linux-firmware安裝很多時(shí)候驅(qū)動(dòng)模塊ko文件是隨著內(nèi)核一起的但對(duì)應(yīng)的固件文件/lib/firmware下的文件可能缺失。首先更新系統(tǒng)并安裝完整的固件包sudo apt update sudo apt upgrade sudo apt install linux-firmware安裝后重啟看看WiFi是否出現(xiàn)。這對(duì)許多英特爾和部分瑞昱網(wǎng)卡有效。方案B添加硬件廠商或社區(qū)維護(hù)的PPA對(duì)于一些流行但官方支持不佳的網(wǎng)卡社區(qū)會(huì)有維護(hù)的PPA。例如針對(duì)瑞昱的RTL88x2bu系列網(wǎng)卡sudo add-apt-repository ppa:kelebek333/kablosuz sudo apt update sudo apt install rtl88x2bu-dkms安裝DKMS動(dòng)態(tài)內(nèi)核模塊支持包的好處是它會(huì)在你每次更新內(nèi)核后自動(dòng)重新編譯驅(qū)動(dòng)模塊一勞永逸。這是我最推薦給普通用戶的方式。方案C從GitHub源碼編譯安裝終極手段當(dāng)沒有現(xiàn)成的Deb包或PPA時(shí)就需要手動(dòng)編譯。以常見的RTL8821CU驅(qū)動(dòng)為例安裝編譯依賴sudo apt update sudo apt install git dkms build-essential bc克隆驅(qū)動(dòng)源碼倉(cāng)庫(kù)git clone https://github.com/brektrou/rtl8821CU.git cd rtl8821CU使用DKMS方式編譯安裝sudo ./dkms-install.sh # 或者如果沒有安裝腳本常見步驟是 sudo dkms add . sudo dkms build rtl8821cu/版本號(hào) sudo dkms install rtl8821cu/版本號(hào)這里的“版本號(hào)”通??梢栽谠创a目錄下的dkms.conf文件中找到。重啟系統(tǒng)。實(shí)操心得編譯安裝前務(wù)必查看GitHub倉(cāng)庫(kù)的README.md文件。里面通常有詳細(xì)的安裝說明、已知問題和卸載方法。另外編譯環(huán)境必須完整否則會(huì)報(bào)奇怪的錯(cuò)誤。如果安裝失敗可以嘗試sudo make clean清理后再來。2.3 驅(qū)動(dòng)黑名單與沖突解決有時(shí)系統(tǒng)可能加載了錯(cuò)誤的驅(qū)動(dòng)導(dǎo)致正確的驅(qū)動(dòng)無法工作。這就需要將錯(cuò)誤的驅(qū)動(dòng)加入黑名單。例如如果系統(tǒng)為你的Realtek網(wǎng)卡錯(cuò)誤加載了rtl8xxxu驅(qū)動(dòng)而你需要使用r8822be就需要屏蔽前者。創(chuàng)建黑名單配置文件sudo nano /etc/modprobe.d/blacklist-rtl8xxxu.conf在文件中加入blacklist rtl8xxxu保存退出然后更新initramfs并重啟sudo update-initramfs -u sudo reboot3. 網(wǎng)絡(luò)管理器配置與系統(tǒng)設(shè)置排查驅(qū)動(dòng)裝好了硬件也識(shí)別了但WiFi還是連不上或者列表不刷新問題可能就出在軟件配置層。Ubuntu 18.04默認(rèn)使用NetworkManager來管理網(wǎng)絡(luò)。3.1 檢查并重啟NetworkManager服務(wù)首先確認(rèn)NetworkManager服務(wù)正在運(yùn)行systemctl status NetworkManager如果狀態(tài)不是active (running)或者有錯(cuò)誤日志嘗試重啟它sudo systemctl restart NetworkManager有時(shí)候NetworkManager的配置可能因?yàn)楫惓jP(guān)機(jī)或軟件沖突而損壞??梢試L試徹底清理并重建其狀態(tài)sudo systemctl stop NetworkManager sudo rm /var/lib/NetworkManager/NetworkManager.state sudo systemctl start NetworkManager3.2 使用nmcli命令行工具深度管理圖形界面有時(shí)會(huì)“卡住”這時(shí)命令行工具nmcli就非常強(qiáng)大了。它可以列出所有網(wǎng)絡(luò)設(shè)備、連接和狀態(tài)。nmcli device status這個(gè)命令會(huì)清晰列出所有網(wǎng)絡(luò)接口DEVICE、類型TYPE、狀態(tài)STATE和連接名CONNECTION。如果你的WiFi設(shè)備通常是wlan0狀態(tài)是unavailable而不是disconnected那可能還是驅(qū)動(dòng)或射頻阻塞問題。如果是disconnected則說明設(shè)備就緒只是沒連接。掃描可用的WiFi網(wǎng)絡(luò)sudo nmcli device wifi rescan sudo nmcli device wifi list如果掃描不到任何網(wǎng)絡(luò)但設(shè)備狀態(tài)正常可能是區(qū)域代碼regdomain設(shè)置問題或者路由器信道不支持。可以嘗試手動(dòng)設(shè)置區(qū)域sudo iw reg set US # 設(shè)置為美國(guó)區(qū)域信道選擇最寬然后重啟NetworkManager。3.3 圖形界面故障與替代方案如果網(wǎng)絡(luò)設(shè)置的圖形界面完全打不開或者點(diǎn)擊沒反應(yīng)除了重啟NetworkManager還可以嘗試重置網(wǎng)絡(luò)設(shè)置圖標(biāo)sudo apt install --reinstall network-manager-gnome如果問題依舊可以考慮暫時(shí)使用更底層的wpa_supplicant工具來連接WiFi以判斷是否是NetworkManager前端的問題。編輯WPA配置文件添加你的網(wǎng)絡(luò)sudo nano /etc/wpa_supplicant/wpa_supplicant.conf添加以下內(nèi)容替換你的SSID和密碼network{ ssid“你的WiFi名稱” psk“你的WiFi密碼” }停止NetworkManager手動(dòng)啟動(dòng)wpa_supplicantsudo systemctl stop NetworkManager sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf sudo dhclient wlan0如果這樣能獲取到IP并上網(wǎng)那就證明驅(qū)動(dòng)和硬件是好的問題純粹出在NetworkManager的配置或圖形界面上。4. 內(nèi)核、固件與電源管理疑難雜癥有些問題藏得更深涉及到內(nèi)核版本、固件兼容性甚至是省電功能帶來的麻煩。4.1 升級(jí)內(nèi)核以獲取原生驅(qū)動(dòng)支持Ubuntu 18.04.04 LTS 初始內(nèi)核是 4.15對(duì)較新硬件的支持有限。升級(jí)到更新的HWE硬件啟用內(nèi)核可以一次性獲得大量新驅(qū)動(dòng)。這是解決很多新型號(hào)網(wǎng)卡問題的有效方法。# 安裝最新的HWE內(nèi)核 sudo apt install --install-recommends linux-generic-hwe-18.04安裝完成后重啟系統(tǒng)在GRUB菜單中選擇新內(nèi)核啟動(dòng)。新內(nèi)核包含了更新的linux-firmware包可能直接讓你的網(wǎng)卡工作。注意事項(xiàng)升級(jí)內(nèi)核有一定風(fēng)險(xiǎn)雖然很小。建議在操作前確保你有有線網(wǎng)絡(luò)連接或者已經(jīng)下載好了所有必要的包。升級(jí)后如果出現(xiàn)其他兼容性問題可以在GRUB啟動(dòng)時(shí)選擇舊內(nèi)核進(jìn)入系統(tǒng)。4.2 禁用有問題的電源管理功能無線網(wǎng)卡的電源管理功能PCIe ASPM有時(shí)會(huì)導(dǎo)致設(shè)備在休眠或低功耗狀態(tài)下無法被正確喚醒表現(xiàn)為WiFi時(shí)有時(shí)無或者重啟后消失。可以嘗試在內(nèi)核啟動(dòng)參數(shù)中禁用它。編輯GRUB配置sudo nano /etc/default/grub找到GRUB_CMDLINE_LINUX_DEFAULT這一行在引號(hào)內(nèi)的參數(shù)末尾添加pcie_aspmoff例如修改后可能是GRUB_CMDLINE_LINUX_DEFAULT“quiet splash pcie_aspmoff”保存文件更新GRUB配置sudo update-grub重啟電腦。4.3 固件文件的手動(dòng)放置極少數(shù)情況下你需要從驅(qū)動(dòng)源碼或第三方網(wǎng)站下載特定的固件文件.bin或.ucode文件并手動(dòng)放到/lib/firmware目錄下。操作前務(wù)必確認(rèn)固件文件的準(zhǔn)確名稱和路徑。例如對(duì)于某些英特爾網(wǎng)卡可能需要特定版本的iwlwifi固件。你需要根據(jù)網(wǎng)卡的具體PCI ID去英特爾開源網(wǎng)站查找對(duì)應(yīng)的固件文件。下載正確的固件文件。將其復(fù)制到/lib/firmware目錄可能需要特定子目錄如/lib/firmware/iwlwifi-...。修改文件權(quán)限sudo chmod 644 /lib/firmware/你的固件文件.bin重新加載驅(qū)動(dòng)模塊sudo modprobe -r iwlwifi # 移除模塊 sudo modprobe iwlwifi # 重新加載模塊5. 終極排查清單與備用方案當(dāng)你嘗試了以上所有方法仍然無效時(shí)可以按照這個(gè)清單進(jìn)行最后一次系統(tǒng)性的排查或者考慮備用方案。5.1 系統(tǒng)性排查清單步驟命令/操作預(yù)期結(jié)果與后續(xù)動(dòng)作1. 硬件識(shí)別lspci | grep -i wireless有輸出進(jìn)入步驟2。無輸出檢查物理開關(guān)、BIOS設(shè)置或考慮硬件故障。2. 射頻阻塞rfkill list若顯示 blocked執(zhí)行rfkill unblock all。3. 驅(qū)動(dòng)模塊lsmod | grep -E “(iwlwifi|rtw)”及dmesg | grep -i firmwarelsmod應(yīng)有對(duì)應(yīng)模塊dmesg不應(yīng)有“firmware failed to load”錯(cuò)誤。有錯(cuò)誤則需安裝固件。4. 網(wǎng)絡(luò)服務(wù)systemctl status NetworkManagerip link show wlan0NetworkManager應(yīng)為activeip link顯示wlan0狀態(tài)為UP。若非UP嘗試sudo ip link set wlan0 up。5. 連接掃描sudo nmcli dev wifi list應(yīng)列出周邊WiFi。若為空嘗試sudo iw dev wlan0 scan仍為空則可能是驅(qū)動(dòng)或區(qū)域問題。6. 連接嘗試nmcli dev wifi connect “SSID” password “密碼”嘗試直接連接。失敗則查看journalctl -u NetworkManager -f獲取實(shí)時(shí)錯(cuò)誤日志。7. 內(nèi)核與固件uname -rapt list –installed | grep linux-firmware考慮升級(jí)HWE內(nèi)核和完整固件包。5.2 備用連接方案在WiFi問題解決前你總得讓系統(tǒng)能上網(wǎng)以下載驅(qū)動(dòng)和更新。這里有幾個(gè)備選方案USB有線網(wǎng)卡最穩(wěn)妥的方案。找一個(gè)免驅(qū)的USB轉(zhuǎn)以太網(wǎng)適配器插上就能用通過有線網(wǎng)絡(luò)解決問題。手機(jī)USB網(wǎng)絡(luò)共享將安卓或iPhone通過USB線連接到電腦在手機(jī)上開啟“USB網(wǎng)絡(luò)共享”功能。Ubuntu通常能將其識(shí)別為有線網(wǎng)絡(luò)立即獲得互聯(lián)網(wǎng)連接。離線下載驅(qū)動(dòng)包在另一臺(tái)能上網(wǎng)的電腦上根據(jù)你的網(wǎng)卡型號(hào)從GitHub或PPA倉(cāng)庫(kù)下載好所需的.deb安裝包或源碼用U盤拷貝過來安裝。5.3 最后的考慮硬件兼容性與系統(tǒng)版本如果所有軟件方法都失敗了需要考慮兩個(gè)可能性硬件兼容性極少數(shù)非常冷門或特別新的網(wǎng)卡可能確實(shí)沒有Linux驅(qū)動(dòng)。這時(shí)更換一個(gè)已知兼容性良好的USB無線網(wǎng)卡如某些采用MT7612U芯片的型號(hào)是最快的解決方案。系統(tǒng)版本過舊Ubuntu 18.04已于2023年4月結(jié)束標(biāo)準(zhǔn)支持。如果你的硬件比較新強(qiáng)行在舊系統(tǒng)上適配驅(qū)動(dòng)可能事倍功半。考慮備份數(shù)據(jù)升級(jí)到Ubuntu 22.04 LTS或更新版本新系統(tǒng)對(duì)新硬件的開箱即用支持要好得多。我自己就曾為一塊2019年出的筆記本網(wǎng)卡在18.04上折騰了兩天編譯了各種驅(qū)動(dòng)版本都不穩(wěn)定。最后升級(jí)到20.04一切迎刃而解。有時(shí)候選擇比努力更重要尤其是在技術(shù)迭代飛快的今天。對(duì)于生產(chǎn)環(huán)境或追求穩(wěn)定的用戶在購(gòu)買硬件前花幾分鐘查一下主流Linux發(fā)行版對(duì)其的支持情況能省去后面無數(shù)麻煩。