1. 首页
  2. 未分类

【转自冷王】WIN10下直接运行linux的黑科技

来自泠王大神教程。偷过来以后方便自查

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

这段时间一直在搞个unity webplayer的项目。尝试了各种组合方案,包括Windows+Linux虚拟机,Linux+unity测试版,Windows+Linux双机器。但无论怎么倒腾,都感觉难受。

正好前几天过十一,就顺便倒腾了一下传说中的WSL(Windows Subsystem for Linux),没想要甚是惊艳,就顺便写下来,分享分享,当个笔记。

如果实在无法避免双系统开发的话,那么WSL可能是目前最舒服的方案了。

WSL优点/缺点

要说WSL最大的优点的话,那么就是无缝了。Linux程序直接在Windows上,可以直接访问Windows的磁盘,和Windows共享端口池。要说用户体验,的确是秒杀虚拟机几条街。

要说缺点,如果作为一个开发系统,那么真的可以称得上完美了。如果非要找缺点,那么最大的缺点就是WSL继承了Windows的所有缺点:慢。但是我们毕竟不是只是拿来做开发么?

安装/设置

WSL的安装不多说,微软自己的文档说的很详细,传送门在此。不过鉴于Windows的安装说明实在太过与罗嗦。其实就只有两步:

1:管理员方式打开PowerShell,然后运行

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

命令跑完了会提示要重启,跟着重启搞定了。

2:点击这里下载Ubuntu包,然后双击安装,根据提示设置账户,然后,一切搞定。

这才是极致的用户体验啊,给微软的同学们点10086个赞。。。。

修正默认文件夹创建权限问题

安装完了后,正常就会进入bash。但是这个时候,WSL默认的文件夹权限和原生的Linux不太一样(Linux默认创建文件夹为755权限,但是WSL默认创建文件夹为777)。这个会导致一系列的应用出问题,在进行下一步设置之前,必须要先处理这个问题。

解决这个问题不难,在~/.bashrc中加入:

umask 022

修改完~/.bashrc后,使用. ~/.bashrc启用设置,或者直接关掉再重新打开ubuntu

清理PATH变量,避免干扰Linux程序运行

WSL默认情况下,会自动把Windows的环境变量也转换到Linux的PATH变量中。这是一个很酷的特征,例如你在bash中运行$ notepad.exe,然后记事本就会在Windows中被启用。但是如果你在Windows中装了cygwin、mingw或者nodejs之类的,就会产生各种互相干扰,导致脚本挂的莫名奇妙的。因此清理掉这些变量也是必要的。

这个问题也不难解决,在~/.bashrc中加入:

export PATH=`echo $PATH | sed 's/:/mnt/c/[^:]*//g'`

修改完~/.bashrc后,使用. ~/.bashrc启用设置,或者直接关掉再重新打开ubuntu

启用X11

然后就是跑个图形界面了,处理这个的时候,让我真的感受到了WSL的强大。因为实在是很简单。

本来刚开始是想在WSL上跑KDE的,搞了好久始终有问题,最后还是暂时不自虐了,弄个xfce4吧:

$ sudo apt-get install xfce4 xfce4-terminal

然后安装Windows下的X11 Server,有几个不同的选择,试来试去还是VcXsrv最好用,一是开源免费,二是多顶层窗口的情况下可以正确的显示程序的图标。点击这里下载安装。

安装后启动VcXsrv时有一些选项,一路下一步就可以了。有个页面是问你四种启动方式:

1

如果想启动整个Linux桌面的话,可以选右下角那个,这样的话所有的Linux程序就像是运行在一个虚拟机里一样,可以把整个Linux桌面都启动起来。但是个人更喜欢默认的选项。这样的话,Linux的程序看起来更像是原生的Windows程序。

然后再在~/.bashrc中加入两个环境变量

export DISPLAY=:0
export LIBGL_ALWAYS_INDIRECT=1

修改完~/.bashrc后,使用. ~/.bashrc启用设置。

然后运行xfce4-terminal就可以启动xfce4的控制台了。如果想启动整个桌面玩的话,需要把上面截图中的选项设置为One Window模式,然后运行startxfce4

修正中文显示问题

然后接下来会发现中午没法显示。这个简单,随便装个中文字体就可以。

sudo apt-get install fonts-wqy-*

修正中文输入法问题

接下里一个比较麻烦的问题是输入法。WSL下的程序是无法用Windows的输入法的。但是好消息是,可以装个Linux输入法。

sudo apt-get install fcitx fcitx-googlepinyin

安装完后,把需要的环境变量先丢入~/.bashrc

export XMODIFIERS=@im=fcitx
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx

然后是再一次的应用配置,囧,. ~/.bashrc。接着启动输入法。

$ export $(dbus-launch)     # 启动fcitx前必须先启动一个用户级的dbus
$ fcitx &

这个时候输入法应该还是不能用,因为没有加入中文语言。打开输入法配置

$ fcitx-config-gtk3

并把googlepinyin设置进来。

如果你Win10系统有英文语言的话,按Win+Space切换到英语语言,然后按Ctrl+Space应该就能切出fcitx了。如果Win10只有中文的话,Ctrl+Space应该是会互相冲突的(我没试过),去系统里添加语言就可以了。

最后贴个图:

5

隐藏不想要的原始命令行窗口

写完整个文章后,总觉得好像缺了点啥,哈哈哈。原来是我太习惯RBTray了。都不觉得是个事了。

WSL会默认启动一个bash的窗口,这个窗口”明显的不好用“啊。否则折腾这么久,装个xfce4-terminal干啥呢?对吧。

