请问一下 WSL2 下的 GUI 最佳实践?

最近在 Windows 下工作,使用 WSL2 来工作,GUI 可以通过 X11 转发(VcxSrv)来实现,但这个在电脑休眠等情形下会断掉,而且除非等官方 vsock 支持似乎其他方法无解。目前靠 desktop-save 断了之后重开恢复 buffer, 但还是很恼人。

请教一下各位是怎么用的,还是干脆就终端省事了?

用Emacs daemon并不会断掉,就是要一直留个daemon在后台占内存。

实测 emacs --daemon + emacsclient -c 还是会断

我安装了 Process Lasso,这个软件可以让电脑在合盖情况下持续运行N个小时,这样wsl2 就不会断了

:joy: 这也太粗暴了

我就是是直接终端下使用spacemacs了,GUI折腾太麻烦了。

抱歉忘了说了,我是在WSL1下面试的。合上盖子后X11的GUI确实会断掉,但是后台的daemon不会断,因此只要能够做到 关闭GUI->休眠->开启GUI 并且在Emacs中配置一下使得通过Emacs daemon打开的新GUI界面与关闭时的GUI界面打开的buffer状态相同即可。总之后台的daemon是不会被杀掉的,并且能保留所有打开的buffer,只是重新打开的时候不能够进入之前的buffer打开状态而已。

有点神奇,我也是这么用的,但是有一定机率 emacsclient 断掉导致 daemon 也消失。我当时回你时候测试是 daemon 也没了。后来试了几次有时候还在有时候消失。 奇怪的是 emacsclient 正常点X关闭或者 kill 掉 daemon 都没问题

睡眠前C-x C-c退出不会导致daemon关闭√ 只要把使用逻辑改成:手动关闭client,启动client时恢复buffer界面。启动速度也能保证。

哈哈哈现在就是这么干的,手动退出 client
恢复 buffer 界面的配置方便共享一下吗?

很不优雅的方法,每次退出的时候把buffer存在变量里面

  (advice-add #'save-buffers-kill-terminal :before
                (lambda (&optional args)
                  (interactive) (setq client-revert-bufferp (current-buffer))))

  (defun client-revert-buffer ()
    "revert the buffer if client-revert-bufferp is defined"
    (interactive)
    (if (boundp 'client-revert-bufferp)
        (switch-to-buffer client-revert-bufferp)))

然后在client的启动里面加上 --eval '(client-revert-buffer)'

不过这样并不能复原所有buffer状态,只是移动到了关闭时的那个buffer而已。

2 个赞

使用hyper-v + x410 + vsock可以解决这个问题,而且很好用

中文输入法问题,可以参见: http://bbs.pcbeta.com/forum.php?mod=viewthread&tid=1768561&ordertype=1 fcitx是类似的

1 个赞

VcxSrv在你那边使用有性能问题吗?我这边win10下用VcxSrv,使终会出现性能问题,直到换了微软商店里的X410才解决。

你这不是WSL 2吧?

不是WSL2,是hyper-V; wsl2还不支持vsock

vcxsrv 我用卡顿明显。 mobaxterm 效果好点,但我这 server 经常断。 x410 性能好,而且也稳定偶尔也会启动不了(贵!)

hyper-v 用起来有什么痛点吗?
目前感觉 wsl2 和 windows 本身结合还不错(网络、文件),不知道值不值得转成 hyper-v

这两天把wsl1-debian转换成了wsl2,也开始有这问题了 :joy:。 表现是睡眠、休眠后,前台的emacs-client掉了,但是后台的daemon还在。 重新开个emacs-client就好了,buffer还在,不算很影响使用,先凑合着了。 等wsl2的官方gui出来,也就个把月了。

官方GUI支持没有时间表。目前还只是个大饼而已。

用wsl2+mobaxterm,没有断掉的问题

1 个赞