在公司一直用的 WSL1 环境跑 emacs,今天心血来潮升了下 WSL2。没想到居然这么坑。。。可是环境都配好了,就不想回去了
发个帖子收集下大家在 WSL2 下还遇到过什么坑。。。
目前我遇到的问题主要有:
- WSL2 和 proxfier 会产生冲突:
这个问题非常鬼畜,主要表现在:没法同时使用 WSL2 和 proxifier 这俩。要是开了 proxifier 会使得 WSL 起不来,无法新建终端,直接跑 WSL 会报参考的对象类型不支持尝试的操作
。
解决’对象‘错误:
// powershell 管理员
netsh winsock reset
// 重启
解决方法:1. 不用 proxifier; 2. 运行修复程序
我采用的是方法2, 直接导致我现在 wsl-terminal 挂了,根本没法通过它启动 WSL。。。 但是 windows-terminal 因为是直接跑 wsl.exe 的就还能正常使用。
- WSL2 代理:
这个问题我给出自己(拿来)的配置
配置操作:
// .bashrc
// port 写代理软件(如 v2ray)的监听端口
// 注意代理过去的协议格式
export hostIp=$(cat /etc/resolv.conf |grep -oP '(?<=nameserver\ ).*')
export https_proxy="socks5://${hostIp}:port"
export http_proxy="socks5://${hostIp}:port"
export all_proxy="socks5://${hostIp}:port"
还有最后一个操作:
主要要把公共网络的防火墙策略配置下(最好别直接给关了)
// powershell 管理员
netsh interface portproxy add v4tov4 listenport=4000 listenaddress=0.0.0.0 connectport=4000 connectaddress=192.168.101.100
- xServer(VcxSrv) 连接:
用终端的大佬可以直接忽略。直接上配置:
// 接上
export DISPLAY=:${hostIp}:0
- 各种程序、文件的运行和处理速度非常慢/ 热编译不起作用等。。。
解决方法:把项目文件夹移到 Linux 的文件系统下。
其实都是些很小的问题,欢迎大家都试试让更多有需要的人少走些弯路。
3 个赞
有一个坑,睡眠唤醒后,gui的emacs会掉,应该也是wsl2的网络原因。
在等wsl2的gui官方支持,也许能好,也许不能。
这几天在win上我还重新配置了emacs,除了c++配置搞不大好,别的都还好,能用。
主要 WSL2 虚拟了一张网卡,导致一些配置要改,基于tun的透明代理在我这儿直接报废。
于是我继续用回 WSL1 了……
cireu
4
感觉直接用WSL2不如用基于WSL2的docker.
- Dockerhub有很多发行版的image, 比WSL2自带几个有限的发行版多很多选择
- Docker可以很方便的处理诸如端口转发等琐碎问题.
windows 难道不是想把 WSL 做成原生的子系统吗?还是期待它把 WSL 做好一点吧。。。
今天又遇到了几个问题:
- 找不到家目录在 windows 下的路径
解决方案:
创建一个脚本执行:
// find-home.sh
#!/bin/bash
explorer.exe .
- 给 emacs 做代理:
试了几种方式,都么得啥用
很奇怪的是外面的代理软件收到请求了,但是 emacs 貌似就是没法拿到返回数据。。。只好把所有代理关掉了走国内镜像和 github 了。
- emacs 居然会闪退。。。
这个感觉不是 WSL 的问题。但是我今天没解决。
表现: emacs 会闪退,主要是 x server 会无缘无故挂掉。然后终端报错:When compiled with GTK, Emacs cannot recover from X disconnects. This is a GTK bug: blablabla
解决方案
接上
eamcs 闪退的问题和休眠 emacs 会掉的问题解决了。
原因应该出在 xServer 上, 我把 VcxSrv 换成 MobaXterm 这个问题迎刃而解。
老哥是不是不用 QQ 的 ,我工作强依赖 QQ,太痛苦了,要不是这样我早就转 Linux 了。
deepin wine 微信效果不错,tim运行差强人意。。。。
老早就不用qq了,不过uos里面似乎有qq <_<
另外wsl太多坑了,gdb调试时候报错的位置都能错掉。
aeghn
12
差强人意: 大体上让人勉强满意
不知道大佬是不是就是这个意思,我这感觉 TIM 完全不能用
我这在Arch Linux 上连deepin wine 都不能用,点几下就直接崩了。
proxfier 做啥用啊,emacs在wsl下编辑不是挺好的。
Bitnut
16
做全局代理配置的软件,其实不用也可以的。
emacs 在 WSL2.。。。真的太一言难尽了,今天发现WSL 下 emacs 会越用越卡,开了几个 lsp 的后端就开始一卡一卡了。
另外发现,退出 emacs 重启之后,顶部的拖动条就没了 ,只能重启 MobaXterm。
PS:可能是我电脑配置太差了
Bitnut
17
最近遇到一个问题是家里的笔记本字体比较小些,需要字体大小和在公司的不一样。这就需要判断是否在 WSL 环境下了。
下面是我使用的方法:
(defconst sys/linuxp
(and (eq system-type 'gnu/linux)
(not (string-match "-[Mm]icrosoft" operating-system-release)))
"Are we running on a GNU/Linux system?")
(defconst sys/WSL
(and (eq system-type 'gnu/linux)
(string-match "-[Mm]icrosoft" operating-system-release))
"Are we running on a GNU/Linux system?")
(defconst sys/win32p
(eq system-type 'windows-nt)
"Are we running on a WinTel system?")
;; 使用的时候
(cond
(sys/linuxp (set-face-attribute 'default nil :height 160))
(sys/win32p (set-face-attribute 'default nil :height 140))
(sys/WSL (set-face-attribute 'default nil :height 140)))
借鉴了下 @seagle0128 大佬的配置
3 个赞
(if (string= (system-name) "DESKTOP-DMGKG0I");;PC at work
(progn (set-font "Sarasa Term SC" "Sarasa Term SC" 24 24)
(setq desktop-dirname "~/.emacs.d/DMGKG0I")
(setq desktop-path '("~/.emacs.d/DMGKG0I"))))
(if (string= (system-name) "DESKTOP-439OGGP");;Mini PC
(progn (set-font "Sarasa Term SC" "Sarasa Term SC" 40 40)
(setq desktop-dirname "~/.emacs.d/439OGGP")
(setq desktop-path '("~/.emacs.d/439OGGP"))))
对于多设备,我是通过获取每个系统的system-name来判断的,进eshell输入(system-name)即可。
不过我发现在wsl2里面获取的system-name和宿主Windows上开GUI emacs获取到的system-name完全一致,幸好没人会同时使用wsl和windows的emacs吧。
o2o
19
我就是那个同时使用wsl和windows emacs的人。。。
1 个赞