背景
其实对于绝大部分人来说,Linux系统想要使用OneDrive同步,直接装一个第三方客户端就能用了,比如我之前用的这个,虽然基本都不支持自动同步,但每次有什么更改手动输命令同步一下也够用了。然而某一天,大概是学校新换了个IT管理员,ban掉了所有没有微软官方认证的第三方客户端,纯纯的脑瘫。但没办法人家就是头头,只能认栽,找别的办法来同步Linux上的OneDrive文件夹。
最终决定是装一个轻量级的Win10虚拟机,利用RDP远程桌面协议来操作,然后把Windows里的OneDrive文件夹共享,并挂载在Ubuntu的文件系统里。有意思的是这顺便还达成了自动同步,坏处就是CPU和内存占用高了一点,但影响并不是很大。
操作流程
配置虚拟机
这里使用了KVM虚拟机平台实现一个轻量级的虚拟机,可以再配合WinApps把一些Windows软件直接做成一个Ubuntu里的小程序。配置流程基本完全参考了这篇教程。
- 安装KVM:
sudo apt-get install virt-manager
。 - 从微软官网下载Win10的ISO镜像,必须下载Pro版本的以使用远程桌面。
- 太长了懒得一步步写了,直接跟着这个流程配置虚拟机,我只考虑使用OneDrive,所以分配的资源比较少,CPU两个核,最大4G内存,64G硬盘。
- 继续跟着下一个流程安装Win10,注意在安装virt-win-gt-64.exe后还要安装一下同一文件夹下的virtio-win-guest-tools.exe来共享剪贴板,然后再安装那个Spice Guest Tools。可以把分辨率调低一些节省更多资源,比如800x600。
- 如果想要使用WinApps,可以跟着这个步骤来安装配置。
共享Windows虚拟机的文件夹
- 先在网络设置里把当前网络设置为专用网络,并在网络和共享中心里打开专用网络下的网络发现和文件共享。
- 右键OneDrive文件夹 -> 属性 -> 共享,选择高级共享,勾选共享此文件夹,下面的权限里删除所有人,添加自己的用户名,勾选完全控制,一路确认。
- Windows里打开Powershell,输入
ipconfig
获得虚拟机的IP地址。 - Ubuntu里创建一个挂载点文件夹,比如
sudo mkdir /mnt/OneDrive
。 - Ubuntu里用Samba挂载OneDrive文件夹
sudo mount -t cifs '//windows_ip_address/OneDrive' /mnt/OneDrive -o username=username,password=password,dir_mode=0777,file_mode=0777
,windows_ip_address、OneDrive文件夹名字、username、password改成你的。 - 如果想要达成Ubuntu开机自动挂载OneDrive,需要虚拟机的Win10不设密码,开机能自动登入系统。但是Windows默认不允许无密码用户共享文件夹,参考这个网站,在Windows里win+r运行gpedit.msc组策略编辑器,Windows设置 -> 安全设置 -> 本地策略 -> 安全选项 -> 账户:使用空密码的本地账户只允许进行控制台登录,选择已禁用。英语的选项为Windows Settings -> Security Settings -> Local Policies -> Security Options -> Account: Limit local account use of blank passwords to console logon only,设置为disabled。然后刚刚的挂载命令的password=留空。
- 在Ubuntu的Startup Application中添加一条
bash -c "sleep 10 && echo sudo_password | sudo -S -k mount -t cifs '//windows_ip_address/OneDrive' /mnt/OneDrive -o username=username,password=,dir_mode=0777,file_mode=0777"
,sudo_password改成自己的sudo密码。sleep 10是为了等待Windows开机进系统。
共享Linux主机的文件夹
- 虚拟机的内存设置里要勾选Enable shared Memory。
- 选择Add Hardware,选择Filesystem,Driver用virtiofs,Source path选择Ubuntu主机里要共享的文件夹位置,Target path自己起个名字,比如VMShare。
- 下载并安装Windows File System Proxy。
- 在Windows的服务里找到VirtIO-FS Service,启动并设置为自动启动。
- 在我的电脑下应该能看到出现了一个叫VMShare的目录。但是这个目录不能用于OneDrive的同步目录,不然都不需要单独给虚拟机划分空间了。
参考资料
https://github.com/Fmstrat/winapps
https://ivpsr.com/774.html