Pages

Tuesday, 19 December 2017

新系统: Win10+Ubuntu

WSL 安装/配置指北

其中最让包括我在内的众多开发者感到兴奋的特性之一,就是 WSL(Windows Subsystem for Linux.
好消息是,在之后的更新中,这些 BUG 都已被逐一消灭
经过了两年的发展,WSL 已经足够成熟.

1. 我理想中的命令行界面

既然取了这么个标题,那我自然得先描述一下我的目标,也就是我理想中的命令行界面应该是什么样子的:
  • 好看(配色、字体可以自由设定);
  • 支持 UTF-8 字符的输入与显示;
  • 支持常见的 *NIX 命令行工具(cat、grep、awk 等);
  • 自动补全、语法高亮、历史记录;
  • 完善的复制粘贴支持;
  • 互操作性(共享文件系统、网络栈,可调用 Win32 程序);
  • 支持常用的脚本语言(PHP、Python、Node.js 等);
  • 包管理器,以及其他各种常用软件的支持;
  • 快速呼出(快捷键、右键菜单入口)。
然而遗憾的是,Windows 上的命令行一直以来都很微妙。

2. 难用的 Windows 命令行

停停停,那边的 PowerShell 爱好者 ,咱别动粗成吗?
首先我要对标题做出一些订正,Windows 原生命令行其实也可以不那么难用。虽然 cmd.exe 是公认的难用到反人类(毕竟是用来兼容 DOS 的老古董),但后来推出的 PowerShell 已经足够强大且现代化,能够称得上是一个成熟的命令行 Shell 了。如果你愿意学习的话,PowerShell 几乎可以满足你对命令行的所有期待。这一点可以参见:Is PowerShell ready to replace my Cygwin shell on Windows?
但是,PowerShell 与 Bash 等类 Unix 系统上的 Shell 程序几乎是两个完全不同的世界。不仅语法不同,其平台上各类常用的命令行工具也基本不一致(比如类 Unix 系统中的 grep 对应 PowerShell 中的 Select-Stringuniq 对应 Select-Object -Unique 等)。往深了说,他们的系统设计理念都是不一样的,比如很多人推崇的 Unix 哲学,在 Windows 上就基本不见踪影;而 COM 等概念也是 Windows 独一份。
对于包括我在内的很多用户都认为 Windows 命令行不怎么好用,仅此而已。
回到正题。
虽然 Windows 的命令行一直遭人诟病,但是人家的图形界面牛逼啊。于是无数工程师前赴后继,试图在 Windows 上创造出不输给类 Unix 系统的命令行体验 —— 却绝大多数以失败告终。曾经努力过的人,或者回到可爱的 Linux 上,或者进入高贵冷艳的 macOS 的世界。其中有先辈留下了 Cygwin、GnuWin32 等工具集,让我们可以在 Windows 下使用类 Unix 系统中常见的命令行工具,成为了不少 Windows 用户的救赎。
然而,就当大家都觉得「也就这样了」的时候,Microsoft 出人意料地站了出来。
带着他新鲜出炉的 WSL。

3. Windows Subsystem for Linux,参上!

大家都把 WSL 吹得这么牛逼,那 WSL 究竟是个什么玩意儿呢?
简单来说,WSL 是一个 兼容层,有点像反过来的 Wine。
首先,我问个问题,为什么 Linux 上的程序无法在 Windows 上运行呢?
了解过一点操作系统原理的同学应该都知道,这是 Windows 与 Linux 的内核提供的接口不同(系统调用、API 等)导致的。举个栗子,我们想知道某目录下的内容,在 Linux 下我们会使用 ls 命令,而在 Windows 下我们会使用 dir 命令。
当我们在 Linux 上执行 ls 命令,ls 会调用 getdents 这个系统调用,Linux 内核收到请求,将目录的内容返回给应用程序;当我们在 Windows 上执行 dir 命令,dir 会调用 NtQueryDirectoryFile这个 API,NT 内核收到请求,将目录的内容返回给应用程序。虽然系统不同,但基本上都是一个道理。
然而,当我们把 Linux 上的应用程序拿到 Windows 上运行时,应用程序和内核就双双懵逼了。比如 ls 会尝试调用 getdents 系统调用(理想化的情况下,暂不考虑可执行文件格式等问题),Windows 的 NT 内核一看,心说:「这他娘的什么东西,老子不认识啊,啥情况啊」,ls 也想:「尼玛,内核怎么不回话啊,咋回事儿啊」……两边语言不通,应用程序自然无法正确执行。
但是有了 WSL,情况就不一样了。
依然拿 ls 举例,当我们在 WSL 中运行 ls 命令时,ls 会调用 getdents 系统调用(这个系统调用接口是 WSL 提供的,Windows 本身并没有这个接口),WSL 收到这个请求,明白了应用程序是想要知道目录的内容,于是把 Linux 的系统调用转换为 NT API NtQueryDirectoryFile。NT 内核收到 WSL 的请求,将目录的内容返回给 WSL,WSL 再把返回的内容包装好后返回给 ls
也就是说,WSL 在 Linux 应用程序与 Windows NT 内核之间起到了翻译者的作用。很简单的道理,既然 NT 内核无法理解 Linux 应用程序的 POSIX 系统调用,那就弄个翻译来将 POSIX 系统调用实时转换为 NT 内核能理解的 API 调用,突出一个见人说人话、见鬼说鬼话。
只要实现了足够多的系统调用翻译,那么理论上 WSL 可以完全模拟成一个 Linux 内核。
相信各位都听说过鼎鼎大名的 Cygwin。同样是能让 Linux 应用程序运行在 Windows 上,WSL 和 Cygwin 有什么不同呢?其实差别还是挺大的。
虽然 Cygwin 提供了完整的 POSIX 系统调用 API(以运行库 Cygwin*.dll 的形式提供),但其依然工作在 User Mode;而 WSL 中的 Linux 应用程序进程会被包裹在一个叫做 Pico Process 的东西里,这个东西里发出的所有系统调用请求都会被直接送往 Kernel Mode 中的 lxcore.sys 与 lxss.sys 处理。
同样是将 POSIX 系统调用转换为 Windows 中的 API,Cygwin 是转换成 Win32 API 的调用(因为它架设在 Win32 子系统上,很多内核操作受限于 Win32 的实现,比如 fork),而 WSL 则是转换为更底层的 NT API 调用(WSL 是与 Win32 平行的子系统,直接架设在 NT 内核上,可以通过 NT API 原生实现 fork 等系统调用)。
WSL 架构示意图。图片来源:Windows for Linux Nerds
最重要的一点:如果使用 Cygwin,Linux 应用程序的源码必须 link 至 Cygwin 运行库(Cygwin*.dll),修改源码重新编译后才能在 Windows 下运行。这些重新编译后的 Linux 应用程序在调用 POSIX API 时不会直接去请求内核,而是会去调用 Cygwin 运行库,由运行库翻译成 Win32 API、执行调用后返回结果。这也就意味着,重新编译后的应用程序需要依赖 Cygwin 运行库才能正常运行(有时候你会碰到的「缺少 Cygwin1.dll」报错就是这个原因),而且这样编译出来的可执行程序是纯正的 Win32 PE 格式封装,只能在 Windows 上运行。
在 WSL 下,我们可以直接运行未经任何修改的 ELF 格式 Linux 可执行程序。
最后总结一波:
WSL 就像是一个翻译官,就算那些未经修改的 Linux 应用程序们操着一口纯正的 POSIX 系统调用语法,WSL 也能快速准确地将其翻译为 NT 内核能听懂的 API 调用;
而那些使用了 Cygwin 重新编译后的 Linux 应用程序,就像是改造人一样变成了 Win32 应用程序的形状,还被套了个翻译机。程序自己(源码中)说的是 POSIX,经过翻译机(Cygwin 运行库)之后就变成 Win32 API 调用了,这样 NT 内核也能听得懂。
但是每次添加新程序都要改造,多麻烦啊,还是 WSL 原生态更健康(笑)。
以上只是我对 WSL 的粗浅解释,其具体实现原理可以参考官方博客上的 这一系列文章

4. 安装 WSL,拥抱可爱的 Linux

好了不说废话,让我们开始安装 WSL。注意,WSL 仅支持 64 位系统,且本文中所描述的安装方法仅适用于 Windows 10 Fall Creators Update(秋季创意者更新,RS3,Version 1709,Build 16299)及以上版本。
第一步,打开「控制面板」中的「程序与功能」,点击左侧边栏的「启用或关闭 Windows 功能」选项,在弹出的窗口中勾选「适用于 Linux 的 Windows 子系统」,然后点击确定(可能需要重启)。
如果你懒得用 GUI,也可以直接在 PowerShell 中以管理员权限执行命令:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux


第二步,打开 Microsoft Store,搜索「WSL」。挑选一个你喜欢的 Linux 发行版,然后点击安装。(截至目前,商店中可用的发行版有 Ubuntu、openSUSE、SUSE Linux Enterprise Server、Debian 以及 Kali Linux。)

第三步,在开始菜单中找到你刚刚安装的发行版,打开它。等待几分钟的初始化过程,设定好用户名与密码后(不需要与 Windows 的相同,用过 Linux 的选手应该都懂的)就会自动进入 Linux 环境。
至此,你已经完成了 WSL 的安装。
你也可以同时安装多个发行版,它们的数据都是独立的,互不影响。

5. 使用更专业的终端模拟器

我猜你现在正在对上面那个窗口发呆。
—— 这个新宋体他娘的是个什么情况?
如果你正在使用中文 Windows 系统,而且之前并没有修改过 Win32 Console 的默认配置,那么你的 WSL 终端默认就会是这样的。新宋体,就是这么 Hardcore。惊不惊喜,意不意外?
好吧不开玩笑,Windows 这个控制台窗口就是很多人讨厌它的原因之一,难用又难看。丑这一点倒还有解决方法.
难用却是实打实的。尽管 Win10 上的控制台已经改进了不少(可以看看 Microsoft 的官方博客:Windows Command Line Tools For Developers),但其依然是最难用的终端模拟器之一,或许没有之一。
因此,为了实现我们的目标,一个更强大的终端模拟器是必须的。
我个人比较推荐的终端模拟器有:
  • 专门为 WSL 开发的终端模拟器,基于 mintty 与 wslbridge,稳定易用。
  • Windows 上的老牌终端模拟器,功能极为强大,要啥有啥。
  • 基于 Electron 的跨平台终端模拟器,好看和可扩展性是卖点,BUG 不少
还有其他各种各样的终端模拟器,选个自己喜欢的就好。反正不管选哪个,都比默认的那玩意儿要好用。
另外,设定终端模拟器的 Shell 入口时有个坑,需要注意一下(参见下文 6.4)。

6. 让我们更深入一些

以下是 WSL 的一些优化技巧。

6.1 使用软件源镜像

由于众所周知的原因,各大发行版默认的软件源在中国大陆的访问速度都很屎。
我目前使用的是 清华大学的 Ubuntu 镜像源

6.2 安装 zsh 与 oh-my-zsh

想要快乐地使用命令行,一个趁手的 Shell 是必不可少的。
我个人习惯使用 zsh,安装步骤不再赘述。

6.3 安装多个发行版

Windows 10 Fall Creators Update 之后,WSL 支持同时安装多个 Linux 发行版,直接在 Microsoft Store 中搜索想要的发行版并点击安装即可。这些发行版可以同时运行,并且数据互相独立。你可以使用 wslconfig.exe 来查询已安装的发行版,或者更改默认的发行版。
删除发行版也很简单,直接卸载对应的商店应用即可(记得备份哦)。

6.4 多种进入 WSL 的方式比较

新版支持同时安装多个发行版,那自然不能像以前那样只提供一个 bash.exe 入口了。
秋季创意者更新之后的 Windows 提供了 多种进入 WSL 环境的方式
  • wsl.exe
    打开默认发行版中的默认 Shell。
  • .exe
    打开指定发行版中的默认 Shell。
  • bash.exe (DEPRECATED)
    打开默认发行版中的 bash Shell。
    如果你更改了默认 Shell 却总是打开 bash,就说明你使用了这个入口。
你也可以通过这些入口直接在 WSL 中执行命令并返回结果:
  • -c [command]
  • bash -c [command]
  • wsl [command](不再需要指定 -c

6.5 与 Windows 的互操作性

WSL 与 Windows 之间的互操作性 (Interoperability) 很牛逼。怎么个牛逼法呢?
Windows 下的所有盘符都挂载在 WSL 中的 /mnt 目录下,可以直接操作。WSL 中的所有数据则存放于 C:\Users\{你的用户名}\AppData\Local\Packages\{Linux发行版包名}\LocalState\rootfs 目录中(不要在 Windows 中修改这些文件,这会造成文件权限错误):
$ ls /mnt
c  d  e
$ mount -l
rootfs on / type lxfs (rw,noatime)
C: on /mnt/c type drvfs (rw,noatime,uid=1000,gid=1000)
D: on /mnt/d type drvfs (rw,noatime,uid=1000,gid=1000)
E: on /mnt/e type drvfs (rw,noatime,uid=1000,gid=1000)
你可以在 Windows 命令行环境中直接调用 WSL 中的命令:
PS C:\temp> wsl ls -al
total 0
drwxrwxrwx 1 printempw printempw 4096 Sep  7 19:04 .
drwxrwxrwx 1 printempw printempw 4096 Sep  7 18:38 ..
-rwxrwxrwx 1 printempw printempw    4 Sep  7 19:04 foo.txt
你也可以在 WSL 中调用 Windows 中的命令行程序:
$ which ipconfig.exe
/mnt/c/Windows/System32/ipconfig.exe
$ ipconfig.exe
Windows IP Configuration
...
你可以在 WSL 中直接启动 Windows 应用:
$ notepad.exe "C:\temp\foo.txt"
你还可以通过 pipes 与 Windows 程序通信:
# 复制内容至 Windows 剪贴板
$ cat foo.txt | clip.exe
你甚至可以把 Windows 命令和 WSL 命令混着用:
PS> ipconfig | wsl grep IPv4
IPv4 Address. . . . . . . . . . . : 192.168.1.114

$ ipconfig.exe | grep IPv4 | cut -d: -f2
192.168.1.114

$ ls -al | findstr.exe foo.txt
-rwxrwxrwx 1 printempw printempw    4 Sep  7 19:04 foo.txt

$ cmd.exe /c dir
 Volume in drive C is Windows
 Volume Serial Number is B263-****

 Directory of C:\temp

2018/09/07  19:04              .
2018/09/07  19:04              ..
2018/09/07  19:04                 4 foo.txt
               1 File(s)              4 bytes
               2 Dir(s)  194,422,341,632 bytes free
同时,WSL 与 Windows 共享网络栈,也就是说你可以:
  • 在 WSL 中启动 web server,在 Windows 上使用浏览器访问;
  • 在 Windows 下启动 MySQL/Redis 服务器,在 WSL 中连接;
  • 诸如此类。
如果你对 WSL 与 Windows 之间互操作的原理有兴趣,可以参考一下这些文章:

6.6 DrvFs 文件权限问题

虽然 WSL 中可以直接访问 Windows 磁盘的内容,但如果你曾经这么做过,你应该对这样绿油油一片的 ls 不会感到陌生。为什么 NTFS 文件系统中的文件到 WSL 下权限就全部成 0777 了呢?
这主要是 DrvFs 中 Linux 文件权限的实现导致的。
在 WSL 中,Microsoft 实现了两种文件系统,用于支持不同的使用场景:
  • VolFs
    着力于在 Windows 文件系统上提供完整的 Linux 文件系统特性,通过各种手段实现了对 Inodes、Directory entries、File objects、File descriptors、Special file types 的支持。比如为了支持 Windows 上没有的 Inodes,VolFs 会把文件权限等信息保存在文件的 NTFS Extended Attributes 中。记得我上面警告过你不要在 Windows 中修改 WSL 里的文件吗?就是因为 Windows 中新建的文件缺少这个扩展参数,VolFs 无法正确获取该文件的 metadata,而且有些 Windows 上的编辑器会在保存时抹掉这些附加参数。
    WSL 中的 / 使用的就是 VolFs 文件系统。
  • DrvFs
    着力于提供与 Windows 文件系统的互操作性。与 VolFs 不同,为了提供最大的互操作性,DrvFs 不会在文件的 NTFS Extended Attributes 中储存附加信息,而是从 Windows 的文件权限(Access Control Lists,就是你右键文件 > 属性 > 安全选项卡中的那些权限配置)推断出该文件对应的的 Linux 文件权限。
    所有 Windows 盘符挂载至 WSL 下的 /mnt 时都是使用的 DrvFs 文件系统。
由于 DrvFs 的文件权限继承机制很微妙,最后导致的结果就是所有文件的权限都变成了 0777。而且由于早期的 DrvFs 不支持 metadata,所以你无法给这些文件 chown/chmod,只能对着绿油油的 ls 干瞪眼。不过好消息是,Windows Insider Build 17063 之后,DrvFs 也像 VolFs 一样支持给文件写入 metadata 了
要启用 DrvFs 的 metadata 支持,你需要添加参数重新挂载磁盘:
# 修改成你自己的盘符
$ sudo umount /mnt/e
$ sudo mount -t drvfs E: /mnt/e -o metadata
不过如果仅仅是执行了这个,虽然支持了文件权限的修改,但磁盘下的文件权限默认依然还是 0777,除非你给它们整个 chmod 一遍。如果你不想这么做,也可以指定其他的 mount 参数:
$ sudo mount -t drvfs E: /mnt/e -o metadata,uid=1000,gid=1000,umask=22,fmask=111
这样磁盘下的文件的默认权限就是 0644ls也不会再是绿油油一片啦。
不过每次使用时都要重新挂载未免也太烦,我们可以通过另一个新特性 Automatically Configuring WSL 实现自动挂载。在 WSL 中创建 /etc/wsl.conf,在其中填写如下内容:
[automount]
enabled = true
root = /mnt/
options = "metadata,umask=22,fmask=111"
mountFsTab = true

# 这个文件里还可以添加其他配置项,有兴趣的可以看看上面的链接
重启终端,所有的盘符就会使用上面的配置自动挂载啦(可以使用 mount -l 查看)。
另外,如果你想要给不同的盘符设定不同的挂载参数(上面的方法对所有盘符都有效,如果你想在 WSL 中运行 Windows 下的应用程序,就得每次都 chmod +x 一下,所以我一般都会把 C: 排除掉),就需要手动修改 /etc/fstab。首先确保 wsl.conf 中的 mountFsTab 为 true,然后编辑 /etc/fstab,添加如下内容:
# 不在此列表中的盘符会使用 wsl.conf 中的参数挂载
# 格式可以自己去查 fstab 的帮助文档
E: /mnt/e drvfs rw,relatime,uid=1000,gid=1000,metadata,umask=22,fmask=111 0 0

6.7 其他关于 WSL 的折腾

虽然 Microsoft 开发 WSL 出来主要是着重于命令行环境的使用,但经过测试,WSL 是可以通过 X Server 执行 GUI 应用程序的,甚至还可以在 WSL 里面用 Wine 执行 Windows 程序.
也有人试过在 WSL 中运行完整的 DE,体验似乎还不错,有兴趣的同学可以去试试。
另外,你也可以通过某些神秘的方法用上 Microsoft Store 未提供的 Linux 发行版,比如 Arch Linux
如果你对 WSL 的底层实现有兴趣,也可以去围观一下 WSL 的官方博客:

7. 总结

虽然 WSL 很不错,但是其比起真正的 Linux 系统还是有很多不足(Docker 等涉及未实现的内核特性的软件无法使用,Raw socket 相关的操作依然容易出错,I/O 性能相比之下较为孱弱等)。如果你日常开发中需要使用到那些 WSL 未提供的 Linux 特性,那么还是乖乖跑 VM 或者装 Linux 吧。
对我来说,WSL 最大的意义就是,让我能够用我熟悉的 Linux 那一套去操作 Windows
如果你和我的需求一样,那么比起 Cygwin、VM 等解决方案,WSL 有着完整的 Linux 环境、强大的互操作性、更低的资源占用。离不开 Windows,却又羡慕 Linux 下强大命令行工具的各位,相信你们会喜欢 WSL 的。
而且最近几年 Microsoft 在笼络开发者方面的努力大家有目共睹,这里就容我夸上一句:
Microsoft,干得漂亮!

------------------

Win10系统初探

Win10是针对触屏进行改进的系统, 和Win7还是有很大区别的(Win8就忽略了吧), 感觉上Win10 2 in 1 本有以下区别:
  • App应用: 和一般exe装程序不同, app应用通过微软Store来安装.例如qq或者网易云音乐就是更贴切平板控制模式, 更适合触屏. 另外, 空间也省点. 换句话, 就是Win10既可以像以往操作系统那样安装程序, 也可以像手机平板那样从商店安装APP.
  • 操作中心: 类似于安卓那种顶部提示中心和一些功能的快捷控制(例如wifi,定位,飞行模式等). 这种设计就是为了Win10用于手机和平板吧. 我电脑可以右划调出操作中心, 也可以按个右下角一个信息提示一样的图标调出.
  • 虚拟桌面和任务视图: 就是Win键+Tab的功能, 不过现在还可以设置多个桌面, 有点像Mac里面的任务-桌面控制视图.
  • 平板模式: 在操作中心里面就有, 选了以后键盘禁用, 开始菜单变得更像手机里面一个一个大图标(Win8那种全屏列表). 另外, 旋转控制的键这时就可以用了, 电脑就像平板一样.
  • Cortana, 类似于Siri吧, 我就用来搜索..
  • 开始菜单: 变得更复杂, 可以定制菜单位置啊, 内容了, 还有平板模式. Win8是横向列出程序, Win10是纵向的, 怪怪的…
  • EDGE浏览器: 感觉还可以, 速度也OK.
  • 新的设置菜单: 也是为了平板设计的吧, 图标大大的, 功能和控制面板类似, 摆放得不习惯, 需要学习周期.
  • 高分屏设计: 分辨率, 自定义DPI, 字体等都有所改进, 为了4K屏吧.
总体感觉, Win10系统和Win7其实差异也不大, 更兼容于手机和平板的系统, 比Win8又更像桌面系统. 如果更偏向于桌面系统, Win7足矣 (反正国人也是用盗版..Win10免费特性也用不上).

Win10 安装子系统 WSL

Win10可以安装自身内嵌的Ubuntu了(WSL, Windows Subsystem for Linux)! 搞法如下:
  • 更新Win10系统到最新(右下角 全部设置, 更新和安全 -> 系统)
  • 设置 -> 更新和安全 -> 针对开发人员 -> 开发人员模式. 然后会下载开发人员模式包 (Developer Mode Package). 下载失败也没关系.
  • 控制面板 -> 程序和功能 -> 启用或关闭Window功能 -> 选上 适用于Linux的Window子系统 , 然后确认就好了
  • 重启, 然后进去后 win+R 来运行cmd, 输入bash来运行. 或者直接在搜索里找ubuntu或者bash (可以创建一个快捷方式)
  • lsb_release -a 可以知道ubuntu的版本
  • 更新完系统发现C盘被占了很多空间, 在C盘发现有Windows.old 文件夹占了很大空间, 这个是为了让你可以恢复之前系统留下的. 解决办法: C盘右键后, 在常规或者工具里找到磁盘清理, 然后点左下角 清理系统文件, 可以找到旧系统的垃圾. 不想要就都清了吧 (传递优化文件删不掉..不知道为啥).
  • 内嵌ubuntu和win的文件系统怎么分呢? window的文件在ubuntu里是在/mnt/c/ 来表达NTFS里的C盘, 而 ubuntu系统文件则是在C:\Users\Yourname\AppData\Local\lxss\rootfs 里面(lxss文件夹系统文件式隐藏), 我这里的ubuntu的 home, root, mnt, temp 不是放在rootfs 而是同等级的, rootfs里的相应文件夹为空(即这些文件夹为单独分区处理). 注意在ubuntu里并不能通过上述路径(rootfs)来访问自身文件系统的. 可以创建相应的C:\Users\Yourname\AppData\Local\lxss文件夹到桌面快捷方式.
  • ubuntu和win里的执行文件并不互通!!切记! 不能像mingw那样直接在命令行里执行exe文件.
  • 如果要移除WSL, 可以在cmd命令行使用lxrun /uninstall, 这样不会移除root和home文件夹, lxrun /uninstall /full, 再安装可以lxrun /install. 上述卸载方式并不会卸载bash, 只是卸载ubuntu系统. 要卸载bash, 请参看第三条, 取消 适用于Linux的Window子系统
WSL 还是有很多问题的, 有很多东西并不能很好安装(例如要创建假网卡的n2n), 先玩玩咯.

Win 10 WSL 的X server问题

WSL 是不支持 X server的. 但是呢, 可以在win10里面安装另外的Xserver来接上WSL的x需求. 推荐使用vcXsrv或者Xming, 也可以使用cygwin-x. 安装完毕, 打开X server相关的就好了.
安装好后, 尝试安装几个东东: gedit(文本编辑器), nautilus (文件管理器), unity (就是打开程序那个面板罗), ubuntu-desktop (就是桌面咯). 后面三个就不太建议安装了, 比较大, 而且要桌面干嘛?! 而且不稳定 会有些问题, 等以后更好的版本发布了再折腾吧
sudo apt-get install gedit
gedit myfile

###### Maybe some errors, record as follow
## error: XDG_RUNTIME_DIR not set in the environment.
export DISPLAY=localhost:0
echo "export DISPLAY=locahost:0" >> ~/.bashrc

## failed to commit changes to dconf: Failed to execute child process "dbus-launch" (No such file or directory)
sudo apt-get install --reinstall dbus dbus-x11

## dconf-WARNING **: failed to commit changes to dconf: Error sending credentials: Error sending message: Invalid argument
## dbus uses unix sockets to communication, which windows bash at the moment doesn't support. So we just need to tell it to use tcp. In /etc/dbus-1/session.conf, you need to replace <listen>unix:tmpdir=/tmp</listen> with <listen>tcp:host=localhost,port=0</listen> and then you are done
sudo sed -i 's$<listen>.*</listen>$<listen>tcp:host=localhost,port=0</listen>$' /etc/dbus-1/session.conf

## If you want to install GUI
sudo apt-get install nautilus unity compizconfig-settings-manager
## Setup ccsm like: https://github.com/microsoft/bashonwindows/issues/637
compiz

附虚拟桌面快捷键:
  • 贴靠窗口:Win +左/右> Win +上/下>窗口可以变为1/4大小放置在屏幕4个角落
  • 切换窗口:Alt + Tab(不是新的,但任务切换界面改进)
  • 任务视图:Win + Tab(松开键盘界面不会消失)
  • 创建新的虚拟桌面:Win + Ctrl + D
  • 关闭当前虚拟桌面:Win + Ctrl + F4
  • 切换虚拟桌面:Win + Ctrl +左/右
  • 最大化/恢复/最小化: ctrl + win + up / ctrl + win + down / ctrl + win + down down

Win10安装双系统

  1. Ubuntu官网下载系统, 这里下载的是个人桌面版. 下载文件是iso文件, 可以写到光盘或者U盘.
  2. 找个U盘4G左右大小, 备份好数据后, 格式化掉.
  3. 下载UltraISO,试用版即可, 使用不介绍了(打开iso,写入硬盘映像,选择U盘写入即可)
  4. 然后准备好一个分区空间用来安置Ubuntu, 打开 磁盘管理, 我从C盘里选择压缩磁盘, 压缩出48G出来. (记住盘符哦!)
  5. 准备好后,重启, 使用自己电脑设置boot顺序的方法选择U盘启动(例如Yoga 900是完全关机后捅侧面的小键). 然后进去就可以开始安装Ubuntu了.
  6. 安装一些常规就不说了, 有两步很重要: 第一是安装类型选择其他选项(Other option), 来自定义分区(比较稳妥), 第二是设置分区表.
  7. 分区表, 选择刚才释放空间出来的分区(空闲空间), 点击下面的+号用来添加分区, 主要是三个:
    • 系统文件, /, 分区类型主分区, 分区位置空间起始位置, Ext4 日志文件系统, 挂载点: /
    • 虚拟内存交换分区, swap, 内存较小(<2G)时建议是物理内存2倍大小,较大的话一倍内存也就够了,再大也是8G据说就够了(例如我8G内存就是8192 MB). 逻辑分区, 空间起始位置, 用于Swap (没有挂载点)
    • 启动分区, /boot, 设置200MB就够了, 逻辑分区, 空间起始位置, Ext4 日志文件系统, 挂载点: /boot
    • 理论上还需要挂载一个/home分区来放用户文件(例如我就是16G给/,16G给/home), 但其实不挂也可以.
  8. 分区表弄好后, 选中/boot分区, 看清楚是/dev/sda?,下面安装启动引导器的设备选择相应的/boot分区的/dev/sda? ( 很重要).
  9. 然后其余就随意设置, 安装完后重启, 然后就会出现系统选择的界面(默认第一个是ubuntu, 不按键就会进入, 第三个是Win10). 如果没有系统选择界面而是进入了Win10, 可能需要更改BIOS里面EFI boot顺序(将Ubuntu的提前到第一)
图文安装参考Volcanoo的Windows10+Ubuntu双系统安装(多图). 里面的快速启动可以关闭掉(以前帮Li qianhuan也不知道什么原因关过),禁用安全启动和后面的我后来就没有搞了, 不成功. 电脑主板和系统限制了.
如能开机有Ubuntu的选择登入界面, 能就成功了, 如果没有, 直接进入ubuntu, 或者想修改ubuntu的开机Grub2. 可以参考:
  1. Ubuntu内编辑 sudo gedit /etc/default/grub, GRUB_HIDDEN_TIMEOUT=0GRUB_HIDDEN_TIMEOUT_QUIET=true两行注释掉(前面加#)
  2. sudo update-grub, 更新grub信息. 实际上,grub的信息在/boot/grub/grub.cfg 文件内, 不太建议直接修改. 然后重启试试
  3. 如果想登入时默认win10而不是ubuntu, 可以修改/etc/default/grubGRUB_DEFAULT=0GRUB_DEFAULT=2 (第三项就是2),再sudo update-grub
  4. 我是高分辨屏,选择时很不清, 可以更改上述文件的#GRUB_GFXMODE=640x480一行去掉注释. 再sudo update-grub
  5. 如果只是想偶尔进去看看这个选择界面(包括什么安全模式),旧版ubuntu按着shift重启, 新版用按着Esc
PS:
  • 在上面的安装教程里有些东东是不需要的了, 例如EasyBCD. 新电脑的话都有UEFI 统一可扩展固件接口, 这玩意限制了对自由系统Linux的安装和双启动. 即使安装了EasyBCD也不能搞掂双系统选择, 有个帖子说要禁用UEFI后还要再重装Win10才可以(至少我根据帖子里的方法, 不用UEFI, 设置了Legacy的, 首选Legacy不是UEFI, 禁用Secure Boot, 停用了快速启动, 但都不能正常使用EasyBCD设置多启动选择, 所以可以不用白费力气安装EasyBCD和进行一大堆的BIOS设置了. 现在的Ubuntu兼容Win10的启动,将首boot设为Ubuntu就可以了, 就是没有这篇博文那样启动时那么fancy)
  • 这篇如何在 Win8 上禁用 UEFI 安全引导以安装Linux讲解禁用UEFI, 但我测试无效. 其实用 高级重启->疑难解答->UEFI设置重启电脑进入BIOS界面和直接进入BIOS界面是一样的. 另外, 高级重启在帖子里是用更新恢复->高级启动->立即重启实现, 更简单方法是, 开始菜单->电源->按着Shift键点重启就可以了.
  • 帮朋友在Win7上面安装, 发现Ubuntu识别不了刚才压缩的空闲卷, 经研究, 因为刚硬盘分区是动态磁盘, 而不是基础磁盘. 解决方法是使用分区助手将其从动态分区转为基础分区. 很奇怪, 还需要把有个盘删掉才可以.因为基础磁盘MBR分区最多四个分区(包含隐藏的一个),所以最多CDE三个盘. 当我转换为基础分区后, 新添加F盘就又变回去动态磁盘…然后空间太多, 想帮中间一个D盘扩展..一扩展就坏了, 尼玛将一大块又叫D盘,实际D盘变成了两块…然后删掉吧..然后D盘就挂了消失了… 大家小心…另外主分区只能有1-4号,逻辑分区从5-16号. 最后尝试使用DiskGenius, 4.8破解修复丢失的分区,修复能找到, 设置为GPT的分区格式就分区表损坏了..慎用..
  • 旧版BIOS没有Boot顺序(也没有UEFI),这时可以用EasyBCD来设置开机引导.具体可以参加上面提到的帖子. 据说UEFI可以用EasyUEFI,但设置看起来比较怪, 我直接改Ubuntu的Grub更容易.
-----------------

-------------------

体验 Windows 10 内置的Linux 子系统


有的工作在 Linux 环境中会比在 Windows 环境中更加方便,但我的主要使用环境还是 Windows,所以不能直接装 Linux 系统。我过去的解决方案是装了一个 Ubuntu 的虚拟机,但是这样还是不太方便,尤其是在文件访问上。现在 Win10 中有了 Linux 子系统,简称 WSL,很好地解决了我的问题。

WSL 简介

适用于 Linux 的 Windows 子系统(英语:Windows Subsystem for Linux,简称 WSL)是一个为在 Windows 10 上能够原生运行 Linux 二进制可执行文件(ELF 格式)的兼容层。它是由微软与 Canonical 公司合作开发,目标是使纯正的 Ubuntu 14.04 “Trusty Tahr” 映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。

安装步骤

本文以 Ubuntu 子系统为例。

开启开发人员模式

启用 WSL 功能

在应用商店进行搜索

可以搜到如下 5 个 Linux 子系统。

安装 Ubuntu

在此,我选择安装我比较熟悉的 Ubuntu,如果对其他感兴趣的也可以安装。
系统显示安装完成后,打开 Ubuntu,将会进行进一步的安装,将需要等待一段时间。
接下来设定你在 Ubuntu 子系统中的用户名,可以任意指定。
接下来设定密码,这将会是你的 root 密码。用过 Linux 的应该知道,密码输入是不会显示的,这是正常现象,输入完密码回车即可。
当看到如下内容时,子系统已经安装完毕,可以使用了。
除了通过点击 Ubuntu 图标进入子系统,你同样可以通过在 cmd 或 PowerShell 中输入 ubuntu 进入,无需管理员权限。

内核版本和发行版本号

在这里我们可以看到内核版本为 4.4.0,发行版本为 Ubuntu 16.04.3 LTS。

后话

WSL 最初在 Win 10 Insider Preview build 14316 开始可用,现在正式版已经升级到 1803 版,内部版本号为 17134,功能已经完善了太多。除了受限于 Windows 文件系统,文件操作较慢,其他已经和原版 Ubuntu,不相上下,完全可以替代虚拟机,完成我的工作了,我感觉非常满意。

from  http://web.archive.org/web/20190414175718/https://www.iszy.cc/2018/05/05/WSL/
---------

Windows10上,免虚拟机使用Linux


虽然Windows图形化的操作系统十分易用,但不可否认的是————Linux中环境下,很多软件具有轻快迅速的特点。平常我们使用Linux一般是借助于虚拟机或者双系统,随着Windows10的数次更新,微软显然也意识到了部分开发者的需求。这次说的就是开启微软自带的Linux功能,目前微软提供的系统覆盖了主流的Linux系统。

##开启Linux子系统
在应用商店内安装之前,首先我们需要更新到最新的Windows10系统。
然后打开控制面板——程序——启用和关闭Windows功能——勾选上“适用于Linux的Windows子系统”
重启电脑以后即可访问应用商店,搜索Linux来安装Linux系统。
子系统中完全与Windows共享系统资源,运行速度相较于VM虚拟机稍快。
由于国内访问自带Linux源访问速度并不快,推荐大家使用中科大的开放Linux源: https://mirrors.ustc.edu.cn/repogen/
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Windows10 内置 Linux 子系统初体验


文章大部分内容转载 anyesu – 简书,区别是此文为当时的测试版,目前为正式版。

简介

  • Win10 在最近的更新版本内正式增加了子系统的功能,于是就去更新体验了下。
    实际上此功能早在 2016 年已经存在,只不过当时是测试版,且支持系统有限。
  • Windows 10 的 Linux Bash 支持「并不是使用虚拟机 / 模拟器」实现的,而是嵌入一个完整的 Ubuntu Linux 环境。
    技术上是实时将 Linux 的系统调用转换为 Windows 的系统调用,你可以把它看做是 Wine 是一种反向技术。
    微软将其称为「Windows 下的 Linux 子系统」 (Windows Subsystem for Linux)。
  • 它可以让 Windows 10 系统完美兼容 Linux 应用程序,支持直接原生运行 Linux Bash 命令行以及数万个 Linux 应用程序!
  • 目前支持的系统有:Ubuntu、Debian、OpenSUSE、SUSE Linux、Kali Linux 等
  • 关于原理

开启方式

  • 开启开发人员模式
1
  • 开启此功能
2
image
  • 在 Windows Store 下载你想用的系统
Kali Linux 下载,点此链接
Debian GNU/Linux 下载,点此链接
Ubuntu Linux 下载,点此链接
SUSE Linux Enterprise Server 12 下载,点此链接
openSUSE Leap 42 下载,点此链接

使用方式

  • 点击启动即可,和正常使用虚拟机没什么大差异。仅仅适合作为一个 bash 玩玩。
image
image

注意

  • 似乎不适合做网络服务器
  • 对 Docker 支持不理想
  • ifconfig 默认没有,自行安装吧 apt-get isntall net-tools

将其移出 C 盘

------------------------

A full-featured utility for managing Windows Subsystem for Linux (WSL)  

LxRunOffline

Build status Chocolatey
A full-featured utility for managing Windows Subsystem for Linux (WSL).

Donation

It would be greatly appreciated if you could make a donation to support development of this project.
Note: It's extremely difficult to withdraw from PayPal balance for a Chinese citizen like me, so if you want to donate 100$ or more, please either use Alipay or contact me via email for other donation options.
PayPal
Alipay
Alipay

Features

  • Install any Linux distro to any directory on your computer.
  • Move an existing installation to another directory.
  • Duplicate(copy) an existing installation.
  • Register an existing installation directory. This enables you to install to a USB stick and use it on different computers.
  • Run arbitrary Linux commands in a specified installation.
  • Configure default user, environment variables and various flags.
  • Export configuration to an XML file and import from the file.
  • Export an installation to a tar file.

Install

You can install via Chocolatey choco install lxrunoffline, Scoop scoop bucket add extras, scoop install lxrunoffline, or download the binaries directly:

Usage

See the Wiki to download tar files for different distros, which are used by the LxRunOffline install command.
Run LxRunOffline for available actions and run LxRunOffline for available arguments/flags.

Build

Visual Studio

Visual Studio 2017 and Windows SDK 10.0.17134 are required.
Install vcpkg and its VS integration (if you haven't) and install dependencies.
vcpkg install --triplet x64-windows libarchive boost-program-options boost-format tinyxml2
Then build with Visual Studio or MSBuild.

MSYS2

Open the "MSYS2 MinGW 64-bit" shell, and install necessary packages.
pacman -Sy --needed --noconfirm base-devel mingw-w64-x86_64-toolchain mingw-w64-x86_64-libarchive mingw-w64-x86_64-boost mingw-w64-x86_64-tinyxml2
Then run make.

Compatibility

  • v1.x: Only Windows 10 Fall Creators Update (v1709) or earlier.
  • v2.x: Only Windows 10 Fall Creators Update (v1709) or later.
  • v3.x: Only Windows 10 April 2018 Update (v1803) or later.
It is strongly recommended to install the April 2018 Update and use v3.x releases.

from https://github.com/DDoSolitary/LxRunOffline
----------------------------

wlinux初体验

在看到 WLinux 的介绍以后立刻就叛教了:

WLinux 是专门为Windows 10 Linux® 子系统调整的 Linux® 发行版,基于 Debian® 构建。
这么棒?马上前往 Windows 应用商店下载。
啥?售价 144 RMB???买了!

开玩笑的啦其实苏卡卡当初入手的时候在做活动只卖 35 RMB 的。。。
在 WLinux 的 README 里介绍推荐搭配 X410 作为 X Server,马上也去下载。
啥?做活动、售价 53 RMB???买了!
安装完 WLinux 就可以启动了。
4.png
刚开始都和其它 WSL 安装过程一样,输入 UNIX Username 的 Password 创建用户完成初始化。
5.png
提示是否执行 wlinux-setup 开始进行环境设置。暂时先不了,先 cat 一下 sources.list
6.png
是 Debian 官方源 deb.debian.org,立刻换成中科大源。
7.png
换源以后跑一遍 sudo apt update 更新包列表,然后就可以开始使用 WLinux 最大的卖点 wlinux-setup 了。立刻执行:






$ wlinux-setup

WLinux Setup

9.png
这里是对 WLinux 的一些介绍了。按下回车继续。
10.png
当然是 Yes 咯,按下回车继续。
11.png
这一步会问你是否下载最新的 wlinux-setup,在这里选择 Yes。
12.png
下载完成以后就会开始选择你要修改或者安装的环境。
13.png
苏卡卡之后还需要安装 thefuck 的,所以把 PyPi 也选中了。如果想把语言修改成中文的可以把 Language 也选上。
然后就是按顺序逐一开始确认和执行环境安装。首先是确认是否在资源管理器的菜单里注册条目「在当前目录打开 WLinux」。
14.png
按下回车继续。
15.png
接下来是选择你需要额外安装什么 shell。苏卡卡当然是要选择 zsh 了,输入 1 回车以后再回车一次即可开始安装选中的 shell。
16.png
接下来询问要不要安装 Oh My Zsh,当然是要安装了。
17.png
这里还有一个提示,就是当 Oh My Zsh 装完以后可以输入 exit 回到 wlinux-setup
18.png
然后就开始执行 Oh My Zsh 的安装脚本:
19.png
Oh My Zsh 的安装脚本中会让你切换默认 shell 到 zsh,安装完成以后 wlinux-setup会再询问你一次你想使用什么 shell:
20.png
安装完 shell 以后就是安装编辑器了。苏卡卡选择安装了 NeoVim 和 VSCode 作为编辑器。
21.png
然后就是确认环节:是否确认安装 NeoVim、是否确认安装 VSCode、否确认安装 Python 3.7 和 pip。一律确认然后看屏幕滚动。
接下来是安装 NodeJS。
26.png
什么?用 n 而不是 nvm???立刻选择 No,然后回车。
NodeJS 完了以后是安装 Go,回车确认安装。
27.png
接下来就是配置 GUI 界面了。wlinux-setup 提示你 GUI 必须要有 X Server 才可以运行。
28.png
WLinux 继续在 wlinux-setup 中安利付费的 X410:
29.png
苏卡卡一开始就掏过腰包入手 X410 了。直接选择 No 跳过。
确认是否要安装一些 GUI 必备的依赖包,回车安装。
30.png
询问是否安装 fctix 作为非拉丁语系语言的输入法,当然是安装了。
31.png
询问想要安装什么输入法,默认已经选中了日本输入法 mozc,苏卡卡再选择一个 rime(不过没有看见 sogoupinyin 啊)
32.png
接下来就是询问要不要保持 fctix 自动启动和是否现在就执行 fctix-autostarts
33.png
34.png
接下来是询问是否要为 Qt 和 GDK 配置高分辨率设定。由于标注着还是实验性的,加上苏卡卡还没有 2K 的屏幕,选中 No 回车确认。
35.png

其它配置

wlinux-setup 就结束了。接下来该安装 苏卡卡的开发环境 啦,包括导入各种 dotfiles、安装 zsh 主题和插件、安装 lazygit 和 thefuck 等等。
37.png
38.png
既然是苏卡卡自己的环境设置,就可以使用 nvm 来安装 NodeJS 啦。
39.png
40.png
重启终端即可使用 zsh 作为 shell 了。苏卡卡把大部分东西需要设置的项目都写成了 zsh function 丢在 .zshrc 里头,这样每次安装完系统就可以快速完成配置。
比如设置 Git 全局邮箱和用户名:
41.png
比如设置终端代理:
42.png

试用

Debian 和 Ubuntu 是最具有影响力的 Linux 发行版,Ubuntu 也是源自 Debian。我知道很多人可以洋洋洒洒说出一大堆 Debian 和 Ubuntu 的不同点,从社区生态到设计理念到软件包的维护,等等等等,但是 WSL 本身就不是 Linux 的完整实现。使用 WSL 只是为了在 Windows 下可以更快、更方便的设置一些开发环境。所以基于这样的前提,苏卡卡在使用中并没有感觉到 Debian 和 Ubuntu 有太大区别。
43.png

另一方面,WLinux 的确物有所值:配置 GUI 和其它冗繁的开发环境安装都可以使用wlinux-setup 直接搞定;对于 WSL 里安装 Docker 的各种坑,WLinux 在 wlinux-setup 里用 Secure Bridge 把 WSL 和 Docker for Windows 绑定起来的方法的确是个 workaround;WLinux 还内置了像 wslu 这样的对于 WSL 的实用的工具.
from http://archive.is/KMi28#selection-375.20-1153.18
-------------------------




Windows Subsystem for Linux (WSL) 安裝教學 & 初體驗

八月二日時微軟釋出了 Windows 10 年度更新版(組建 14393),其中已經添加了流傳已久的 Bash for Windows(其實組建 14316 就有了)。小弟早就迫不及待想嘗試一下了,在這裡寫個教學記錄一下。
首先你要知道:這不是虛擬機器,也不是容器,也不是專門為 Windows 編譯的 Linux binary(像是 cygwin)。[1]
你可以想象它是 Wine 的相反——Ubuntu 的 binaries 在 Windows 上原生實作。Ubuntu 官方提到[2]
A team of sharp developers at Microsoft has been hard at work adapting some Microsoft research technology to basically perform real time translation of Linux syscalls into Windows OS syscalls.

Requirements[3]

Prepare

啓用開發人員模式
首先,請打開 Windows 的設定應用程式,你可以在開始選單的左下角第二個圖示找到它。
其次,請點選更新與安全性,然後點選左方選單的開發人員專用:
接著,點選開發人員模式,然後點選是:

啟用 Windows subsystem for Linux (Beta) 方法一

  1. 請按下 Win + X,然後選擇命令提示字元。接著鍵入 OptionalFeatures 並且按下 Enter。
  2. 將列表拉到最底部,將適用於 Linux 的 Windows 子系統 (搶先版 (Beta)) 的核取方塊打勾,並且點選確定。

3. 待其處理完畢後,請儲存你的資料以及此網頁連結,然後重新開機。

啟用 Windows subsystem for Linux (Beta) 方法二

請按下 Win + X,然後選擇命令提示字元**(系統管理員)**。接著逐行執行以下指令[4]
powershell
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

安裝 Windows subsystem for Linux (Beta)

  1. Windows 要求重新開機時,請重新開機,因為 Windows subsystem for Linux 的某些底層需求只有在 Windows 啟動時才能載入。[5]
  2. 重新開機完成之後,請按下 Win + X,然後打開命令提示字元。
  3. 如果你要使用預設的設定,請執行 lxrun /install /y,這會同意使用者條款、安裝子系統並且設定使用者名稱為 root,密碼為空。然後請跳到下一個部分繼續閱讀**(推薦)**
    如果你要手動設定,請執行 bash,閱讀條款之後輸入 y 以繼續。
  4. 資料處理完成之後,請設定 UNIX 使用者名稱及密碼,要注意這裡的使用者名稱及密碼跟 Windows 的那對完全沒有關係。[6]如果你選擇使用者名稱為 root,密碼就不需要設定。

技巧、注意事項

  1. 如果以後要打開 Ubuntu on Windows,執行 bash
  2. 可以我看到一開始進去的 path 是 /mnt/c/Users/Birkhoff Lee,也就是說 Windows 有把你的使用者目錄(C:/Users/使用者名稱)掛載進去。
    往上層目錄看,原來它是把所有硬碟的檔案系統直接以可讀可寫的權限掛載進去,所以請不要在裡面執行 rm -rf /mnt/C/* 之類的東西,不然會爆炸,以下誠招勇者嘗試
  3. root 使用者的檔案目錄可以在 Windows Explorer 下面找到,path: C:\Users\使用者名稱\AppData\Local\lxss\rootfs
  4. Docker 目前在上面跑不了,該 issue 討論串連結:https://github.com/Microsoft/BashOnWindows/issues/85
  5. 本篇教學安裝到的 Ubuntu 版本是 14.04.4 LTS。
  6. 這目前只是測試版,不是所有東西都能 work。
  7. 解除安裝:執行 lxrun /uninstall /full /y
  8. 請在 https://github.com/Microsoft/BashOnWindows/issues 回報問題
  9. 每個使用者的 Ubuntu on Windows 都是獨一的
  10. 在 Windows 下跑 bash -c "指令" 可以直接執行 bash 指令
  11. FAQ 連結:https://msdn.microsoft.com/zh-tw/commandline/wsl/faq

References





  1. https://msdn.microsoft.com/commandline/wsl/install_guideIt is important that you DO reboot when prompted as some of the infrastructure which Bash on Windows requires can only be loaded during Windows' boot-up sequence. ↩︎

-------------------------------------------------------------------------

(

Windows Subsystem for Linux Installation Guide for Windows 10)


(Installation Instructions for WSL 2)
相关帖子:http://briteming.blogspot.com/2018/11/windows-linux-centos.html
----------------------

wsl-issue-and-reference

------------------------------------------

WSL 使用指南

04 安装桌面环境

安装桌面

  嗯,使用WSL后你一定开始怀念Linux双系统的桌面环境了……

  WSL的初衷是为了在Windows系统中运行Linux工具链,所以WSL没有“原生”搭载桌面环境,但这不影响我们自己安装一个Linux桌面环境。

  以Ubuntu为例,为WSL安装桌面环境需要两大项工作————在Win10中安装X Server、在WSL中安装Ubuntu桌面等组件。

安装X Server

  下载并安装VcXsrv,安装之后桌面会出现两个快捷方式分别为VcXsrvXLaunch

安装Ubuntu桌面

  在Windows系统中安装X Server后,开始在WSL中通过命令行安装Ubuntu桌面组件,步骤如下:

  1. 更新系统

     sudo apt-get update && sudo apt-get upgrade
    
  2. 安装桌面组件,该过程需要一些时间,请坐和放宽~~

     echo "y"|sudo apt-get install ubuntu-desktop unity compizconfig-settings-manager
    
  3. 配置dbus以避免出现错误

     dpkg-reconfigure dbus && service dbus restart
    

配置桌面

  所需组件安装完成之后,接下来开始配置工作,步骤如下:

  1. 打开Windows主系统桌面的XLaunch图标,并按照图示操作。

  

  1. 点击下一步保持默认设置直到最后完成,此时我们会看到一个纯黑色的无标题栏窗口(黑色的原因是没有任何X Client连接)。

  

  1. 切换到UbuntuBash窗口,执行以下命令配置X Server端口。

     export DISPLAY=localhost:0
    
  2. 执行以下命令,然后切换到VcXsrv窗口(即之前打开的纯黑色窗口)

     sudo ccsm
    
  3. 按照下图设置桌面环境并退出,如果提示遇到冲突则选择忽略冲突即可。

  

  

  

  1. 切换到Ubuntu``Bash窗口,执行以下命令并切换回VcXsrv窗口查看效果。

     sudo compiz
    

  

  1. Enjoy!

安装中文支持并配置profile文件

  1. 在桌面环境打开一个终端,执行以下命令安装中文支持(如果当前不是用户root,命令前面要加上sudo

     apt-get -y install language-pack-zh-hans
    
  2. 将以下环境变量添加到/etc/profile文件

     export DISPLAY=localhost:0
    
     export LANG=zh_CN.UTF-8
     export LANGUAGE=zh_CN.UTF-8
     export LC_ALL=zh_CN.UTF-8
    
  3. 重新加载profile

     source /etc/profile
    
  4. 重新生成locale

     locale-gen
    
  • 注意!我们开启桌面后是root账户,有可能会影响WSL稳定性!

  • 如果需要以其他用户启动桌面环境,必须重新配置ccsm及其他组件,当然我们也可以把已经配置好的配置文件复制到其他账户下,方法为——把将已配置桌面环境的用户目录(cd ~)下.cache文件夹复制到其他用户目录下。

  • Ubuntu桌面环境的安装方法参考了Run any Desktop Environment in WSL


下一步

  • 美化桌面环境见自定义桌面环境

  • 桌面环境的进一步探索见通过脚本提高效率

     

    from https://github.com/iWangJiaxiang/WSL-Guideline/blob/master/WSL-Guideline/%E4%B8%AD%E6%96%87/04-%E5%AE%89%E8%A3%85%E6%A1%8C%E9%9D%A2%E7%8E%AF%E5%A2%83.md 

    (https://os.51cto.com/article/698844.html)