来自泠王大神教程。偷过来以后方便自查
-------------------------------
这段时间一直在搞个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时有一些选项,一路下一步就可以了。有个页面是问你四种启动方式:
如果想启动整个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应该是会互相冲突的(我没试过),去系统里添加语言就可以了。
最后贴个图:
隐藏不想要的原始命令行窗口
写完整个文章后,总觉得好像缺了点啥,哈哈哈。原来是我太习惯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,选择喜好的配置后,一路走到最后一步。点击保存配置,保存到任意一个位置即可。
复制一下XLauncher的快捷方式,右键属性,打开设置,在目标后面追加:“ -run xluancher配置保存路径config.xlaunch”。
退出现在的XLauncher,双击一下快捷方式,验证一下是不是和预期一致。
将快捷方式移入:C:ProgramDataMicrosoftWindowsStart MenuProgramsStartUp
打开任务管理器的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位系统交替中挂掉了。这些年一直是缅怀的不行啊。
没想到过了几年微软竟然自己投人,搞了这么个神器。真是峰回路转,哈哈哈。
博主这个主题,非常的卡哇伊哦~~
虚拟机不是挺好的吗,我觉得最舒服的是两台电脑
@清秋的沙海 -V-我也觉得虚拟机挺好……需要的时候带着虚拟机一起搬了。但是庞大的硬盘占用等问题也是头疼的事情
赶快更新博客( ˃̶̤́ ꒳ ˂̶̤̀ )
我记得你不是 blog.moe.xin 吗
不咋用linux,做渗透的时候用PentestBox,集成了一些基础Linux命令,效果还算理想,能让我使用大多数脚本了。不过像你要测试unity webplayer的话就不行了
@慕若曦 QAQ渗透?!?怕怕!!!!
大佬的域名是真的厉害
@熊猫小A 一。。一般般把……