緣起:
這陣子有想要跟 dc 的一位群友分享 esp01
的東西,可能會需要分享接線還什麼的,想說到時在 dc
用螢幕分享電腦上的程式時,用 scrcpy
連手機,再開鏡頭就能同時分享周遭的畫面,我是有 usb webcam
啦,但它的畫質很差.... 。
我這時才發現我還沒開過我那台 pixel 手機的開發人員模式 XD
(好像也正常,買來後都完全沒拿來做跟開發有關的東西),進入開發人員的選項來開啟
USB 偵錯時,注意到有多了無線偵錯的選項
哇嗚,能透過 wifi 來進行 adb debug ? 太酷了吧,用 wifi 的話就不會有像使用 USB 一樣的問題,有時手機動一下,啪,斷線。操作起來其實蠻簡單的,這篇其實最主要是記錄除錯的過程,不是說 adb 還 scrcpy 有什麼問題,有問題的是我 N100 的 wifi 卡。
Adb Wifi Debug:
一開始不確定怎麼用,有先去看影片。先去
scrcpy git,根據你系統下載最新的 release,裡面除了 scrcpy 外,還有 adb
能直接使用。
手機啟用 USB 偵錯後,用 USB 線接上你的電腦,授權這台電腦
USB 偵錯,讓裝置都連同一個 wifi 後,開啟手機的無線偵錯,允許在這 Wifi
下使用無線偵錯功能
./adb connect 192.168.1.102:39123
如果就只有這個 adb device,可以直接在 terminal 使用 ./scrcpy,就能連上手機畫面了。
網路除錯:
正常來說,這篇文章到上面那段就結束了,但我實際在操作時,發現他畫面會出來個
3 秒,然後卡住,接著 Wifi 會沒辦法上網,搞得我必需要重啟 NetworkManager
才行,不管試幾次都會出現這錯誤,超煩的,一開始以為是因為我有在我的 N100
上做 NAT 才會這樣,花了很多時間在調整跟測試 iptables。
我最後發現,原來是 driver 的問題,那台 N100 的 Wifi
卡是 Realtek 的,官方的驅動在 Linux 上有不少的問題。我最後是把 Wifi
卡換掉,把 Lenovo 筆電的 Wifi 卡拔下來給 N100,它的 wifi 卡是 intel
的,之後再次使用 scrcpy 就沒問題了。
在除錯的過程有學到很多東西,所以想寫下來,接下來紀錄的是我的除錯過程
(再次感謝 gpt 老師。
ip neigh:
當時先試著用 tcpdump 觀察 wl4s1,發現 scrcpy
的畫面卡住時,出現這些訊息
嗯.... 有意思,手機開始 ARP 廣播問說誰是 N100,突然找不到 N100 的 ARP 對應資訊?我的 Wifi 卡的狀態可能出問題,gpt 建議我用 ip neigh show 查看,下了指令後,看到這些
sudo ip -6 neigh del fe80::9a03:8eff:fe12:f80b dev wlp4s0
清完後重試 scrcpy.....
嗯,沒用,再試另一個方法,鎖定手機的 ARP entry,讓 ARP cache
不會丢失。
sudo ip neigh replace 192.168.1.102 lladdr <手機MAC> dev wl4s1 nud permanent
還是沒用,下一步 !!!
顯示與清除 iptables 規則:
再來試著把之前手動新增的 iptables 規則給砍了,首先是 ip
forward,顯示所有 FORWARD 規則,--line-numbers
會顯示行號,方便刪除時參照用
sudo iptables -L FORWARD -n --line-numbers
要砍掉規則的話,用
sudo iptables -D FORWARD {行數}
我那時新增的 FORWARD 規則在第 6、7 行,砍完 7 後再砍
6,要注意它的行數會即時更新,刪除一條後,下面的會往上移。
再來是 NAT 的 POSTROUTING 規則,下指令查看
sudo iptables -t nat -L POSTROUTING -n --line-numbers
我當時看是有 3 行,最後一行大概就是我自己設定的,所以把第 3
行砍了
sudo iptables -t nat -D POSTROUTING {行數}
自訂的 iptables
規則都砍光後,再次測試,還是一樣。我這時候開始懷疑是 Wifi
卡的問題了。
Wifi 介面檢查:
網路再次卡死後,我有試著 ping Wifi Router,它跟我說
Unreachable,好哦,用一套組合拳查看 Wifi 卡的狀態
# 1. 檢查 Wi-Fi 狀態
# (有,用這指令也能看到 Wifi 卡的上傳跟下載速度)
sudo iw dev wlp4s0 link
# 2. 看 Wi-Fi 是否仍然連線
# (有)
nmcli device status
# 3. 檢查是否還有 IP
# (有)
ip addr show dev wlp4s0
還有再用 ip neigh 查看一次,這次注意到有 "192.168.1.1 DEV
WLP4S0 INCOMPLETE",看來,真的是 Driver 或 Firmware 層掛掉。
所以下一步是檢查 Wifi 卡的 Driver,用指令
sudo lshw -C network
我看到,我的 Wifi 的 driver 是 rtw_8821ce
雖然無法確定 gpt 是怎麼得出這結論的,但經過這一陣折騰後
sudo modprobe -r rtw_8821ce
sudo modprobe rtw_8821ce
它跟我說 rtw_8821ce not found,操
接下來試著禁用這模組的載入,在 /etc/modprobe.d 新增
blacklist-rwt8821ce.conf 檔,然後裡面寫
blacklist rtw_8821ce
存檔->重開->沒用,操。最後想到我還有 Lenovo
筆電拔下來的 Wifi 卡可以用,就把它們兩個交換,然後就沒問題了,去你的
Realtek。 我師傅跟我說,有開源的 Realtek Wifi 卡驅動可以試試,但我那個
intel 的 Wifi 卡上傳跟下載速度都有 800 多 Mbps,實在是沒理由再把那個
Realtek Wifi 卡再裝回去 (它 600
多而已),之後有機會再試試自已裝驅動吧。
沒有留言:
張貼留言