|
|
|
|
挪动端

Ubuntu on 通博8888 10跨平台开辟情况搭建威望指南

本文明天会细致解说下怎样在 通博888810 下装置 Ubuntu、搭建 通博8888官网 开辟情况,遇到的一些坑及其处理方案。

作者:xrzs泉源:xrzs 的博客|2018-03-02 16:30

【新品产上线啦】51CTO播客,随时随地,碎片化学习

Ubuntu on 通博8888 10 跨平台开辟情况搭建威望指南

顺序猿常常争论的一个话题是:一样平常开辟究竟 通博8888 好照旧 通博8888官网 好?进而演化出另一个题目:究竟选 MacBook 好照旧 SurfaceBook 好?

选择 通博8888官网 零碎或许 mac 条记本的同窗最中心的来由是 通博8888官网/Mac 开辟、编译东西链比拟美满,许多情况或许装置包都零碎自带了,写出来的顺序可以很方便的经过开辟、测试与线上零碎对接,开辟测试服从比拟高,而 通博8888 下开辟的同窗能够需求思索开辟、测试代码的可移植性题目。就拿笔者来说,也已经遇到过某些 java/python API 不支持 通博8888 的题目,这给一样平常开辟带来了不小的费事。

在 通博888810 曩昔,我们为理解决 通博8888 开辟情况跨平台的题目,每每会选择 cygwin,这个项目自身曾经很成熟了,笔者也用了许多年,它能在 通博8888 下模仿一套类 通博8888官网 的情况,用它应付普通的开辟测试题目不大。但它的缺陷在于组件、保证理器比拟弱,关于日后的情况维护相称费事,并且一些底层 API 模仿的并不美满,关于一些触及 通博8888官网 底层的零碎挪用等场景显得很鸡肋。侥幸的是在 2016 年,微软在 通博888810 WSL 里开端内置 Ubuntu,之后又开端在 Microsoft Store 以 UWP APP 的方式公布各个 通博8888官网 零碎。如许关于需求搭建跨平台开辟情况的同窗来说可以做到一套零碎搞定多套平台情况,又多了一个舍弃 Mac 的来由 :)

本文明天会细致解说下怎样在 通博888810 下装置 Ubuntu、搭建 通博8888官网 开辟情况,遇到的一些坑及其处理方案。

1、装置 Ubuntu on 通博888810

起首更新你的 通博888810 零碎到最新,然后开启“开辟职员形式”,最初在 Microsoft Store 里输出 “Ubuntu” 然后选择装置,乐成后即可点击启动。

留意:网上有些老的教程在下令行下用 lxrun /install 的方式装置,这里不引荐,由于这是晚期 WSL beta 版本的做法,如今正式版间接在 Microsoft Store 以 UWP APP 的方式获取更便捷,也易于办理。

终极的零碎装置在如下目次:

%LOCALAPPDATA%PackagesCanonicalGroupLimited.Ubuntuon通博8888_79rhkp1fndgsc

初始装置时,整个目次大约 600MB 左右,我更新了一些软件包并晋级到 16.04 后,巨细在 1G。

2、开启 sshd

2.1 设置 sshd

  • 重装openssh
  1. sudo apt-get remove openssh-server  
  2. sudo apt-get install openssh-server 
  • 修正 sshd 设置,添加以下设置装备摆设到/etc/ssh/sshd_config
  1. AllowUsers yourusername  
  2. PasswordAuthentication=yes 
  • 重启 sshd
  1. sudo service ssh --full-restart 

  不出不测运用 ssh 客户端应该可以链接上 Bash on windows 了。

