更好地使用 Windows Subsystem for Linux (或者叫 Bash on Ubuntu on Windows)终端环境 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
goreliu
V2EX    Windows

更好地使用 Windows Subsystem for Linux (或者叫 Bash on Ubuntu on Windows)终端环境

  •  
  •   goreliu 2016-08-20 14:31:53 +08:00 18219 次点击
    这是一个创建于 3344 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Windows 10 中包含了一个 WSL ( Windows Subsystem for Linux )子系统,我们可以在其中运行未经修改过的原生 Linux ELF 可执行文件。利用它我们可以做很多事情,对开发人员和普通用户都是如此。当然对开发人员的吸引力更大一些,因为这意味着在一些情况,不再需要使用 Linux 虚拟机、双系统、 Cygwin/MSYS2 了。

    当前版本( 14901.1000 ) Windows 10 中的 WSL 功能已经比较完善了,和刚出来时不可同日而语,也不再是一个没有实用价值的玩具了(最初的版本连 zsh 和 tmux 等最基本的工具都无法运行,基本没有可用性。但如果现在依然说 WSL 不可用,就有失偏颇了)。但对不想折腾的普通用户来说,用户体验并不好。比如中文显示有问题,不支持中文输入,只支持 16 种颜色,不能隐藏滚动条,不兼容某些命令的输出,不能定制主题和一些其他按键相关配置等。

    用过 Cygwin/MSYS2 的朋友都清楚有个名叫 mintty 的终端模拟器,体积小巧配置简单,功能也够用,如果能直接用 mintty 作为 WSL 的终端模拟器,用户体验就好很多了。wsl-terminal 让这成为可能。

    wsl-terminal 支持如下功能:

    1. 优秀的兼容性(中文显示/输入、 24 位颜色、命令输出等都正常了)。
    2. 体积小巧,压缩包仅 1.7 M 多,解压后不到 10 M 。
    3. 配置简单, mintty 可以直接在标题栏右键配置, wsl-terminal 的配置文件也很简单。
    4. 可以直接在资源管理器右键打开终端模拟器并定位到当前目录。
    5. 可以将 .sh/.py/.pl 脚本关联到用 wsl-terminal 运行。
    6. 可以将文本文件关联到用 wsl-terminal 里的 vim 运行。
    7. 支持 tmux ,可以在 tmux 里打开新目录,恢复已有的 tmux 会话等。
    8. 支持在 WSL 里直接运行 Windows 程序。

    使用方法:

    1. https://github.com/goreliu/wsl-terminal/releases 下载 7z 格式的发布包。
    2. 解压后,直接运行 open-wsl.exe 即可在当前目录打开(可以关联到快捷键)。
    3. 可以运行 tools/add-open-wsl-here-menu.js 在资源管理器右键菜单里添加一个 Open WSL Here 菜单(tools/remove-open-wsl-here-menu.js 删除菜单)。
    4. 可以修改 .sh/.py/.pl/.php 等各种脚本的打开方式为 run-wsl-file.exe ,双击就可以打开。如果需要看结果的话,记得脚本最后加个 sleep 或者 read 。
    5. 可以修改文本文件的打开方式为 vim.exe ,双击就可以用 WSL 里的 vim 打开编辑。
    6. 如果想做 WSL 里边运行 Windows 的软件,运行 outbash-daemon.js ,然后把 bin 里的 wrun 、wstart 、wcmd 复制到 /usr/local/bin (可以直接运行 install_cbwin.sh ),然后 wstart notepad 就可以打开记事本了。cbwin 使用文档: https://github.com/xilun/cbwin
    7. 如果需要使用 tmux,在编辑文件里启用 use_tmux 即可。
    56 条回复    2017-09-20 08:19:41 +08:00
    kindjeff
        1
    kindjeff  
       2016-08-20 15:16:02 +08:00
    前面是不是在知乎摘抄的,好像见过。
    我在用 cmder 。然而还是有一点不爽的就是没法直接在 ubuntu on windows 上用 IDE 因为装不上桌面环境。发现 gevent 在 windows 上貌似运行的不怎么好,为了在 linux 上用 IDE ,于是最后还是装了个 ubuntu 。
    hjc4869
        2
    hjc4869  
       2016-08-20 15:19:23 +08:00
    @kindjeff 如果只是运行 IDE 可以尝试使用 VcXsrv/Xming/Cygwin-X ,在 Ubuntu 环境里把$DISPLAY 设置为 127.0.0.1:0
    eamars
        3
    eamars  
       2016-08-20 15:34:31 +08:00
    oh-my-zsh 好像可以正常工作了哦

    kindjeff
        4
    kindjeff  
       2016-08-20 15:40:12 +08:00
    @hjc4869 是压根不支持桌面环境吧,反正用 VNC 试了一下午都没成功,尝试了各种桌面。
    goreliu
        5
    goreliu  
    OP
       2016-08-20 15:44:52 +08:00
    @kindjeff 知乎那个也是我写的,省事就没改,这个 wsl-terminal 也是……
    goreliu
        6
    goreliu  
    OP
       2016-08-20 15:49:55 +08:00
    @kindjeff VcXsrv/Xming 我试过, Xming 不推荐,启动速度比较慢。 VcXsrv 还好,有的软件能运行成功(比如 xterm 、 st 、 gedit ),有的有问题(比如基于 vte3 的各种终端)。基本上如果用 IDE 的话还是 Windows 本地的比较好,不然性能还是有问题,不知道后续各 IDE 会不会考虑支持 WSL 。
    goreliu
        7
    goreliu  
    OP
       2016-08-20 15:53:27 +08:00
    @eamars 嗯,大概第二个内部预览版 zsh 就正常了,之前我一直在等中文支持,等了几个月等不及了才找各种办法。
    ifoolish
        8
    ifoolish  
       2016-08-20 18:47:17 +08:00 via iPhone
    在用 cmder ,也挺好用的主要是支持多标签,但是 cmder 里 VIM 的配色很难看,回头试试楼主说的这个
    hronro
        9
    hronro  
       2016-08-20 19:32:54 +08:00
    我现在用 cmder 也用的蛮好的
    Tink
        10
    Tink  
    PRO
       2016-08-20 19:39:15 +08:00
    这个东西到底是哪个版本能更新上来,我现在 14393.51 没这个东西
    xy19009188
        12
    xy19009188  
       2016-08-20 20:14:06 +08:00 via Android
    mark
    goreliu
        13
    goreliu  
    OP
       2016-08-20 20:35:00 +08:00
    @hronro 这个在 shell 退格删除中文有问题,在 vim 中文宽度不对,只支持 16 种颜色。另外启动速度、资源占用都不如 wsl-terminal 。
    goreliu
        14
    goreliu  
    OP
       2016-08-20 20:38:39 +08:00
    @hronro 其实只用 WSL 的话, ConEmu 反而比基于它开发的 cmder 好些, ConEmu 内置了 bash.exe 的菜单,启动速度也要快一些。
    zaishanfeng
        15
    zaishanfeng  
       2016-08-20 20:41:56 +08:00 via Android
    这个东西可以作为开发环境吗
    goreliu
        16
    goreliu  
    OP
       2016-08-20 20:50:20 +08:00
    @zaishanfeng 要看开发什么,如果使用的工具没遇到 bug 大概是可以的。我遇到的问题列表,里边都是不能正常跑的程序,可以参考一下:

    1. script
    2. fakeroot
    3. socat UNIX-LISTEN:aa -
    4. ltrace
    5. valgrind
    6. chroot
    7. dig: 能运行和显示结果,但有错误提示 setsockopt(20, IP_RECVTOS) failed: Invalid argument
    8. screen
    9. nginx
    10. ping
    11. tracepath
    12. /proc/sys/fs/binfmt_misc
    13. 依赖 inotify 的工具
    14. fish
    xupefei
        17
    xupefei  
       2016-08-21 05:15:26 +08:00
    @goreliu dig, tracepath 和 ping 的问题都可以通过管理员运行 bash.exe 解决。目前这在官方还是个已知 bug 。
    goreliu
        18
    goreliu  
    OP
       2016-08-21 08:42:19 +08:00
    @xupefei 但用管理员运行还是比较麻烦和危险的。
    tan90ds
        19
    tan90ds  
       2016-08-22 06:48:33 +08:00
    给楼主提个意见: GitHub 主页上的截图配色实在是太难看了
    tan90ds
        20
    tan90ds  
       2016-08-22 06:51:09 +08:00
    没打完就发出去了… 楼主可以换一个 colorscheme 重新截图,比如我用的这个 gruvbox 。

    ForegroundColour=235,219,178
    BackgroundColour=29,32,33
    CursorColour=235,219,178
    Black=40,40,40
    BoldBlack=146,131,116
    Red=204,36,29
    BoldRed=251,73,62
    Green=152,151,26
    BoldGreen=184,187,38
    Yellow=215,153,33
    BoldYellow=250,189,47
    Blue=69,133,136
    BoldBlue=131,165,152
    Magenta=177,98,134
    BoldMagenta=211,134,155
    Cyan=104,157,106
    BoldCyan=142,192,124
    White=168,153,132
    BoldWhite=235,219,178

    这个终端很好用!立刻从小毛病不断的 ConEmu 换过来了。
    goreliu
        21
    goreliu  
    OP
       2016-08-22 07:13:16 +08:00
    @tan90ds 审美这个好像因人而异,现在预置了 40 多个主题,你看 https://github.com/goreliu/wsl-terminal/wiki/Screenshots 里边有没有比较好看的。
    tan90ds
        22
    tan90ds  
       2016-08-22 07:56:17 +08:00
    @goreliu 但是你看 cmder 和 ConEmu 的主页的截图,人家都不会用类似 #FF0000 这样的颜色… 在大家都习惯了类似 solarized 这样的配色的年代,还是要注意一下宣传效果的哈 ;)
    goreliu
        23
    goreliu  
    OP
       2016-08-22 08:07:58 +08:00
    @tan90ds 如果作为编辑器的话, solarized 这样的配色不错,但作为终端模拟器的话,得照顾其他命令的输出。默认的 16 种颜色都是有名称的, black 就是黑色, green 就是绿色,改成这样的话,颜色全部不对了。如果只在 vim 里用可以只改 vim 的主题。而且 Linux 用户对终端颜色的审美真的和 Windows 用户不一样。
    ifoolish
        24
    ifoolish  
       2016-08-22 14:50:02 +08:00
    楼主,这个如何设置将 zsh 作为默认 shell ?
    goreliu
        25
    goreliu  
    OP
       2016-08-22 15:39:40 +08:00
    @ifoolish 编辑 etc/wsl-terminal.conf ,把 shell 改成 zsh 。
    ifoolish
        26
    ifoolish  
       2016-08-22 17:54:16 +08:00
    @goreliu 发现 zsh 的箭头→显示不正常
    goreliu
        27
    goreliu  
    OP
       2016-08-22 18:10:40 +08:00
    @ifoolish 这个是怎么配置的,用的是哪个符号,哪个字体。
    goreliu
        28
    goreliu  
    OP
       2016-08-22 18:14:46 +08:00
    @ifoolish 换个字体呢,我试 Consolas 和 DejaVu Sans Mono 都是正常的,我自己用的 Inziu Iosevka Sc 也正常。
    ifoolish
        29
    ifoolish  
       2016-08-22 21:57:00 +08:00 via iPhone
    @goreliu 应该不是字体问题,换其他字体还是如此
    ifoolish
        30
    ifoolish  
       2016-08-22 21:58:46 +08:00 via iPhone
    @goreliu 对了,我是 zsh 加上 Oh-my-zsh 的配置
    goreliu
        31
    goreliu  
    OP
       2016-08-22 22:21:42 +08:00
    @ifoolish 这个符号确实显示不全,→是正常的。
    goreliu
        32
    goreliu  
    OP
       2016-08-22 22:29:57 +08:00
    @goreliu 还有一些其他的符号也显示不正常,感觉是字体或者编码相关的问题,这种符号在等宽字体下,宽度既不是一个字母的宽度,也不是两个字母的宽度,即使终端模拟器特别处理下能显示全,也是对不齐的,会有其他问题。
    goreliu
        33
    goreliu  
    OP
       2016-08-22 22:36:57 +08:00
    @ifoolish 还是字体的问题,如果字体里的这个符号不是一个字符宽度的,会被截断成一个字符。 DejaVu Sans Mono 字体能显示正常。如果在这种情况强行显示,会导致等宽字体也对不齐,所以截断了。
    ifoolish
        34
    ifoolish  
       2016-08-22 22:43:00 +08:00 via iPhone
    @goreliu 但是在 msys2 和 babun 带的 mintty 中都能正常显示的呢
    goreliu
        35
    goreliu  
    OP
       2016-08-22 23:04:11 +08:00
    @ifoolish 我这里试和 msys2 自带的 mintty 行为是一样的。看下是不是字体设置的不一样。
    ifoolish
        36
    ifoolish  
       2016-08-22 23:29:03 +08:00
    @goreliu 可能我没说清楚,其实我是指在 msys2 里那个箭头显示没问题,不是指用 msys2 自带的那个 mintty 配上 WSL 没问题
    goreliu
        37
    goreliu  
    OP
       2016-08-22 23:47:40 +08:00 via Android
    @ifoolish 我指的也是在 msys2 的环境里,新安装的以及安装后把 msys2 升级到最新版都是一样的。要不你发下你字体我试下。
    ifoolish
        38
    ifoolish  
       2016-08-23 10:05:49 +08:00
    @goreliu 用的就是默认的 Consolas 字体,我在两台电脑装了 msys2 和 wsl-terminal ,都是 msys2 显示没问题 wsl-terminal 就不行
    goreliu
        39
    goreliu  
    OP
       2016-08-23 10:31:30 +08:00
    @ifoolish 我这里是一样的,上边的是 msys2 的,新下载的,只把 mintty 更新到最新的 2.4.0 ,然后字体改成 Consolas 14 。下边的是 wsl-terminal ,字体也是 Consolas 14 。

    ![]( )
    ifoolish
        40
    ifoolish  
       2016-08-23 14:37:46 +08:00
    @goreliu 看来是 mintty 新版本的问题,原来我的 msys2 的 mintty 是 2.3.x 版本, babun 的也是,显示箭头是没问题的,你这么一说我就用 pacman 更新 mintty 到了 2.4.0 ,果然显示不全了
    goreliu
        41
    goreliu  
    OP
       2016-08-23 15:05:22 +08:00
    @ifoolish 我试过老版本,显示效果是不一样,但也存在问题。主要原因还是字体里这个符号宽度不对,显示全了就会错位,或者整体向后移动,都挺别扭的。不如改下字体里的这个符号(也可能是字体里没有, fallback 到其他字体导致的),或者换个符号。
    hronro
        42
    hronro  
       2016-08-25 23:23:00 +08:00
    试用了一下,貌似我这边显示中文还是有问题

    goreliu
        43
    goreliu  
    OP
       2016-08-26 08:00:04 +08:00
    @hronro 你用的是什么字体,默认字体也一样吗?
    hronro
        44
    hronro  
       2016-08-27 15:51:27 +08:00
    字体是 Courier New ,你所谓的默认字体是指?
    反正我用 Consolas 也是一样的效果
    goreliu
        45
    goreliu  
    OP
       2016-08-27 16:27:30 +08:00
    @hronro 在我这里两个字体都正常,没遇到你说的情况。
    hronro
        46
    hronro  
       2016-08-27 22:11:16 +08:00
    @goreliu 我用的是英文版的操作体统,估计是英文版的 WIN10 ,中文字体的 fallback 不一样
    goreliu
        47
    goreliu  
    OP
       2016-08-27 22:23:20 +08:00
    @hronro 那有可能,可以换个中文字体试试。
    crytis
        48
    crytis  
       2016-12-02 15:16:53 +08:00
    楼主还在一直更新呐 好顶赞。
    ps windows 下的各种终端是不是都没法达到 on my zsh 主题截图的效果,比如 ys ,只有 mac 下可以?
    blueboyggh
        49
    blueboyggh  
       2017-04-11 09:58:20 +08:00
    这个能不能默认打开的时候直接定位到 WSL 的用户文件夹下?就是直接 bash ~
    Shawnone
        50
    Shawnone  
       2017-07-03 17:32:58 +08:00
    @goreliu 运行 open-wsl.exe 后窗口一闪而过就退出了是什么情况?
    mortence
        51
    mortence  
       2017-07-17 14:16:44 +08:00
    @goreliu 我运行了也是 @Shawnone 一样的情况,应该怎么解决呢
    iamfredng
        52
    iamfredng  
       2017-08-02 05:12:36 +08:00
    @mortence @Shawnone 这个是因为 wslbridge.exe 和 wslbridge-backend 两个文件的版本是旧的 0.2.2,可以去 https://github.com/rprichard/wslbridge/releases/tag/0.2.3 这里下载 0.2.3 来代替 bin 目录下的同名文件。我用的 cygwin64 版本的压缩包
    mortence
        53
    mortence  
       2017-08-03 19:19:56 +08:00
    @iamfredng 我把 ubuntu 从 14 升到 16,已经可以正常使用了
    goreliu
        54
    goreliu  
    OP
       2017-09-18 10:50:14 +08:00
    最近几天更新了很多功能:
    t/391405
    runapp
        55
    runapp  
       2017-09-19 22:48:19 +08:00
    能够操作 raw_socket 本身就是很危险的行为,linux 下 traceroute 是需要 root 权限的。ping 倒是不需要……
    goreliu
        56
    goreliu  
    OP
       2017-09-20 08:19:41 +08:00
    @runapp WSL 是不支持 traceroute 的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5557 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 01:24 PVG 09:24 LAX 18:24 JFK 21:24
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86