干掉这个窗口有两个办法,方案1,换用setsid启动xfce4-terminal

setsid xfce4-terminal
^D                     # 按下Ctrl-d,退掉这个不想要的bash,这个时候xfce4-terminal就不会跟着退掉了

另一个方案,就是装一个RBTray,这伙真是个神器啊,只要几十k,所有不想要的窗口统统隐藏掉,最典型的就是vmware,免费版不允许headless,无所谓,直接隐藏掉。哈哈哈。

自动X11,输入法,系统服务

搞到这里,基本上的东西都可以使用了,只不过还是稍微有点繁琐,每次都需要先启动X11,再启动输入法,再启动一系列的服务。有的同学可能有洁癖,下面的可以直接忽略。

自动启动X11

启动XLauncher,选择喜好的配置后,一路走到最后一步。点击保存配置,保存到任意一个位置即可。

2

复制一下XLauncher的快捷方式,右键属性,打开设置,在目标后面追加:“ -run xluancher配置保存路径config.xlaunch”。

3

退出现在的XLauncher,双击一下快捷方式,验证一下是不是和预期一致。

将快捷方式移入:C:ProgramDataMicrosoftWindowsStart MenuProgramsStartUp

4

打开任务管理器的startup面板可以再确认一下,That’s All。

自动启动输入法

自启动输入法稍微有点蛋疼,因为WSL不遵循标准的系统启动流程。网上有很多关于这方面的讨论,很多人建议用vb script解决这个问题。vbs这明显不是我的菜啊。而且即使是vbs方案,本身也算不上多漂亮。

本着实用主义至上原则,咱还是直接瞎搞吧:

打开~/.bashrc并加入:

if ! pgrep fcitx > /dev/null; then   # 如果没有找到fcitx的话,就启动个新的
    export $(dbus-launch)
    fcitx &
fi

自启动服务

然后作为开发,就是要启动各种稀奇古怪的东西了,例如mysql啥的。我个人觉得这个手工启动一下还是能接受的。毕竟也不是每次打开wsl都是想干后端的,对吧。但是如果这个都懒得动手的话,继续改造咱的bashrc即可。(反正都这么脏了,哈哈哈)

和输入法问题相比,有点区别的地方在于,启动服务需要su权限,这个也好说,直接google一下sudo nopassword自然一大把的解。

没了

搞完这几个步骤之后,基本上WSL就能像一个正常的Linux一样使用了。剩下的么,喜欢vim的装vim,喜欢emacs的装emacs。纯bash党装上tmuxinator。

WSL特性

IP地址共享

这个应该是WSL最让我吃惊的地方了,在WSL里的程序可以和Windows共享IP。因此如果在WSL下安装并启动了nginx的话,完全可以在Windows的浏览器里访问127.0.0.1。相当的爽。

磁盘访问

在Linux下访问Windows的磁盘非常的容易,全部挂载在/mnt下,例如/mnt/c就是c盘,/mnt/d就是d盘。

但是在Linux下访问Windows的磁盘有个问题,就是文件权限不太对,复制到Linux下全有可执行权限,这倒是一个相当烦的问题。

在Windows下访问Linux的磁盘也非常的容易,全部在C:Users<UserName>AppDataLocalPackagesCanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgscLocalStaterootfs下(取决于装的系统,这里是Ubuntu)。但是WSL官方强烈建议不要直接访问这个目录,因此还是别自找麻烦了。

磁盘权限

在WSL中,除了/mnt挂载的Windows磁盘,全部拥有Linux标准的权限,因此和Linux的兼容性很好。但是selinux之类的也是不要想太多了。

/mnt目录下挂载的Windows磁盘全部是Windows的权限。例如创建的文件的权限全是777。这个地方需要特别的小心,例如:不要混用Windows和Linux的git仓库,因为git在入库时会追溯文件的可执行权限。

colinux

用起WSL感觉真是棒的不行,但又不得不提起一个曾经叫colinux的项目。但只可惜colinux最终在32/64位系统交替中挂掉了。这些年一直是缅怀的不行啊。

没想到过了几年微软竟然自己投人,搞了这么个神器。真是峰回路转,哈哈哈。

 

转载自:https://mechanical-consciousness.com/2018/10/19/wsl-quick-setup-zh.html

评分 5.00, 满分 5 星
1
0
看完收藏一下,下次也能找得到
  • 版权声明:本文基于《知识共享署名-相同方式共享 3.0 中国大陆许可协议》发布,转载请遵循本协议
  • 文章链接:https://moe.xin/1254.html [复制] (转载时请注明本文出处及文章链接)
上一篇:
:下一篇

9 条评论

gravatar

  1. 博主这个主题,非常的卡哇伊哦~~

    #1楼
  2. 虚拟机不是挺好的吗,我觉得最舒服的是两台电脑

    #2楼
    1. @清秋的沙海 -V-我也觉得虚拟机挺好……需要的时候带着虚拟机一起搬了。但是庞大的硬盘占用等问题也是头疼的事情

  3. 赶快更新博客( ˃̶̤́ ꒳ ˂̶̤̀ )

    #3楼
  4. 我记得你不是 blog.moe.xin 吗

    #4楼
  5. 不咋用linux,做渗透的时候用PentestBox,集成了一些基础Linux命令,效果还算理想,能让我使用大多数脚本了。不过像你要测试unity webplayer的话就不行了

    #5楼
    1. @慕若曦 QAQ渗透?!?怕怕!!!!

  6. 大佬的域名是真的厉害 :lol:

    #6楼
    1. @熊猫小A 一。。一般般把……