第 8 節

拓展功能

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

Wine

Android

I 卡、A 卡

  1. Wayland + Waydroid(體驗超級好)

官網:

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 規則即可解決。

N卡(So Nvidia Fxxk U!)

  1. QEMU-KVM虛擬機 + BlissOS-X86
    https://www.bilibili.com/video/BV1aS411P7Wh
    1. 比較推薦的配置
    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. 常用操作:
      1. 全屏:Ctrl+Alt+F
      2. adb調試
        1. 使Linux與Android用ADB連接。
        
        # 连接安卓
        adb connect 127.0.0.1
        
        # 打开shell
        adb -s 127.0.0.1:5555 shell
        
        # 使用root权限
        su
        
      3. 中文輸入法
        1. 可以下載google輸入法:按Shift+space進行中英文切換(這樣有效防止與linux本機的中英文切換衝突)
音乐页