如何进行Ubuntu on Windows10跨平台开发环境搭建


本篇文章给大家分享的是有关如何进行Ubuntu on Windows10跨平台开发环境搭建,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。程序猿经常争论的一个话题是:日常开发到底Windows好还是Linux好?进而演化出另一个问题:到底选MacBook 好还是SurfaceBook好?选择Linux系统或者mac笔记本的同学最核心的理由是Linux/Mac开发、编译工具链比较完善,很多环境或者安装包都系统自带了,写出来的程序可以很方便的通过开发、测试与线上系统对接,开发测试效率比较高,而 Windows下开发的同学可能需要考虑开发、测试代码的可移植性问题。就拿笔者来说,也曾经遇到过某些java/pythonAPI不支持Windows的问题,这给日常开发带来了不小的麻烦。在Windows10以前,咱们为了解决 Windows开发环境跨平台的问题,往往会选择cygwin,这个项目本身已经很成熟了,笔者也用了很多年,它能在Windows下模拟一套类Linux的环境,用它应付一般的开发测试问题不大。但它的缺点在于组件、包管理器比较弱,对于日后的环境维护相当麻烦,而且一些底层 API模拟的并不完善,对于一些涉及 Linux底层的系统调用等场景显得很鸡肋。幸运的是2016年微软在Windows10WSL里开始内置Ubuntu,之后又开始在MicrosoftStore以 UWPAPP 的形式发布各个Linux系统。这样对于需要搭建跨平台开发环境的同学来说可以做到一套系统搞定多套平台环境,又多了一个舍弃Mac的理由 :)本文今天会详细讲解下怎样在Windows10下安装Ubuntu、搭建Linux开发环境,碰到的一些坑及其解决方案。首先更新你的 Windows10 系统到最新,然后开启“开发人员模式”,最后在MicrosoftStore里输入wsl(或 Ubuntu、linux)然后选择安装,成功后即可点击启动。注意:网上有些老的教程在命令行下用lxrun /install的形式安装,这里不推荐,因为这是早期WSLbeta版本的做法,现在正式版直接在MicrosoftStore以UWPAPP的形式获取更便捷,也易于管理。最终的系统安装在如下目录:%LOCALAPPDATA%PackagesCanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc
初始安装时,整个目录大概 600MB 左右,我更新了一些软件包并升级到 16.04 后,大小在 1G。重装openssh
修改 sshd 设置,添加以下配置到/etc/ssh/sshd_config
重启 sshd
不出意外使用 ssh 客户端应该可以链接上 Bash on windows 了。# /etc/init.d/ssh restartsshd: ../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 即可如果遇到如下错误Could not load host key: /etc/ssh/ssh_host_rsa_key请执行/usr/bin/ssh-keygen -A重新生成hostkeys再重启sshd即可。这个问题查起来还是比较复杂的,需要有比较系统的排查方法和理论,笔者这里折腾了不少时间。现象就是sshd服务起来了,psaux和top都能见到,但是ssh连接的时候一直提示密码错误或者没有权限,但密码确认是对的,包括新建账户也不行,按照上篇《记一次诡异的 ssh 互信免密码登录失败》的排查思路发现sshd服务压根就没有监听指定的sshd端口,换做其它端口也有同样的问题:那可能是系统层面的问题,进一步分析Windows系统事件发现是TDI筛选器的问题:在windows/system32下咱们可以找到这个驱动文件:重启电脑,再次测试ok:一旦关掉 bash.exe 进程,ssh 就无法连接了。解决这个问题分三个步骤:添加启动项,让 bash.exe 随机启动使用命令sudo service ssh start启动 sshd因为sudo service ssh start命令需要输入密码不能自动化,所以需要 visudo 来免除输入密码的操作。使用 vbs 启动隐藏窗口开启 bash 和 运行sudo service ssh start运行sudo visudo,添加如下配置其中 toor 是我的用户名。添加vbs文件到windows 启动项,将 vbs 文件放入到如下目录下。重启,测试不出意外就可以连接上 ssh 了。另外一种方案是使用windows自带的定时任务计划添加开机启动Ubuntu ssh服务的任务:搜索“任务计划程序”,操作– 创建基本任务触发器:当计算机启动时
操作:启动程序
程序名:bash.exe
参数为-c “sudo /usr/sbin/sshd -D”” 意思是打开bash,执行sshd命令开启ssh服务
选择“点击完成打开属性页”按钮,点击完成,打开属性页
在属性页选择“使用最高权限运行”,避免错误。首先确保上述三步每一步的代码都正确,其次看看系统日志是何原因失败,我这里遇到的是sudo还需要密码,导致开机的VB脚本执行出错。仔细研究了下, 这个配置文件如下:可以看到我的配置加在了中间,后面还有几条配置,导致我的配置被后面的覆盖了。解决方案是把我的配置移动到最后,再次试了下,sudo不再需要密码了。这里的 secureCRT卡死/乱码和字符集有关,注意设置正确的终端字符集和系统字符集,UbuntuonWindows默认字符集是Latin。另外一种方案不修改配置,在bash中依次执行如下命令:这几条命令安装了中文补丁,并且把本地编码改为了中文编码。然后重启WSL(关掉窗口,重新打开),再执行命令可以看到输出为之后可以看到终端中输出的中文能够正常显示了。WSL自带的Ubuntu更新源国内访问非常慢,很容易出现部分源IP无法连接上,进而部分索引文件下载失败,最后导致整个更新失败,这里推荐阿里云的镜像比较稳定可靠,当然也可以参考国内各个大学的镜像源。在 vim中可以直接:一切妥当后: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 的桌面程序可以被显示和运行。Windows 上常用的 X Server 有:Xmanager, Xming, VcXsrv 等,简单比较一下:Xmanager 是商业软件,需要付费Xming 虽然是开源软件,但是从从 2007 年最后一个免费版本 (6.9.0.31) 之后,就需要捐助才能下载。不过免费版本虽然老旧,但由于 X Windows System 近年来变化不大,免费版还是基本够用VcXsrv 为开源免费软件,使用方式及界面与 Xming 极为相近,还在不断更新,因此我最终选择此软件下载 VcXsrv 并进行安装后,运行 XLaunch,一直点 Next 至启动完成。启动 X Server 后,需要在 WSL 中输入如下两条指令,重启 Bash,即可运行带有开发云主机域名图形界面的 Linux 程序了这里对这两条指令简单解释一下:第一条指令该指令将export DISPLAY=:0.0 指令添加进 ~/.bashrc 中,使得每次开启新的 Bash 时,自动指定图形程序显示的位置。
也可直接输入以下指令运行程序,无需export,但作用效果只有一次,再运行其他程序时,还要重新输入指令。tips:gvim 后的 & 不是必须要加,它表示程序以后台启动的方式运行,这样在图形界面运行时,命令行窗口还可以继续使用。要是忘记加 &, 也可以在程序运行时按ctrl+z, 将程序进程挂起,并输入bg,使其在后台运行第二条指令(可选)第一条输入,重启 Bash 后 , 理论上就可以运行 Linux 程序了,但程序一般不会运行很久就挂掉了,并会提示 D-Bus异常,该异常会使得许多 Linux 的图形程序无法很好地运行。 这是因为 D-Bus 需要使用socket来通信,但 WSL 目前并不支持 socket。
Reddit 上对此的解决方案为:用 tcp 代替 sockets 来使 D-Bus 运行。
具体实现为:在 /etc/dbus-1/session.conf 中(需要 Root 权限),将unix:tmpdir=/tmp字段替换为 tcp:host=localhost,port=0,简单写就是第二条指令了。是因为你的 WSL 里没有中文字体支持,所以需要安装中文字体:如有需要在 VcxSrv输入中文可以安装fcitx中文输入法,具体参考#Windows Subsystem for Linux入门:安装+配置图形界面+中文环境+vscodehttps://wu-kan.github.io/posts/linux/Windows-Subsystem-for-Linux#windows 前端工作环境搭建指北https://juejin.im/post/5a5f0e3ff265da3e290c3b78如果还有问题,可以进一步如下设置:打开xlanch,一路下一步添加启动参数
-fp “C:/Windows/Fonts”然后重启xming本地文件系统的各磁盘挂载在 /mnt 目录下,如 C 盘在子系统中的位置是:/mnt/c ,WSL文件读写权限的配置方法:Ubuntu 子系统的根目录位置:
[C:UsersusernameAppDataLocalPackagesCanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgscLocalStaterootfs]需要将子系统中的文件拷贝到本地时可以直接访问;但不建议在外部手动更改子系统里的文件。
如果不小心把子系统搞崩溃了怎么办?这里有两种方法。1、直接右键卸载,再从 Microsoft Store 重新安装。
2、推荐!打开 PowerShell,运行 ubuntu clean ,该命令会清除 Ubuntu 的所有文件和配置,但是不会卸载应用,相当于重置,省得重新安装应用了。输入ubuntu help可以查看更多指令。子系统默认登录账户为我们初始化时设置的普通账户,我们可以把默认账户更改为 root。打开 windows 的 PowerShell,修改默认账户为 root:需要修改为其它账户的话,把命令中的 root 改为其它用户名即可。按图操作:wsl 2已经全面支持docker,本文不再赘述,下面主要针对wsl版本。首先WSL命令行一定要用管理员身份启动。(用管理员打开Ubuntu程序,记住不是sudo,是Windows的“管理员打开”)如果默认安装不通过,可以指定docker 版本号安装:【WSL+Docker】新手Win10下的WSL Ubuntu18并安装使用Dockerhttps://zhuanlan.zhihu.com/p/61542198随后再以管理员启动WSL控制台,执行测试安装结果(下面的命令不要再带sudo):显示如上信息,就表示可以正常使用了,需要注意的是每次电脑重启后先执行cgroupfs-mount再启动docker服务,wsl 目前docker支持并不完善,可能会有很多问题,建议直接linux环境使用,或者wsl 2 。运行docker提示: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?Inside file/lib/systemd/system/docker.service change:ExecStart=/usr/bin/dockerd fd://
with
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375Inside file/etc/init.d/dockerchange:DOCKER_OPTS=
with
DOCKER_OPTS=”-H tcp://0.0.0.0:2375″and then restart your computer(or admin: sudo service docker restart).如果你的Windows/Docker版本不对也会有各种问题,可能 WSL 本身无法支持/兼容docker engine,这时候我們若希望在 WSL 中運行 docker(client) ,我們需要將 docker client 連接到 Windows 的 docker engine (這也是為什麼要安裝 windows docker 的原因),并且还需如下设置。以上就是如何进行Ubuntu on Windows10跨平台开发环境搭建,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注开发云行业资讯频道。

相关推荐: css如何实现垂直对齐

这篇文章将为大家详细讲解有关css如何实现垂直对齐,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。该属性定义行内元素的基线相对于该元素所在行的基线的垂直对齐。允许指定负长度值和百分比值。这会使元素降低而不是升高。在表单元格中,…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 05/22 15:56
下一篇 05/22 15:56

相关推荐