我的 Raspberry Pi Zero 插 4G LTE USB 網卡上網,網卡偶爾會失去連線,重開後又恢復正常,搞半天才發現轉接線捅出的婁子,這點我放到「後記」作敘述。然後就有了這篇筆記,若碰到USB裝置連接斷開,我嘗試用指令讓USB裝置不重開機自動連回,作為暫時性的解決方案。

使用以下指令會將USB裝置列出,並記下常會斷線的USB裝置ID
lsusb #顯示本機USB裝置列表
參考裝置ID範例(千萬不要照抄)

複製以下Shell Script 並存檔 USB_reconnection.sh,將你記下的USB裝置ID取代掉【Device_ID】
#!/bin/bash #Use \"lsusb\" command to find the Device ID. Device_ID="2001:7e35" #set waiting time Loop_Time=40 while true do CHK_Device=$(lsusb 2>&1) if echo "$CHK_Device" | grep -q "$Device_ID"; then echo "Good!" >/dev/null else sudo usbreset $Device_ID fi sleep $Loop_Time done
為檔案增加可執行權限
sudo chmod +x USB_reconnection.sh
#增加可執行權限
接下來執行 USB_reconnection.sh,會每隔固定時間檢查該裝置是否在線,如果斷開連結會一直嘗試重連。
後記
usbreset 指令有兩種常見用法
1. 使用 Bus 和 Device 編號
sudo usbreset 001/006
2. 使用 Product ID
sudo usbreset 2001:7e35
裝置斷連結的原因
因為 Raspberry Pi Zero 的接口是 USB-Micro B,4G網卡是USB A,需要透過一條 USB2.0 Micro-B/公 轉 USB Type-A OTG 線材,問題就出現在這條劣質線材上;我將這條線換成UGREEN的,問題就在也沒法生過了。
線材的問題之所以棘手,因為很難想的到,這種USB裝置偶爾失連的問題很難和新的轉接線作聯想,甚至可能會懷疑是驅動的問題,造成除錯時間大增。
總之,線材的品質還是要注意的!