2.2 题目1:sshd启动报错

  1. # /etc/init.d/ssh restart  
  2. sshd: sysdeps/posix/getaddrinfo.c:2603: getaddrinfo: Assertion `IN6_IS_ADDR_V4MAPPED (sin6->sin6_addr.s6_addr32)' failed. Aborted (core dumped) 

缘由是 ipv6 的题目,修正sshd_config设置装备摆设添加 ListenAddress 0.0.0.0 即可

  1. sudo vi /etc/ssh/sshd_config 

2.3 题目2:ssh 衔接不断提示暗码错误

这个题目查起来照旧比拟庞大的,需求有比拟零碎的排查办法和实际,笔者这里折腾了不少工夫。

景象便是 sshd 效劳起来了,ps aux 和 top 都能见到,但是 ssh 衔接的时分不断提示暗码错误或许没有权限,但暗码确认是对的,包罗新建账户也不可,依照上篇《记一次诡异的 ssh 互信免暗码登录失败》的排查思绪发明 sshd 效劳压根就没有监听指定的 sshd 端口,换做别的端口也有异样的题目:

  1. nc -l 127.0.0.1 4444  
  2. #on powershell:  
  3. netstat -a -n -q | findstr "4444" 

那能够是零碎层面的题目,进一步剖析 通博8888 零碎事情发明是 TDI 挑选器的题目:

image

在 windows/system32 下我们可以找到这个驱动文件:

image

实质上是由于一些软件厂商用了微软过期的 API 招致的,比方 QQGame 和一些 VPN 软件被证明存在如许的题目,确认缘由就好办了,起首依据软件名字找到对应注册表项HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservices,按图修正:

image

重启电脑,再次测试 ok:

image

3、sshd 开机启动

一旦关失 bash.exe 历程,ssh 就无法衔接了。处理这个题目分三个步调:

  1. 添加启动项,让 bash.exe 随机启动
  2. 运用下令 sudo service ssh start 启动 sshd
  3. 由于 sudo service ssh start 下令需求输出暗码不克不及主动化,以是需求 visudo 来免去输出暗码的操纵。

3.1 理清思绪接上去记载一些进程:

  • 运用 vbs 启动隐蔽窗口开启 bash 和 运转 sudo service ssh start
  1. set ws=wscript.createobject("wscript.shell" 
  2. ws.run "C:通博8888System32bash.exe",0  
  3. ws.run "C:通博8888System32bash.exe  -c 'sudo /usr/sbin/service ssh --full-restart'",0 
  • 运转 sudo visudo,添加如下设置装备摆设
  1. toor ALL = (root) NOPASSWD: /usr/sbin/service 

此中 toor 是我的用户名。

  • 添加vbs文件到windows 启动项,将 vbs 文件放入到如下目次下。
  1. %AppData%Microsoft通博8888Start MenuProgramsStartup 

重启,测试不出不测就可以衔接上 ssh 了。

别的一种方案是运用windows自带的定时义务方案添加开机启动Ubuntu ssh效劳的义务:

  搜刮“义务方案顺序”,操纵-- 创立根本义务

  触发器:当盘算机启动时

  操纵:启动顺序

  顺序名:bash.exe

  参数为-c "sudo /usr/sbin/sshd -D"" 意思是翻开bash,实行sshd下令开启ssh效劳

  选择“点击完成翻开属性页”按钮,点击完成,翻开属性页

  在属性页选择“运用最高权限运转”,防止错误。

3.2 题目1:重启/开机后无 sshd 历程

起首确保上述三步每一步的代码都准确,其次看看零碎日记是何缘由失败,我这里遇到的是 sudo 还需求暗码,招致开机的 VB 剧本实行堕落。细心研讨了下, 这个设置装备摆设文件如下:

  1. ...  
  2. User privilege specification  
  3. root    ALL=(ALL:ALLALL  
  4. my-username   ALL=(ALL) NOPASSWD: ALL  # ---> the line added by me   
  5. # Members of the admin group may gain root privileges  
  6. %admin ALL=(ALLALL   
  7. # Allow members of group sudo to execute any command  
  8. %sudo   ALL=(ALL:ALLALL  
  9. # See sudoers(5) for more information on "#include" directives:  
  10. #includedir /etc/sudoers.d 

可以看到我的设置装备摆设加在了两头,前面另有几条设置装备摆设,招致我的设置装备摆设被前面的掩盖了。处理方案是把我的设置装备摆设挪动到最初,再次试了下,sudo 不再需求暗码了。

3.3 题目2:secureCRT卡去世/乱码

这里的 secureCRT卡去世/乱码和字符集有关,留意设置准确的终端字符集和零碎字符集,Ubuntu on 通博8888 默许字符集是 Latin。

  1. sudo vim /etc/default/locale   
  2. LANG=zh_CN.UTF-8     
  3. LANGUAGE=”zh_CN:zh”    
  4.  
  5. #################################  
  6. # sudo dpkg-reconfigure locales  
  7. # en_US.UTF-8、zh_CN.utf-8、zh_CN.UTF-8  
  8.  
  9. #################################  
  10.  
  11. WARNING! Your environment specifies an invalid locale.  
  12.  The unknown environment variables are:  
  13.    LC_CTYPE=zh_CN.UTF-8 LC_MESSAGES=zh_CN.UTF-8 LC_ALL=  
  14.  This can affect your user experience significantly, including the  
  15.  ability to manage packages. You may install the locales by running:  
  16.    sudo apt-get install language-pack-zh  
  17.      or  
  18.    sudo locale-gen zh_CN.UTF-8  
  19.  
  20. To see all available language packs, run:  
  21.    apt-cache search "^language-pack-[a-z][a-z]$"  
  22. To disable this message for all users, run:  
  23.    sudo touch /var/lib/cloud/instance/locale-check.skip 

别的一种方案不修正设置装备摆设,在bash中顺次实行如下下令:

  1. apt-get update  
  2. apt-get install language-pack-zh-hans  
  3. update-locale LANG=zh_CN.UTF-8 

这几条下令装置了中文补丁,而且把当地编码改为了中文编码。

然后重启WSL(关失窗口,重新翻开),再实行下令

  1. echo $LANG 

可以看到输入为

  1. zh_CN.UTF-8 

之后可以看到终端中输入的中文可以正常表现了。

4、WSL Ubuntu 更新

4.1 ubuntu 零碎晋级:

(1)版本晋级 

  1. //更新软件源,最初会读取软件包列表  
  2.     sudo apt-get update    
  3.     sudo update-manager -c -d 

  然后选择 upgrade:apt-get -y --force-yes upgrade

(2)平凡晋级 

  1. sudo apt-get update  
  2.    sudo apt-get -y upgrade  
  3.    # apt-get -y --force-yes --fix-missing upgrade 

(3)晋级单一软件

  1. sudo apt-get update  
  2. sudo apt-get upgrade package_name_your_want_to_upgrade 

(4)全部晋级

  1. //更新一切的软件  
  2. sudo apt-get dist-upgrade  

4.2 修正 Ubuntu 镜像源:

WSL 自带的 Ubuntu 更新源国际拜访十分慢,很容易呈现局部源IP无法衔接上,进而局部索引文件下载失败,最初招致整个更新失败,这里引荐阿里云的镜像比拟波动牢靠,固然也可以参考国际各个大学的镜像源

(1)Ubuntu 的软件源设置装备摆设文件是 /etc/apt/sources.list,先将零碎自带的该文件做个备份:

  (cd /etc/apt && sudo cp sources.list sources.list.bak.`date -I`)

(2)将源文件中的 URL 交换为国际恣意源,比方阿里云:http://mirrors.aliyun.com/ubuntu 

  1. deb http://cn.archive.ubuntu.com/ubuntu/ trusty main restricted universe multiverse  
  2. deb http://cn.archive.ubuntu.com/ubuntu/ trusty-security main restricted universe multiverse  
  3. deb http://cn.archive.ubuntu.com/ubuntu/ trusty-updates main restricted universe multiverse  
  4. deb http://cn.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse  
  5. # 如要用于其他版本,把 trusty 换成版本代号就好,比方:15.10 willy、14.04 trusty  
  6. # 详细请参考:http://wiki.ubuntu.org.cn/%E6%BA%90%E5%88%97%E8%A1%A8        http://wiki.ubuntu.org.cn/%E6%A8%A1%E6%9D%BF:14.04source 

(3)sudo apt-get update,革新列表使其失效。

  1. # 留意:肯定要选对版本  
  2. # 留意:肯定要实行革新,重新加载设置装备摆设 

在 vim 中可以间接:

  1. :%s#deb http://archive.ubuntu.com/ubuntu/#deb http://mirrors.aliyun.com/ubuntu/#g  
  2. :%s#deb http://security.ubuntu.com/ubuntu/#deb http://mirrors.aliyun.com/ubuntu/#g 

5、借助 X Server 在 WSL 上运用 GUI 桌面顺序

5.1 X 窗口零碎 (X Window System) 简介

X 窗口零碎( X Window System,也常称为 X11 或 X)是一种以位图方法表现的软件窗口零碎。最后是 1984 年麻省理工学院的研讨,之后酿成 UNIX、类 UNIX、以及 OpenVMS 等操纵零碎所分歧实用的规范化软件东西包及表现架构的运作协议。X 窗口零碎经过软件东西及架构协议来创立操纵零碎所用的图形用户界面,尔后则逐步扩展实用到各形各色的其他操纵零碎上。如今简直一切的操纵零碎都能支持与运用 X。更紧张的是,昔日着名的桌面情况——GNOME 和 KDE 也都因此 X 窗口零碎为根底建组成的。

X Window System 次要由 X Server 和 X Client 两局部构成。此中 X Server 担任承受对图形输入 (窗口) 的恳求并反应用户输出,而 X Client 则是运用图形界面的使用顺序。由于 WSL 自身不支持图形界面,我们需求额定装置 X Server 并指定图形输入地位,使得带有 GUI 的桌面顺序可以被表现和运转。

5.2 X Server 的选择

通博8888 上常用的 X Server 有:Xmanager, Xming, VcXsrv 等,复杂比拟一下:

  • Xmanager 是贸易软件,需求付费
  • Xming 固然是开源软件,但是从从 2007 年最初一个收费版本 (6.9.0.31) 之后,就需求捐助才干下载。不外收费版本固然老旧,但由于 X 通博8888 System 比年来变革不大,收费版照旧根本够用
  • VcXsrv 为开源收费软件,运用方法及界面与 Xming 极为相近,还在不时更新,因而我终极选择此软件

5.3 VcXsrv 的装置和启动   

下载 VcXsrv 并停止装置后,运转 XLaunch,不断点 Next 至启动完成。

5.4 WSL 设置     

启动 X Server 后,需求在 WSL 中输出如下两条指令,重启 Bash,即可运转带有图形界面的 通博8888官网 顺序了

  1. echo export DISPLAY=:0.0>>~/.bashrc  
  2. sudo sed -i 's$<listen>.*</listen>$<listen>tcp:host=localhost,port=0</listen>$' /etc/dbus-1/session.conf 

这里对这两条指令复杂表明一下:

  • 第一条指令

该指令将export DISPLAY=:0.0 指令添加进 ~/.bashrc 中,使得每次开启新的 Bash 时,主动指定图形顺序表现的地位。

也可间接输出以下指令运转顺序,无需export,但作用结果只要一次,再运转其他顺序时,还要重新输出指令。

  1. DISPLAY=:0.0 gvim &    //gvim 为你想要翻开的顺序 

tips:gvim 后的 & 不是必需要加,它表现顺序当前台启动的方法运转,如许在图形界面运转时,下令行窗口还可以持续运用。要是遗忘加 &, 也可以在顺序运转时按ctrl+z, 将顺序历程挂起,并输出bg,使其在背景运转

  •     第二条指令(可选)

第一条输出,重启 Bash 后 , 实际上就可以运转 通博8888官网 顺序了,但顺序普通不会运转好久就挂失了,并会提示 D-Bus非常,该非常会使得很多 通博8888官网 的图形顺序无法很好地运转。 这是由于 D-Bus 需求运用socket来通讯,但 WSL 现在并不支持 socket。

Reddit 上对此的处理方案为:用 tcp 替代 sockets 来使 D-Bus 运转。

详细完成为:在 /etc/dbus-1/session.conf 中(需求 Root 权限),将<listen>unix:tmpdir=/tmp</listen>字段交换为 <listen>tcp:host=localhost,port=0</listen>,复杂写便是第二条指令了。

Refer:

[1] bash on windows可以晋级为16.04吗?

https://www.zhihu.com/question/49411626

[2] How can I SSH into “Bash on Ubuntu on 通博8888 10”?

https://superuser.com/questions/1111591/how-can-i-ssh-into-bash-on-ubuntu-on-windows-10

[3] SSHD server is running but Connection refused on WSL #2376

https://github.com/Microsoft/WSL/issues/2376

[4] Issue with WLS listening to TCP ports #1554

https://github.com/Microsoft/WSL/issues/1554

[5] 折腾 Bash on 通博8888 开启 SSHD 并开机启动

https://stray.love/itshou-zha/bash-on-windows-kai-qi-ssh-bing-kai-ji-qi-dong

[6] ubuntu16.04下装置pip

http://blog.csdn.net/weixin_37911283/article/details/70799481

[7] Win10 linux子零碎下表现图形界面

http://blog.csdn.net/shuzfan/article/details/73658451 

【编辑引荐】

  1. 在通博8888官网上装置必应桌面墙纸改换器
  2. 关于通博8888官网运维罕见毛病排查和处置的33个本领汇总
  3. 电脑卡卡卡?1分钟让通博8888 10测试版飞飞飞
  4. 通博8888官网大牛分享的7道经典口试题和秒收offer的本领
  5. 通博8888官网设置装备摆设开机自启动实行剧本的两种办法
【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0
各人都在看
猜你喜好

读 书 +更多

通博8888官网情况下C编程指南

本书零碎地引见了在通博8888官网平台下用C言语停止顺序开辟的进程,经过罗列少量的顺序实例,使读者很快掌握在通博8888官网平台下停止C顺序开辟的办法和技...

订阅51CTO邮刊

点击这里检查样刊

订阅51CTO邮刊