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

使用 wsl-terminal 更好地体验 Win 10 中的 WSL( Windows Subsystem for Linux )终端环境

  •  
  •   goreliu · 2017-09-17 17:09:55 +08:00 · 6403 次点击
    这是一个创建于 2631 天前的主题,其中的信息可能已经有所发展或是发生改变。

    WSL 从最初功能不全 bug 遍地都是,到现在除了少数几个比较顽固的 bug 外,基本足以正常使用了。但自带终端模拟器的体验依然非常糟糕,而且在可以预期的未来都不会有太大的长进了。我是从去年 8 月开始开发 wsl-terminal中文页面)的,期间因为想不到可以添加什么功能而搁置了比较长时间。最近心血来潮,添加了很多实用功能,用户体验也会上升很多。

    希望有在使用的朋友可以多反馈下意见建议,如果之前没有尝试过,也可以体验一下,软件是一个 1.6 MB 的压缩包,解压后即可使用,不会往系统中写入任何东西(如果想添加到开始菜单或者右键菜单,可以使用 tools 中的工具)。

    多谢大家支持。

    wsl-terminal

    用于 Windows Subsystem for Linux (WSL) 的终端模拟器,基于 minttywslbridge

    英文页面

    截图

    screenshot

    查看更多截图

    用法

    1. 这里下载最新版本并解压。

    2. 运行 open-wsl.exe 可以在当前打开一个 WSL 终端模拟器(当前目录需要在本地的 NTFS 分区上,原因)。

    3. 运行 tools/1-add-open-wsl-terminal-here-menu.js (帮助) 来添加一个 Open wsl-terminal Here 右键菜单到资源管理器上 (运行 tools/1-remove-open-wsl-terminal-here-menu.js 可以将其删除)。 如果你使用 Total Commander, 可以参考 Use wsl-terminal with Total Commander

    4. run-wsl-file.exe 可以在 wsl-terminal 里运行任何 .sh (以及任何其他的可执行文件,比如 .py/.pl/.php 文件) 脚本文件,你可以在文件打开方式里设置使用它来打开文件。

    5. vim.exe 可以使用 WSL 中的 vim 打开任何文件 (在 wsl-terminal 中),支持在打开方式中配置。如果你使用其他编辑器,可以把 vim.exe 重命名成 emacs.exe/nvim.exe/nano.exe/less.exe/... 等等。

    快捷键

    Alt + Enter: 全屏

    Alt + F2: 新建窗口

    Alt + F3: 搜索文本

    Ctrl + [Shift] + Tab: 切换窗口

    Ctrl + =+/-/0: 缩放

    Ctrl + Click: 打开光标处的文件、目录名或者网址

    命令行参数

    open-wsl

    用法: open-wsl [选项]...
      -a: 激活在运行的 wsl-terminal 窗口。
          如果 use_tmux=1,会 attach 到正在运行的 tmux 会话上。
      -l: 运行一个 login shell (如果 use_tmux=1 则失效)。
      -c "command": 运行 command 中的命令。
      -C dir: 进入到 dir 目录中,dir 是 WSL 中的目录。
      -d distro: 切换发行版。
      -b "options": 传递额外的选项给 wslbridge。
      -h: 显示帮助信息。
    

    cmdtool

    用法: cmdtool [选项]...
      update: 检查更新,如果有更新可以直接升级。
      killall: 杀死所有的 WSL 进程。
      install cbwin: 安装 cbwin。
    

    另外可以参考 mintty 参数wslbridge 参数

    工具

    tools/1-add-open-wsl-terminal-here-menu.js: 添加 Open wsl-terminal Here 右键菜单到资源管理器上。

    tools/1-remove-open-wsl-terminal-here-menu.js: 移除 Open wsl-terminal Here 右键菜单。

    tools/2-add-wsl-terminal-dir-to-path.js: 将 wsl-terminal 目录添加到 Path 环境变量里。

    tools/2-remove-wsl-terminal-dir-from-path.js: 从 Path 环境变量中移除 wsl-terminal 目录。

    tools/3-write-distro-guids-to-config-file.js: 将所有发行版的 guid 写入到配置文件 etc/wsl-terminal.conf 中.

    tools/4-create-start-menu-shortcut.js: 创建一个开始菜单快捷方式,指向 open-wsl -C ~

    tools/4-create-start-menu-shortcut-login-shell.js: 创建一个开始菜单快捷方式, 指向 open-wsl -l

    tools/4-remove-all-start-menu-shortcuts.js: 移除所有 wsl-terminal 的开始菜单快捷方式。

    双击 .js 文件即可运行。如果 .js 文件被某个编辑器关联上了,可以用修改打开方式为 Microsoft (R) Windows Based Script Host,或者在 tools 目录运行一个 cmd.exe,然后用 wscript xxx.js 运行对应文件。

    配置文件

    etc/wsl-terminal.conf 是 wsl-terminal 的配置文件:

    [config]
    title="my title"
    shell=bash
    use_tmux=0
    ;icon=
    ;distro_guid=
    

    etc/themes/ 目录下的是主题文件,使用主题

    etc/minttyrc 是 mintty 的配置文件, mintty 帮助

    升级

    wsl-terminal 里打开 open-wsl.exe,然后运行 ./cmdtool update 可以检查 wsl-terminal 的最新版本然后升级。如果下载速度过慢,可以先使用其他方法从发布页面下载 wsl-terminal-v{version}.7z 文件,然后将其放入到 wsl-terminal 目录,然后运行 ./cmdtool update

    该工具依赖 wget7z 命令(安装方法。Ubuntu: apt install wget p7zip-full, Archlinux: pacman -S wget p7zip)。

    升级过程不会覆盖配置文件,etc/wsl-terminal.confetc/minttyrc 会被放置到 etc/wsl-terminal.conf.pacnewetc/minttyrc.pacnew。升级后 bin 目录会残余一些 .bak 文件,因为这些文件还在运行,不能被删除。下一次升级时,会将之前的 .bak 文件全部删除,你也可以等那些进程退出后手删除那些文件。

    使用 tmux

    1. 在 WSL 里安装 tmux。

    2. etc/wsl-terminal.conf 中设置 use_tmux=1

    3. 添加如下代码到 ~/.bashrc(如果配置的是 shell=bash)或者 ~/.zshrc(如果配置的是 shell=zsh):

    [[ -z "$TMUX" && -n "$USE_TMUX" ]] && {
        [[ -n "$ATTACH_ONLY" ]] && {
            tmux a 2>/dev/null || {
                cd && exec tmux
            }
            exit
        }
    
        tmux new-window -c "$PWD" 2>/dev/null && exec tmux a
        exec tmux
    }
    

    然后 open-wsl 就会使用 tmux 了。

    切换发行版

    使用 open-wsl -d distro (在 cmd.exe 里运行)来切换发行版:

    # 列出所有发行版
    > wslconfig /l
    Legacy (默认)
    Ubuntu
    
    # 使用 Ubuntu (会运行 wslconfig /s Ubuntu 然后打开 wsl-terminal )
    > open-wsl -d Ubuntu
    
    # Ubuntu 已经是默认的发行版了
    > wslconfig /l
    Ubuntu (默认)
    Legacy
    

    如果你不想修改默认的发行版,可以在 etc/wsl-terminal.conf 里设置 distro_guid

    运行 tools/3-write-distro-guids-to-config-file.js帮助),然后会有窗口弹出结果:

    result has been written to ..\etc\wsl-terminal.conf:
    
    ; Legacy
    ;distro_guid={12345678-1234-5678-0123-456789abcdef}
    
    ; Ubuntu
    ;distro_guid={47a89313-4300-4678-96ae-e53c41a79e03}
    
    remove the ; before distro_guid to use the distro.
    

    可以去掉 distro_guid 前边的 ; 来使用对应的发行版。

    如果你想通过命令行将 distro_guid 传递给 open-wsl

    # 将 distro guid 传递给 wslbridge
    > open-wsl -b "--distro-guid {47a89313-4300-4678-96ae-e53c41a79e03}"
    

    链接

    常见问题

    开发计划

    编译

    确保已经在 WSL 里安装了这些 wget/tar/xz/gzip/p7zip (安装方法。Ubuntu: apt install wget tar xz-utils gzip p7zip-full, Archlinux: pacman -S wget tar xz gzip p7zip)。

    运行 build.bat

    许可

    MIT

    14 条回复    2022-09-01 20:29:21 +08:00
    hljjhb
        1
    hljjhb  
       2017-09-17 17:56:43 +08:00 via Android
    赞 回头试下
    secondwtq
        2
    secondwtq  
       2017-09-17 18:04:42 +08:00
    暂时用不到,不过还是顶一个
    longaiwp
        3
    longaiwp  
       2017-09-17 20:11:26 +08:00
    暂时用不到,不过支持一个
    tracyone
        4
    tracyone  
       2017-09-17 20:12:10 +08:00 via iPhone
    gvim 及其内嵌终端
    luxinxin
        5
    luxinxin  
       2017-09-17 20:19:52 +08:00 via iPhone
    之前就用上了,非常好用!右键打开 wsl 特别好使,已经替换掉 git 带的那个 bash 了。
    Rabbit52
        6
    Rabbit52  
       2017-09-17 20:26:44 +08:00
    为啥不用 conemu 呢
    goreliu
        7
    goreliu  
    OP
       2017-09-17 20:37:16 +08:00   ❤️ 1
    @Rabbit52 较早的时候用过一阵,感觉功能很多很杂,但很少有我真正想要的功能,不够简洁,小问题比较多。另外我用的时候对 WSL 的支持不佳(比如不能输入中文,中文的显示也有问题),体积和资源占用也更大一些。
    Trim21
        8
    Trim21  
       2017-09-17 21:33:51 +08:00 via iPhone
    wsl 现在支持操作 Windows 文件系统上面的文件了吗。。。
    luxinxin
        9
    luxinxin  
       2017-09-17 21:36:15 +08:00 via iPhone
    @Trim21 一直都支持吧?都挂载在 /mnt/目录下
    Trim21
        10
    Trim21  
       2017-09-17 23:12:44 +08:00 via iPhone
    @luxinxin emmmm 原来这样 看来我之前使用姿势不对
    yyfearth
        11
    yyfearth  
       2017-09-18 05:26:18 +08:00
    @Trim21 一直都支持的 只不过有同步的问题 说会逐步解决 不知道现在解决的怎么样了
    貌似就是在 Windows 下改动 WSL 会看不到 反之亦然
    goreliu
        12
    goreliu  
    OP
       2017-09-18 07:20:23 +08:00 via Android
    @yyfearth 如果是在 /mnt/* 下,双方对文件的操作都没有问题。如果是其他目录,Windows 下新建的文件,WSL 中看不到,但对已经存在的文件读写都是没问题的(官方不建议写)。
    xxxcjr
        13
    xxxcjr  
       2019-01-31 21:03:30 +08:00
    运行:open-wsl.exe -c "command"后,open-wsl.exe 就马上即出了,有办法解决吗?
    Cu635
        14
    Cu635  
       2022-09-01 20:29:21 +08:00
    lz ,3 年半还多过去了,现在这个跟 wsltty 项目相比有啥差别?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2654 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 11:48 · PVG 19:48 · LAX 03:48 · JFK 06:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.