第 8 節

Extended Features

0瀏覽次數0訪問次數--跳出率--平均停留

Wine

Android

I 卡、A 卡

  1. Wayland + Waydroid(体验超级好)

Official website:

https://waydro.id/

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 规则即可解决。

Nvidia card (So Nvidia Fxxk U!)

  1. QEMU-KVM Virtual Machine + BlissOS-X86
    https://www.bilibili.com/video/BV1aS411P7Wh
    1. A relatively recommended configuration
    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
    
    1. Common Operations:
      1. Full screen: Ctrl+Alt+F
      2. ADB debugging
        1. Connect Linux and Android using ADB.
        
        # 连接安卓
        adb connect 127.0.0.1
        
        # 打开shell
        adb -s 127.0.0.1:5555 shell
        
        # 使用root权限
        su
        
      3. Chinese input method
        1. You can download Google Input Method: press Shift+Space to switch between Chinese and English (this effectively prevents conflicts with the Linux system's native Chinese/English switching).
音乐页