最近几天,我尝试了使用虚拟机 + Waydroid 的方式,在 NAS 上运行 Android 版 Google Photos。同时通过 NAS 提供的一系列软件,自动汇总手机、存储卡中的照片,并备份到 Google Photos。在本文中,我将记录完整的操作过程。

为什么要采用这种方式

对于照片的存储和备份,已经有很多方便的方式了。那么为什么还要使用这种比较「麻烦」的方式?对于读者可能遇到的疑问,我将在下文中进行解答。

你已经有 NAS 了,为什么不直接用 NAS 保存照片?

与 Google Photos 相比,使用 NAS 保存照片,确实有容量大、传输速度快等优势。而且 NAS 上可以部署 Synology PhotosPhotoPrism 等应用,通过设备端 AI 对照片进行智能整理,兼顾了隐私与易用性。

但是对我来说,目前 Google Photos 的照片整理和搜索功能,依然是最强大的,暂时我还没找到其他替代品。所以现阶段,会继续使用 Google Photos。同时,我也在持续关注那些隐私友好的照片管理工具,希望最终能实现照片全部保存在本地。

为什么不直接在手机上,通过 Google Photos App 备份照片?

在同时拥有手机、相机等多个拍照设备的情况下,使用 NAS 备份照片会更加方便。

通过类似 USB Copy 的工具,能够实现插入 USB 设备后,自动将设备中的全部照片和视频导入 NAS,无需在电脑和手机上做额外操作。

为什么不使用轻量级的 CLI 工具上传照片?

在 Linux 下,有一些轻量级的 Google Photos 上传工具,例如 Google Photos uploader CLI。这些工具占用资源较小,可以方便地通过 Docker 等方式运行在 NAS 上。

不过,这些工具的功能有限。例如如下两种情况,第三方工具就无法满足需求了:

  1. 上传到开启 高级保护计划 的 Google 账号:Google 会限制第三方应用访问 Google 账号中的数据;
  2. 使用 Google Photos App 自带的空间节省程序,上传照片时自动压缩,节省空间。

创建虚拟机

我的 NAS 运行基于 Linux 的 DSM 操作系统,理论上可以直接运行 Waydroid。但是目前找不到打包好用于 DSM 的 Waydroid,所以还是在虚拟机中运行比较方便。

我通过 DSM 的 Virtual Machine Manager,安装 Ubuntu 来运行 Waydroid。安装时,显卡选择 vga,虚拟机内存大小设置为 4G 以上(经过我的测试,设置为 2G 也能功能,但是操作起来不太流畅)。

创建虚拟机,内存容量选择 4G,显卡选择 vga

创建虚拟机,内存容量选择 4G,显卡选择 vga

安装 Ubuntu 的过程中,在创建用户时,建议勾选开机时自动登录:

安装 Ubuntu 虚拟机时,选择用户自动登录

安装 Ubuntu 虚拟机时,选择用户自动登录

虚拟机中的操作系统,不建议使用 Xubuntulubuntu 这类轻量级 Linux 发行版。因为 Waydroid 依赖 Wayland,而目前最新 LTS 版本的 Xubuntu 和 lubuntu 暂不支持 Wayland,需要进行额外设置。推荐直接使用 Ubuntu 或 Kubuntu

安装 Waydroid

首先按照此教程安装 Waydroid:

安装后,参考如下链接关闭 GPU 加速:

接下来单击 Waydroid 图标。Waydroid 第一次启动时,会提示下载镜像。建议直接选择带有 GAPPS 的镜像:

初始化 Waydroid,Android Type 选择 GAPPS

初始化 Waydroid,Android Type 选择 GAPPS

下载镜像并成功启动 Android 后,按照此链接进行 Google Play 认证:

经过上述步骤,Android 环境就准备完成了。此时可以登录 Google 账号,下载安装 Google Photos。

设置开机自动启动 Waydroid

Waydroid 默认不会开机自动启动。通过安装 GNOME Tweak Tool,可设置开机自动启动 Waydroid:

sudo apt install gnome-tweak-tool

安装后,在 GNOME Tweak Tool 的 Startup Applications 面板中,添加 Waydroid 即可。

将 Waydroid 的照片目录挂载到 NAS

为了在 DSM 中访问 Waydroid 里的照片,方便使用 USB Copy 等 NAS 自带工具向 Google Photos 添加照片,可将 Waydroid 中的照片目录挂载到 NAS。

首先在 Ubuntu 中安装 Samba:

sudo apt install samba

安装后,在 /etc/samba/smb.conf 文件末尾添加如下内容,并将 <username> 替换为自己的用户名:

[share]
    comment = Waydroid Photo Share
    path = /home/<username>/.local/share/waydroid/data/media/0/DCIM
    browsable = yes
    guest ok = no
    read only = no
    create mask = 0755
    admin users = <username>

然后重启 Samba 服务、设置防火墙规则:

sudo service smbd restart
sudo ufw allow samba

最后设置 Samba 用户密码:

sudo smbpasswd -a username

设置完成后,即可在 DSM 的 File Station 中,挂载 Samba 共享目录。

避免 Google Photos 上传临时文件

DSM 会共享目录中自动创建 @eaDir 目录,并在其中存放图片略缩图等临时文件。

为了避免这些略缩图被上传到 Google Photos,需要创建一个名为 .nomedia 的空文件:

sudo touch /home/blanboom/.local/share/waydroid/data/media/0/DCIM/@eaDir/.nomedia

通过 Tasker 设置定期扫描存储空间

通过共享目录的方式,上传到 Waydroid 中的照片,无法被 Android 系统感知。必须重启 Android 系统,Google Photos 才能识别到新照片。

为了解决这个问题,我使用了 Tasker 和 SD Scanner 两款应用,周期性触发扫描照片:

安装上述两个应用后,在 Tasker 中创建一个 Task,具体内容参考 F-Droid 页面中的描述

SD Scanner can be used with Tasker by using the "Send Intent" action listed
under "System." Use the following settings, leaving the ones I don’t list at the
default:

  • Action: android.intent.action.RUN
  • Package: com.gmail.jerickson314.sdscanner
  • Class: com.gmail.jerickson314.sdscanner.MainActivity
  • Target: Activity

然后创建一个 Profile,设置每天指定时间运行:

在 Tasker 中创建定时执行的任务

在 Tasker 中创建定时执行的任务

设置完成后,Tasker 就会周期性触发 SD Scanner 扫描存储卡空间。Google Photos 能够在后台感知扫描结果,并自动上传照片。

除了使用 Tasker,我还查找到了使用 ADB 的方式进行存储空间扫描。结合 cron job,应该也能实现类似的功能。感兴趣的读者,可以参考如下链接进行尝试:


图片素材来源:

最后修改日期: 2024-03-23

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据