零、背景
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 — 开发,负责部署开发环境
两台主机协同办公,难免会存在如下问题:
- Linux 机器无法接入办公网,导致代码不能正常部署/下载
- Windows 和 Linux 之间难免有文件传输
- 多鼠标/键盘且换带来困扰
只需要解决如上三个问题,两台电脑开发几乎游刃有余,经过摸索以及实践,最终采用如下方案解决如上三个问题,
- Windows 机器接入公司域,然后开启热点,供 Linux 使用,以保证两台电脑在一个局域网内
- Linux 机器上安装 Samba 服务,将目录共享到 Windows 机器上,方便文件传输
- 使用 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 | [share] |
重启 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.
ssh 登录 ubuntu,使用 smbclient 检查 samba 服务的可用性
1
2sudo 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
15WARNING: 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 Terminal 的 preview 版本,该方案也是值得尝尝新,但是要求 Window 10 的系统版本要 >=1903
,因为公司电脑统一升级,我尝试自己升级两次后都失败了,所以放弃了该方案,感兴趣的同学可以自己尝试尝试。
Windows + Virtual Machine
这种方案是使用诸如 VMware Workstation (Player || pro)、Hyper-V、VirtualBox 之类的虚拟机管理软件安装 Linux 虚拟机,然后虚拟机和主机之间通过某些方案(虚拟机的文件夹共享或者 samba 服务)进行文件共享,最后在 Windows 上进行开发,在 VM 上完成编译。
在没有远程 Linux 的情况下可以考虑使用这种方案,但是可能会遇到如下问题:
网络问题
虚拟机提供多种网络环境,如果要接入外网的话一般会选
Bridge
和NAT
这两种方案之一。但是,一般来讲公司的内网 IP 会受限制,无法使用Bridge
,而使用NAT
网络时,VM Player 对端口转发支持并不是很好(Pro 版要收费)。总的来讲,一是折腾起来很麻烦, 二十使用虚拟机本身就很耗费资源,显得臃肿,与极客开发者的性格不相符合。文件夹共享问题
使用虚拟机管理软件提供的文件夹共享可以把 Windows 宿主机下的文件夹挂在到 Linux 中,但是这种方式在共享文件夹中使用
npm
会有一些坑,与symlink
相关,详情可以参考这里除了使用虚拟机管理软件提供的文件夹共享方式以外,还可以用 samba 服务把虚拟机里的目录共享到宿主机上,这样可以很方便的在 Windows 上开发,在 Linux 中完成编译运行。