拓展功能
Wine
Android
I 卡、A 卡
- Wayland + Waydroid(體驗超級好)
官網:
Waydroid 是在 Linux 上通過容器運行 Android 系統。對於 Intel 核顯、AMD 核顯用戶,配合 Wayland 桌面環境,整體體驗非常好,窗口顯示、輸入、性能都比較自然。
如果是 Fedora KDE Wayland,Waydroid 的桌面體驗會比較接近原生應用。
如果 Waydroid 顯示已經連接 Internet,但是實際無法聯網,大概率不是 Waydroid 本身壞了,而是宿主機的網絡轉發出了問題。
尤其是電腦之前安裝過 Docker 的情況下,這個問題更常見。Docker 會修改宿主機的 iptables / firewalld 轉發規則,可能導致 FORWARD 默認策略變成 DROP,從而讓 Waydroid 的 waydroid0 網橋流量無法轉發到真正的外網網卡。
我這次遇到的就是這個問題。
現象
Waydroid 裡顯示已經連接 Internet,但是應用無法聯網。
進入 Waydroid shell 測試:
sudo waydroid shell
然後 ping 外網 IP:
ping -c 3 223.5.5.5
如果顯示:
3 packets transmitted, 0 received, 100% packet loss
說明 Waydroid 實際沒有正常出網。
但是宿主機本身可以正常聯網:
ping -c 3 223.5.5.5
如果宿主機可以 ping 通,而 Waydroid 裡 ping 不通,說明問題不在熱點、不在 Wi-Fi,也不在宿主機網絡,而是在 Waydroid 的 NAT / FORWARD 轉發。
排查
先查看 Waydroid 的虛擬網橋:
ip -4 addr show waydroid0
正常會看到類似:
inet 192.168.240.1/24
然後進入 Waydroid:
sudo waydroid shell
測試能不能 ping 到宿主機的 waydroid0 網關:
ping -c 3 192.168.240.1
如果 192.168.240.1 能 ping 通,但是外網 IP 不能 ping 通:
ping -c 3 223.5.5.5
那就說明:
Waydroid 容器到宿主机是通的,
但是宿主机没有把 Waydroid 的流量转发到外网。
查看是否是 Docker / firewalld 轉發問題
查看 firewalld 當前 zone:
sudo firewall-cmd --get-active-zones
如果看到類似:
FedoraWorkstation (default)
interfaces: wlp0s20f3
docker
interfaces: docker0
trusted
interfaces: waydroid0
說明電腦上既有 Docker 的網橋 docker0,也有 Waydroid 的網橋 waydroid0。
再查看 FORWARD 規則:
sudo iptables --list-rules | grep FORWARD
如果看到類似:
-P FORWARD DROP
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-FORWARD
那基本就可以確定是 Docker / firewalld 把 Waydroid 的轉發擋住了。
這時候 Waydroid 能連接到宿主機,但是不能通過宿主機 NAT 到外網。
解決辦法
先查看當前真正聯網的網卡:
ip route | grep default
例如輸出裡有:
default via 192.168.xx.xx dev wlp0s20f3
這裡的 wlp0s20f3 就是當前真正連接外網的網卡。
然後添加持久化規則:
sudo firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i waydroid0 -o wlp0s20f3 -j ACCEPT
sudo firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i wlp0s20f3 -o waydroid0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
sudo firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -s 192.168.240.0/24 -o wlp0s20f3 -j MASQUERADE
sudo firewall-cmd --reload
注意:這裡的 wlp0s20f3 要替換成自己電腦當前真正聯網的網卡名。
然後重啟 Waydroid:
sudo systemctl restart waydroid-container
waydroid session stop
重新打開 Waydroid 後測試:
sudo waydroid shell
ping -c 3 223.5.5.5
ping -c 3 baidu.com
如果能 ping 通,說明 Waydroid 網絡已經修復。
總結
這個問題本質上不是 Clash 的問題,也不是熱點的問題,而是 Docker / firewalld / iptables 轉發規則衝突導致的。
簡單來說就是:
Waydroid 可以连接到宿主机的 waydroid0 网桥,
但是 Docker / firewalld 导致 FORWARD 转发被 DROP,
所以 Waydroid 的流量无法 NAT 到外网网卡。
通過給 waydroid0 和外網網卡添加持久化的 FORWARD / MASQUERADE 規則即可解決。
N卡(So Nvidia Fxxk U!)
- QEMU-KVM虛擬機 + BlissOS-X86
https://www.bilibili.com/video/BV1aS411P7Wh
- 比較推薦的配置
qemu-system-x86_64 \ -M q35,vmport=off \ -accel kvm \ -cpu qemu64,+sse3,+sse4.2 \ -smp 8,cores=4 \ -m 6G \ -usb \ -device virtio-tablet \ -device virtio-keyboard \ -device usb-tablet \ -bios OVMF-pure-efi64.fd \ -net user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022 \ -net nic,model=virtio \ -audio sdl,model=hda \ -display sdl,gl=on,show-cursor=on \ -device virtio-vga-gl,xres=1920,yres=1080 \ -drive file=disk.qcow2,media=disk,if=virtio,cache=writeback \ -drive file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom \ -monitor stdio \ -serial none- 常用操作:
- 全屏:Ctrl+Alt+F
- adb調試
- 使Linux與Android用ADB連接。
# 连接安卓 adb connect 127.0.0.1 # 打开shell adb -s 127.0.0.1:5555 shell # 使用root权限 su - 中文輸入法
- 可以下載google輸入法:按Shift+space進行中英文切換(這樣有效防止與linux本機的中英文切換衝突)