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