拓展功能
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本机的中英文切换冲突)