首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
宝塔
V2EX  ›  Windows

造了个启动 WSL 里的 sshd 的小东西

  •  
  •   RedL0tus · 170 天前 · 1672 次点击
    这是一个创建于 170 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为一些不可抗的原因,我这段时间在用 Windows。但是在这之前我已经有半年左右没用过 Windows 了,离开了 Linux 下的那些工具可以说是浑身难受。而且最近这段时间刚刚配了一下 tmux 之类的东西感觉挺好。到了 Windows 下可真算是这也没有那也没有了。

    于是装了 openSUSE 和 Arch 两个 WSL(Windows Subsystem Linux) 发行版。装完并设置好自己的 dotfiles 之后用了一段时间才发现 Windows 下根本就没一个好用的终端模拟器:

    • Windows 版的 Alacritty 字符显示不正确,拉伸窗口之后 tmux 的 status line 显示不正常。
    • Fluent Terminal 虽然好看,字符也正常,但是换行多了之后 tmux 的 status line 会丢。
    • ConEmu 对 dialog 的支持好像有问题。

    并且 vim 在这些终端模拟器里基本就是不能使用(尤其是配色上面)。这些问题据说是 ConHost 的限制,他们做终端模拟器的人也没办法。

    前段时间巨硬的 Build 大会上公布了 Windows Terminal,我也去他们的 CI 上面下了一个 Dev 构建然后试了下,发现:

    • 部分地方的颜色还是不对。
    • 功能倒是没什么大问题了,但是不支持 tmux 的 mouse mode 等等。
    • 占用真的太太太太太太高了,性能也是真的很烂... 我开了 五六个标签页吃了我 3GB+ 的内存和 20+% 的 CPU,Antimalware 的那个服务在此之上又吃了 20+% 的 CPU... 我这还什么都没干呢。而且这个时候性能已经差到了能看到它一个字一个字打出来的程度,实在是遭不住。

    这时候又看到说我们可以用 SSH,毕竟 Windows 下还是有不少还算好用的 SSH 客户端的嘛。可是这个方法也不是很完美。一是 WSL 里没有真正意义上的 init,像 Arch 这样只有纯 systemd 的发行版无法通过它自动启动 sshd ;二是就算能用 RC 脚本启动 sshd (比如 Ubuntu ),也还是需要用户操作,相对麻烦。

    然后我就想造一个东西能启动 WSL 里面的 sshd,网上稍微搜了下好像也没有同类程序。我就自己下载了 Visual Studio 试着写了一个。

    截图

    其实本来想做成 UWP 的但是试了一下发现完全没头绪,最后用了 WPF。我总共就没做过几个图形程序,希望大佬们轻点。

    现在基本功能在我这边测试是能用了(可以列出发行版,可以启动 sshd,可以开机自动启动),但是还是很不完善:

    • 窗口现在是无法拖大小的,因为我做不来。
    • 现在无法只停止 sshd 服务,只能杀死所有同个发行版的 WSL instance:
      • 我现在把跑了 sshd 的 WSL 进程放进了 BackgroundWorker,但是不知道如何正确结束掉 BackgroundWorker 里面的子进程。
      • 同时由于 WSL instance 之间是独立的,我无法通过再创建一个 WSL 进程来杀死之前的 sshd。
      • 所以最后发现我只能把它做成杀死所有 WSL instance,当然主要是我太菜。
    • 现在的 Logo 很丑,我也没办法,毕竟我不懂设计。
    • 缺少 Error handling。

    但是它至少能用了嘛!

    源码: https://github.com/RedL0tus/WSL_SSH_Launcher

    第 1 条附言  ·  166 天前

    上架到了巨硬商店,贪心设了 0.99 刀的价格。提供无限免费试用,就把这个收费当捐赠吧(小声

    链接: https://www.microsoft.com/store/apps/9NRPB1HPKK8G

    21 回复  |  直到 2019-07-13 14:38:46 +08:00
        1
    EricXuu   170 天前 via Android
    好厉害!但是加个计划任务不就好了。。
    详细可以参考
    我爱命令行 - WSL 服务自动启动的正确方法
    https://zhuanlan.zhihu.com/p/47733615
        2
    goreliu   170 天前 via Android
    可以试试 wsltty,颜色、鼠标、vim 和 tmux 支持都正常,本地使用的话没太大必要用 ssh。另外把 wsl 的路径从防病毒软件扫描路径排除就没有 Antimalware cpu 占用了。
        3
    RedL0tus   170 天前
    @EricXuu 看了下,这还是需要一个手动启动 WSL 的过程吧,我比较懒(小声
        4
    RedL0tus   170 天前
    @goreliu 刚试了一下,颜色还是不对 😂
    这个是 ConHost 的问题的样子,没办法的吧 😂

    等 Windows Terminal 正式发布的时候我这东西应该就可以退休了(小声
        5
    lhx2008   170 天前
    不错,wsl 里面的 ubuntu 好像用 service sshd start 就可以,就是自启动还要写一个脚本

    我要用 Docker, 还是虚拟机 + SSH 省心。WSL 就配合 Clion 编译下程序
        6
    iyaozhen   170 天前
    我是写了个 run_wsl.vbs ,防止启动文件夹下
    set ws=wscript.createobject("wscript.shell")
    ws.run "C:\Windows\System32\bash.exe -c 'sudo /usr/sbin/service ssh restart'",0

    《 Windows 10 生产力提升之 WSL 实践》 https://iyaozhen.com/windows10-wsl-ubuntu.html

    “现在无法只停止 sshd 服务,只能杀死所有同个发行版的 WSL instance ” 不知道有没有记错,好像现在版本 WSL 只启动一个实例,直接 ssh 上去然后 sudo service ssh stop ?
        7
    RedL0tus   170 天前
    @iyaozhen 我是用 Arch WSL 测试的,它没有 RC 脚本所以用不了 service ;程序里启动在前台的 sshd 再启动一个 WSL 进程就看不到了,应该是隔离到了另一个 instance 里,所以我现在是这么做的... 我这里是 1903,具体我也不清楚了。
        8
    Nasei   170 天前 via Android
    @RedL0tus 是说开两个窗口的话,一个窗口中进程,另外一个没办法通过 ps - a 之类的看到吗?
        9
    RedL0tus   170 天前
    @Nasei 至少我测试出来是这样的 😂
    都是独立的 WSL instance,ps 列不出别的 instance 的进程自然也无法操作(
        10
    Himingway   170 天前


    好像能 kill 掉
        11
    mxalbert1996   170 天前 via Android
    wsl-terminal 试过了吗?
        12
    NSAgold   170 天前 via Android
    @RedL0tus #3 楼上#1 那个应该不用手动启动 wsl 了。因为用 vbs 脚本启动了。
    也可以把 vbs 的快捷方式拖进开始菜单的启动文件夹里(藏挺深,和 wsl 的目录差不多深)
    (我之前做法也是写了个 vbs 脚本无窗口启动 不过是调用 bash 启动 wsl 里的其他程序。)
        13
    glouhao   169 天前 via Android
    搭车问下 学习 python 爬虫,放 wsl 里效率咋样,比直接放 win10 如何?
        14
    RedL0tus   169 天前
    @Himingway 诶... 我这里之前测试的时候不行... 现在突然又行了 🤣
        15
    RedL0tus   169 天前
    @NSAgold 嘛... 我写都写出来了(
        16
    lqh0126   169 天前
    楼主试一下 VSCode 里的 Terminal ?
        17
    RedL0tus   168 天前
    @lqh0126 那个在 Linux 下都不是很好用...
        18
    BUYI   167 天前
    Moba xterm 可以直接打开 WSL 终端(当然它也可以打开 cmd.exe powershell 等等) Session 管理也很好
        19
    RedL0tus   166 天前
    @BUYI 免费的限制 tab 数量啊... 专业版有点贵。我已经卖了 Token2Shell 了非常心疼钱 🤣🤣🤣
        20
    RedL0tus   166 天前
    @RedL0tus 已经买了*
        21
    BUYI   129 天前
    @RedL0tus 它的 Home Edition ( free )并没有 tab 数量的限制
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   996 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 30ms · UTC 22:36 · PVG 06:36 · LAX 14:36 · JFK 17:36
    ♥ Do have faith in what you're doing.