Windows 10 配合 Ubuntu 搭建舒适开发环境不完全指北

零、背景

Mac Book Pro (MBP)一直是极客开发者首选的操作系统,然而在工作中,并不是每个公司都会为开发者配备 MBP 的,然而,相信有强迫症的程序员都无法忍受 Windows 的命令行工具,我也不例外。好再微软在 2019 年 5 月推出了一款 Windows Terminal(截至作者撰稿时,仅 Preview 版可用),可以说给基于 Window 开发的程序员带来了福音。

然而不幸的是,Windows Terminal 只能在 Windows 10 的某些高版本中使用,而作者所在公司仅支持 Windows 7 系统,好在同事申请了一台 MBP 后我把他原来的 Windows 机借过来了,所以作者就拥有了两台开发机器。基于以上背景,本文记录了使用 Window 配合 Linux 搭建舒畅的开发环境的过程。操作系统配置信息如下:

OS Version CPU core Memory Disk
Windows 10 1809 4 16G 512G(SSD)
Ubuntu 18.04 4 16G 512G

由于 Linux 机器无法接入公司的域,同时很多办公软件在 Linux 下没有简单的替代品,最终选择 Windows + Ubuntu 的解决方案:

  • Windows — 办公,负责邮件,文档,多媒体的处理。
  • Linux — 开发,负责部署开发环境

两台主机协同办公,难免会存在如下问题:

  1. Linux 机器无法接入办公网,导致代码不能正常部署/下载
  2. Windows 和 Linux 之间难免有文件传输
  3. 多鼠标/键盘且换带来困扰

只需要解决如上三个问题,两台电脑开发几乎游刃有余,经过摸索以及实践,最终采用如下方案解决如上三个问题,

  1. Windows 机器接入公司域,然后开启热点,供 Linux 使用,以保证两台电脑在一个局域网内
  2. Linux 机器上安装 Samba 服务,将目录共享到 Windows 机器上,方便文件传输
  3. 使用 Synergy 实现键鼠共享,一套键鼠共同控制两台主机

本文后续即为以上解决方案的绝体实现,仅供你参考,如有疑惑可以自行 Google 或者通过邮件与我交流。

一、搭建 Samba 服务

1.1 Linux 安装 Samba 服务

Samba service Installation

1
> sudo apt-get install -y samba samba-common

创建共享目录

1
> cd ~ && mkdir share

添加账号

1
> sudo smbpasswd -a gbin # gbin 账号必须是系统中存在的账号,如果系统中不存在则先 useradd 添加账号

修改配置

1
> sudo vim /etc/samba/smb.conf

末尾添加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
[share]
comment = share from ubuntu
browseable = yes
path = /home/gbin/share
create mask = 0700
directory mask = 0700
valid users = gbin
force user = gbin
force group = gbin
public = yes
available = yes
writable = yes

重启 smbd 服务

1
> sudo service smbd restart

1.2 Windows 接入共享文件夹

打开资源管理器,输入 \your-ip\your-shared-folder,在弹出的对话框中输入账号密码。输入完成后,即可在 Windows 上开发项目,对项目的更改会实时同步到 Linux 中,修改完成后可直接在 Linux 中编译运行,Web 等项目则可以直接在 Window 中通过浏览器远程访问项目。

[Optional]: 将共享目录映射成一个 Drive
打开资源管理器 -> Network -> Map Network Drive:

1.3 [Optional] troubleshooting

Window 无法连接共享文件夹
Window 尝试连接共享文件夹时,报如下错误:

1
You Can’t  Access This Share Folder Because Your Organisation’s Security Policies Block Unauthenticated Guest Access.

can not access shared folder

  • ssh 登录 ubuntu,使用 smbclient 检查 samba 服务的可用性

    1
    2
    > sudo apt-get install -y smbclient
    > smbclient -L \\localhost -U username%your-password

    输出如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    WARNING: The "syslog" option is deprecated

    Sharename Type Comment
    --------- ---- -------
    print$ Disk Printer Drivers
    share Disk share from ubuntu
    IPC$ IPC IPC Service (gbin-dev server (Samba, Ubuntu))
    Reconnecting with SMB1 for workgroup listing.

    Server Comment
    --------- -------

    Workgroup Master
    --------- -------
    WORKGROUP GBIN-DEV

    其中看到 share from ubuntu 的注释代表 smb 服务启动成功

  • 修改 windows 的配置
    按照这个教程 开启 insecure guest logons 选项

二、键鼠共享

其他方案

Windows + WSL + Window Terminal

最近,微软发布了 Windows Terminalpreview 版本,该方案也是值得尝尝新,但是要求 Window 10 的系统版本要 >=1903,因为公司电脑统一升级,我尝试自己升级两次后都失败了,所以放弃了该方案,感兴趣的同学可以自己尝试尝试。

Windows + Virtual Machine

这种方案是使用诸如 VMware Workstation (Player || pro)、Hyper-V、VirtualBox 之类的虚拟机管理软件安装 Linux 虚拟机,然后虚拟机和主机之间通过某些方案(虚拟机的文件夹共享或者 samba 服务)进行文件共享,最后在 Windows 上进行开发,在 VM 上完成编译。

在没有远程 Linux 的情况下可以考虑使用这种方案,但是可能会遇到如下问题:

  • 网络问题

    虚拟机提供多种网络环境,如果要接入外网的话一般会选 BridgeNAT 这两种方案之一。但是,一般来讲公司的内网 IP 会受限制,无法使用 Bridge,而使用 NAT 网络时,VM Player 对端口转发支持并不是很好(Pro 版要收费)。总的来讲,一是折腾起来很麻烦, 二十使用虚拟机本身就很耗费资源,显得臃肿,与极客开发者的性格不相符合。

  • 文件夹共享问题

    使用虚拟机管理软件提供的文件夹共享可以把 Windows 宿主机下的文件夹挂在到 Linux 中,但是这种方式在共享文件夹中使用 npm 会有一些坑,与 symlink 相关,详情可以参考这里

    除了使用虚拟机管理软件提供的文件夹共享方式以外,还可以用 samba 服务把虚拟机里的目录共享到宿主机上,这样可以很方便的在 Windows 上开发,在 Linux 中完成编译运行。

本文标题:Windows 10 配合 Ubuntu 搭建舒适开发环境不完全指北

文章作者:Syncher

发布时间:2019年07月02日 - 17:07

最后更新:2019年10月10日 - 18:10

原始链接:https://0x400.com/2019-07-02-dev-environment-on-windows-and-linux.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。