多數版本的 linux 都有圖形介面可以設定 wifi 連線, 就連輕巧的 antix 也有 wicd 可用。 但是萬一困在某些「沒有中文、 沒有圖形介面」的陽春版 linux 環境底下, 該如何設定無線網路連線呢? 請拿出一部已經找不到驅動程式的淘汰 windows 筆記電腦、 插上你的 finnix 救援隨身碟, 跟貴哥一起從檢查 firmware 到設定 wpa_supplicant 整個流程做一遍, 以後你將不再害怕無線網路設定。 好吧, 嚴格來說不算完全赤手空拳, 但是已經足夠讓旁人敬佩了。
一、 有抓到網卡嗎?
[2017/5/28 補充這節]
首先檢查 OS 有沒有偵測到硬體:
dmesg | grep -i wifi
如果有印出任何內容, 請直接跳到下一節。
如果是空白, 有可能是升級核心時, 漏裝了
linux-image-extra 套件 -- wifi 驅動程式都在這個套件裡。
用 uname -r
查出 kernel 版本,
再用 dpkg -l | grep ' linux' | grep 版本
查看跟 linux 核心相關的套件。 例如我的 lubuntu 16.04
的核心版本是 4.8.0-41-generic,
那麼除了 linux-image-4.8.0-41-generic 套件之外,
應該還需要安裝 linux-image-extra-4.8.0-41-generic 套件,
才會有 wifi 驅動程式 (在
/lib/modules/4.8.0-36-generic/kernel/drivers/net/wireless/ 底下)。
二、 能啟用網卡嗎?
如果 dmesg | grep -i wifi
有印出一些訊息,
但是 /sbin/ifconfig -a
卻看不見
(名為 wlan0 或 wlp3s0 之類的) wifi 裝置,
請用 ifconfig wlp3s0 up
之類的指令啟用它。
如果啟用成功, 請直接跳到下一節。
下 dmesg | less
然後 (按 / ) 搜尋 wifi
例如在我的 x220i 筆電上, 看到附近的訊息如下:
[ 6.999329] Intel(R) Wireless WiFi driver for Linux, in-tree: [ 6.999332] Copyright(c) 2003-2013 Intel Corporation [ 6.999463] iwlwifi 0000:03:00.0: irq 43 for MSI/MSI-X [ 7.042618] microcode: CPU0 sig=0x206a7, pf=0x10, revision=0x15 [ 7.246183] iwlwifi 0000:03:00.0: firmware: agent aborted loading iwlwifi-1000-5.ucode (not found?) [ 7.246781] platform microcode: firmware: agent aborted loading intel-ucode/06-2a-07 (not found?) [ 7.246880] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba [ 7.247238] iwlwifi 0000:03:00.0: firmware: agent aborted loading iwlwifi-1000-4.ucode (not found?) [ 7.248035] iwlwifi 0000:03:00.0: firmware: agent aborted loading iwlwifi-1000-3.ucode (not found?) [ 7.250482] iwlwifi 0000:03:00.0: firmware: agent aborted loading iwlwifi-1000-2.ucode (not found?) [ 7.251890] iwlwifi 0000:03:00.0: firmware: agent aborted loading iwlwifi-1000-1.ucode (not found?) [ 7.251960] iwlwifi 0000:03:00.0: no suitable firmware found!
通常筆電內建網卡比較容易抓不到。 如果上述指令找不到 wifi 相關的訊息, 用筆電型號加上 「linux wifi」 搜尋也無法解決問題, 那就只好哭吧... 這時, 最簡單的解決方式就是買一張外接的 「usb 網卡」 (請搜尋)。 根據我自己的經驗加上學生的回報, 到目前為止總共十支左右各種品牌的外接 usb 網卡的成功率是百分之百。 隨便哪一個沒聽過牌子的便宜型號 usb 網卡, 在 linux 底下也都是隨插即用。 至於那些沒錢有毅力的讀者則可以再努力一下: 先用 lsusb 跟 lspci 指令 查看你的網卡型號, 再用網卡型號 google 或直接到 這一頁 查看該用哪一個適當的模組, 最後再研究詳細的文件: Wireless network configuration。
總之, 大多數人應該跟我一樣會找到 "aborted loading"。 這就表示 linux 其實已偵測到硬體 (上面第一段標示處)、 載入正確的無線網卡模組 (上面第二段標示處; 以我而言是 iwlwifi)。 只是有些 wifi 的硬體特別刁鑽, 另外還需要用到廠商所提供、 不自由的專屬韌體。 Linux 通常把這些專屬韌體放在 /lib/firmware 底下。 但是某些嚴格遵守自由宗旨的版本或是精簡的版本預設不安裝, 所以它的 /lib/firmware 是空的 -- 例如 finnix。 這時可以找其他任何一部 linux 電腦 (或掛載本電腦上面另一個完整版本的 linux 的分割), 檢視它的 /lib/firmware 目錄, 把相關的韌體 copy 過來。 可能有好幾個版本的韌體都可以驅動這個硬體; 你只需要其中一個。 以這裡為例, iwlwifi 模組最優先想要載入的是 iwlwifi-1000-5.ucode (上面第三段標示處), 所以你只需要把這一個檔案從別部電腦 (或從別的分割) copy 到 /lib/firmware 就可以了; 後面的檔案可忽略。
然後移除無線網卡模組 (你的網卡模組名稱可能與我的不同)、 重新載入一次:
rmmod iwlwifi modprobe iwlwifi
這時再下 ifconfig -a
重新檢查一次,
應該就會看到 wlan0 了。
三、 萬用的 wpa_supplicant 幫你連上無線分享器
在圖形介面下, 可以用 wicd 設定有線/無線網路。 但是貴哥要看到命令列才有安全感。 所以我找到了 wpa_supplicant , 可以跟 WPA、 (幾分鐘就被破解的) WEP 或是沒有加密的無線基地臺連線。
- 安裝套件:
apt-get install wpasupplicant
- 把這個設定檔
wpa_supplicant.conf 存成 /etc/wpa_supplicant/wpa_supplicant.conf
並且
chmod 600 /etc/wpa_supplicant/wpa_supplicant.conf
關閉對外權限以策安全! - 編輯上述設定檔,輸入正確的 ssid 及密碼。 更完整的範例檔請見 這裡。 注意! 很多店家用電話號碼當做密碼。 這有可能被分享器直接當成十六進位數字。 在某些情況下如果無法連線, 請試著把引號拿掉。 詳見 手冊 談 quote 的部分。
- 先用
route -n
確認一下網卡還沒連線。 - 拿密碼向無線基地臺認證:
wpa_supplicant -B -i wlan0 -D nl80211 -c /etc/wpa_supplicant/wpa_supplicant.conf
這裡的 -i 後面要打網卡名稱 -- 就是先前 ifconfig -a 看到的。 至於 -D 後面則要打網卡驅動程式名稱 -- 這跟前面看到的無關, 而是要選 wpa_supplicant 所提供的驅動程式之一。 有哪些驅動程式可選? 下wpa_supplicant -h
找到 drivers 那一小段, 逐一試試看吧。 詳見 這個問答。 - 向無線基地臺要網址等等:
dhclient wlan0
- 重下一次
route -n
應該就看到連線成功了。
四、 管理很多個基地臺連線資訊
如果遇到設定比較複雜的無線基地臺, 請參考 這一頁。
如果同時有好幾個無線基地臺可以連, wpa_supplicant 會如何挑選? 找不到官方文件, 手冊 只簡單地說: 會根據設定檔內各個基地臺出現的順序、 網路安全性、 訊號強度來自動挑選。
另外, 提醒一下 2014 年 7 月所發現的 「Android 廣播你曾經連過的 wifi 連線」 這個隱私問題, 底層有問題的程式碼其實就是 wpa_supplicant。 未來的版本應該會修正。
採用 finnix 開機光碟的讀者, 可以直接跳到結論。 下一節是給硬碟版本的 linux 用戶。
五、 開機時自動連上無線網路; 等超久? 丟到背景去執行
測試成功之後, 接下來要把它寫入設定檔, 以便開機時自動連線。 wpa_supplicant 的文件好像不太齊全。 我在 debian 官方文件 找不到 「如何把命令列的 -D 選項寫進設定檔」; 只搜尋到 1、 2 等等範例, 看來是用 wpa-driver 來設定。 請在 /etc/network/interfaces 裡面補上這段:
auto wlan0 iface wlan0 inet dhcp wpa-driver nl80211 # 這裡當然要改成你自己試出來的 driver wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
從此以後一開機, 無線網路就會自動連線。
每當更改過設定檔 (例如新增/修改基地臺的 ssid 與密碼) 之後,
也可以用 ifdown wlan0
跟 ifup wlan0
重新啟動 wifi 連線。
但是如上設定完成之後, 當你離開熟知的基地臺範圍,
開機時為了要等 wifi 連線, 會卡很久。
伺服器也許有必要等網路通了再啟動其他服務;
至於筆電, 不如把 wifi 連線丟到背景去執行。
所以我的做法是: 第一, 先註解掉 auto wlan0
那一句, 也就是叫系統在開機時別自動連 wifi。
第二, 在 /etc/rc.local 裡面加一句:
(date ; ifup wlan0) > /root/wifi.log 2>&1
把 wifi 連線的動作丟到背景執行, 錯誤訊息記錄在 /root/wifi.log 裡面。
六、 結論
請把貴哥這一帖跟不到 30MB 的 /lib/firware 都 copy 到你的 finnix 隨身碟上。 雖然用 finnix 無法讀中文, 但至少讀指令跟設定檔沒問題。 下次遇到 「因為找不到/無法安裝驅動程式而無法上網」 的舊電腦加無線網卡, 就可以很帥氣地表演文字模式徙手上網了 :-) 還可以進一步建議把 開機管理員 grub 跟 超輕薄的 finnix 救援光碟 裝到他的電腦裡面去。 但約會場合請小心服用, 以免 ... Computer Dating, Linux Style ...你的初戀就 GG 了 :-)
您好:我們是日本WIFI機租賃公司
回覆刪除接收超強DOCOMO訊號
暢遊日本走到哪聊到哪
4GLTE+最新WIMAX2
歡迎來電洽詢(03)3830101
網路訂購介面:http://a27598706.pixnet.net/blog