2024.9.18 更新
发现了有人洗稿,牛魔收藏量比我还多,道心直接不稳了,如鲠在喉
先说解决方法,造成这种问题的原因我会在下半部分说明
打开powershell或cmd,输入ipconfig,找到"无线局域网落适配器",一定看清楚,是无线局域网络适配器,记住/复制ipv4那一行IP地址
打开wsl,输入sudo vim ~/.bashrc 在最下面加上/更改export DISPLAY=(你刚才复制/记住的IP):0.0
(记得加上:0.0)
然后执行
source ~/.bashrc
已经迫不及待了(喜),直接启动(我超,元)
产生这种问题的原因
相信你一定用某种手段使用了代理,并且在.wslconfig中应用了
networkingMode=mirrored
即打开了镜像模式
对,问题就出在这里,让我们从头开始梳理
在默认情况下,wsl的网络模式是net模式,在这种模式下你在cmd中输入ipconfig会看到以太网适配器 vEthernet (WSL (Hyper-V firewall)),于是直接在~/.bashrc中应用export DISPLAY=xxx(那里面的ip地址)就可以,不会出现任何问题
但是!一旦你使用了镜像网络,这个适配器就失效了(其实我也不确定是不是真的失效了,总之是没有用了),但是在你输入ipconfig的时候,这个适配器依然会被显示出来,除非重启电脑它才会消失。
而取而代之的是无线局域网适配器 WLAN,也就是说你要将export DISPLAY=后面的IP地址改成它的IPV4地址
当然还有小伙伴会有疑问,holy cow?wtf?
我使用的是
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0
啊!我从 /etc/resolv.conf
文件中提取所有 DNS 服务器的 IP 地址的功能呢,怎么不好使啊,我少的功能这块谁给我补啊?阿米诺斯!
莫急,你可以使用这个功能来做个实验,你会发现你获取的是默认网关地址(其充当局域网(LAN)和外部网络(如互联网)之间的中介)而不是ipv4地址(悲
这个问题真的是困扰了我几个小时,我翻遍了github和stackoverflow等社区都没有找到解决办法,直到我重启电脑并且观察ipconfig,发现vEthernet 没了的那一刻才有了解决这个问题的头绪,还是得加强网络方面的知识啊。