Ubuntu 26.04 使用 Windows Spotlight:给 Bing Wallpaper 加上 Spotlight 支持

之前我一直在 Ubuntu 上使用 Damask 自动切换桌面壁纸,其中最喜欢的图片源是 Windows Spotlight

用了一段时间后,感觉 Spotlight 的图片质量确实不错,但 Damask 有个地方让我越来越不满意:

图片换掉以后,没有自动形成一个方便管理的本地历史图库。

有时候刚看到一张不错的照片,过一会儿自动切换了,再想找回来就比较麻烦。

而我之前已经在使用的 Bing Wallpaper GNOME Extension 恰恰在这方面做得不错。

它原本就支持:

  • 自动下载 Bing 每日壁纸;
  • 保存已经下载过的图片;
  • Previous / Next 前后切换;
  • Favorite 收藏;
  • Random / Shuffle 随机显示;
  • Gallery 图片管理。

官方也明确把"逐渐建立本地图片 collection"和从历史图片中随机轮换作为主要功能。

后来发现已经有人给 Bing Wallpaper 提交了一个很有意思的修改:

把 Bing Wallpaper 改成多图片源架构,并加入 Windows Spotlight。

给 Bing Wallpaper 增加多图片源与 Windows Spotlight 支持的 Pull Request

https://github.com/neffo/bing-wallpaper-gnome-extension/pull/294

也就是说,可以变成:

复制代码
Bing Wallpaper
├── Bing Image of the Day
└── Windows Spotlight

这样对我来说主要有两个好处:

  1. 可以少安装一个 Damask;

  2. Spotlight 图片可以利用 Bing Wallpaper 原有的本地图库、收藏、前后切换和随机轮播机制。

不过首先要说明:

本文使用的是一个尚未正式进入主线的开发分支,并不是 Extension Manager 中的正式版本。

使用自己编译的 GNOME Extension,意味着遇到问题时不能完全依赖官方版本的支持,需要具备一定的问题定位和恢复能力。

所以我的实际做法是:

复制代码
先在 Ubuntu 虚拟机测试
        ↓
确认 Spotlight 正常
        ↓
确认 Gallery / Shuffle 等功能正常
        ↓
再修改 Host

如果只是想简单换壁纸,又不熟悉 Git、GNOME Extension 和 Linux 命令行,我反而建议继续使用 Damask,或者等待这个功能正式合入。


一、先备份原来的 Bing Wallpaper

因为开发版和正式版使用的是相同的 Extension UUID:

复制代码
BingWallpaper@ineffable-gmail.com

所以安装前先备份一下比较稳妥。

先建立备份目录:

复制代码
mkdir -p ~/Backup/BingWallpaper

备份原来的设置:

复制代码
dconf dump /org/gnome/shell/extensions/bingwallpaper/ \
  > ~/Backup/BingWallpaper/settings.dconf

看看当前扩展:

复制代码
gnome-extensions info BingWallpaper@ineffable-gmail.com

如果原来的扩展安装在用户目录:

复制代码
~/.local/share/gnome-shell/extensions/
BingWallpaper@ineffable-gmail.com

也顺手备份:

复制代码
cp -a \
  ~/.local/share/gnome-shell/extensions/BingWallpaper@ineffable-gmail.com \
  ~/Backup/BingWallpaper/

这样后面开发版如果出现问题,至少原来的 Extension 文件和设置都还在。


二、卸载 Damask,避免两个程序互相抢壁纸

我已经在虚拟机里确认 Spotlight 分支可以正常工作,所以迁移到 Host 时就不准备继续保留 Damask 了。

先停止 Damask:

复制代码
flatpak kill app.drey.Damask

然后卸载:

复制代码
flatpak uninstall app.drey.Damask

这里我没有使用:

复制代码
flatpak uninstall --delete-data ...

所以:

复制代码
~/.var/app/app.drey.Damask/

里的用户数据暂时还保留着。

毕竟现在使用的还是一个开发分支,没有必要一开始就把退路全部清干净。

之所以不让两个程序一起运行也很简单:

复制代码
Damask
   ↓
修改 GNOME 当前壁纸

Bing Wallpaper
   ↓
也修改 GNOME 当前壁纸

如果两个程序都自动运行,最后很容易变成"谁最后修改,桌面就听谁的",问题定位也会变麻烦。


三、准备编译环境

Bing Wallpaper 官方 README 把下面几个包列为构建依赖:

复制代码
npm
gettext
intltool
zip

这里有个地方需要注意:

不要看到 npm 就直接再执行一次 apt install npm

我的 Host 本来就通过 NVM 安装了 Node.js/npm:

复制代码
node -v
npm -v
which node
which npm

结果是:

复制代码
v24.18.0
11.16.0

/home/ubuser/.nvm/versions/node/v24.18.0/bin/node
/home/ubuser/.nvm/versions/node/v24.18.0/bin/npm

所以完全没有必要再额外安装一套 Ubuntu APT 版本的 npm。

我实际缺的是:

复制代码
gettext
intltool

因此只安装:

复制代码
sudo apt install gettext intltool

如果你的机器连 zip 都没有,再补:

复制代码
sudo apt install zip

原则很简单:

已有的工具不要重复安装,缺什么补什么。


四、下载 Windows Spotlight 分支

进入自己的代码目录:

复制代码
mkdir -p ~/Codes
cd ~/Codes

下载:

复制代码
git clone \
  --branch multi-provider-support \
  --single-branch \
  https://github.com/nwkyz/bing-wallpaper-gnome-extension.git \
  bing-wallpaper-spotlight

进入:

复制代码
cd ~/Codes/bing-wallpaper-spotlight

可以确认一下当前版本:

复制代码
git log -1 --oneline

我这次实际测试到的是:

复制代码
7e5e35f Multiple providers support & Translation for zh_CN and zh_TW

五、安装

这里其实没必要搞复杂。

先关闭旧版本:

复制代码
gnome-extensions disable BingWallpaper@ineffable-gmail.com

因为前面已经备份过,可以把用户目录中的旧版本清掉:

复制代码
rm -rf \
  ~/.local/share/gnome-shell/extensions/BingWallpaper@ineffable-gmail.com

然后直接使用项目自己的安装脚本:

复制代码
sh install.sh

就可以了。

脚本会完成构建,并把 Extension 安装到:

复制代码
~/.local/share/gnome-shell/extensions/
BingWallpaper@ineffable-gmail.com/

我的实际安装日志中也能看到 extension.jsproviders.jsprefs.js 等文件被解压到这个目录。

安装完成后,我选择:

注销 Ubuntu,再重新登录。

对于 Wayland 下的 GNOME,这也是比较省心的做法。

重新登录后,可以在扩展管理器里确认 Bing Wallpaper 已经启用:


六、我实际只改了几个设置

Bing Wallpaper 的设置不少,不过我没有全部折腾。

实际主要改了下面几个。

1. Indicator icon

默认那个带 B 字母的图标我总觉得有点怪,看起来甚至有点像抖音的图标。

所以我把:

复制代码
Indicator icon

改成了第二个:

墙壁样式的图标

放在 GNOME 顶栏里感觉自然一些。


2. Shuffle wallpaper

打开:

复制代码
Shuffle wallpaper
ON

这样桌面不会永远只显示最新一张图片,而是可以从已经下载的图库里随机选择。

Bing Wallpaper 官方也明确说明,Shuffle 使用的是本地已经保存的图片 collection。


3. Shuffle interval

设置成:

复制代码
on the hour

也就是:

每小时随机换一次桌面。

注意,这里只是从已经下载到本地的图片中随机选择,并不是每小时去 Microsoft 下载一张新的 Spotlight。

这个区别后面还会说到。


4. Wallpaper source

这是这次最重要的设置:

复制代码
Wallpaper source
    Windows Spotlight

到这里,原来由 Damask 负责的 Windows Spotlight 就正式交给 Bing Wallpaper 了。


5. Always export Bing data

我也打开了:

复制代码
Always export Bing data

不过目前我的实际测试中:

复制代码
find ~/Pictures ~/.config ~/.local/share \
  -type f -name 'bing.json' 2>/dev/null

没有找到任何:

复制代码
bing.json

所以现阶段我虽然先把这个选项开着,但不会依赖它做备份或恢复

值得注意的是,Bing Wallpaper 主线目前还有一个处于 Open、bug + confirmed 状态的 #281,报告的正是 JSON Import / Export 按钮没有效果。

不能简单断定开发分支里的 Always export Bing data 一定就是同一个问题,但至少可以说明:

这个扩展目前的 JSON 导入导出部分并不算特别可靠。

所以先当成附加功能看待即可。


七、把 Bing 和 Spotlight 图片分开

我原来已经积累了一些 Bing 每日壁纸,都直接放在:

复制代码
~/Pictures/BingWallpaper/

现在既然已经有两个 Provider,我干脆把它们整理一下。

先建立目录:

复制代码
mkdir -p ~/Pictures/BingWallpaper/bing
mkdir -p ~/Pictures/BingWallpaper/spotlight

然后把之前根目录里的 Bing JPG 移进去:

复制代码
mv ~/Pictures/BingWallpaper/*.jpg \
   ~/Pictures/BingWallpaper/bing/

新的 Spotlight 图片则已经开始出现在:

复制代码
~/Pictures/BingWallpaper/spotlight/

例如:

复制代码
20260819-spotlight-1b5ca31bad5b9bcf2354fbf9_spotlight.jpg
20260819-spotlight-7def0c66deba666e7cf46534_spotlight.jpg
20260819-spotlight-903138814986141b094000d9_spotlight.jpg
20260819-spotlight-c6e26e4918722b32d6e9e5b6_spotlight.jpg

最后目录看起来就比较清楚了:

复制代码
Pictures/
└── BingWallpaper/
    ├── bing/
    │   └── ...
    │
    └── spotlight/
        └── ...

这一步只是我自己的文件整理习惯,并不是安装这个扩展的必须步骤。


八、刚安装时 Spotlight 图片比较少怎么办?

切换到 Windows Spotlight 后,我最开始发现:

本地只有几张 Spotlight 图片。

后来才注意到,点击 GNOME 顶栏中的 Bing Wallpaper 图标,最上面有一个:

复制代码
Refresh Now

可以主动刷新图片源。

刚安装时可以手动点几次:

复制代码
Refresh Now

让扩展继续请求 Windows Spotlight。

这样本地的:

复制代码
~/Pictures/BingWallpaper/spotlight/

就可以较快积累一些图片。

当然,并不是每点一次都一定获得一张完全不同的新图,服务端可能返回重复内容,扩展也可能进行去重。


九、Refresh Now 和 Shuffle wallpaper 不是一回事

这一点我觉得很容易搞混。

我的设置是:

复制代码
Shuffle wallpaper = ON
Shuffle interval  = on the hour

它的意思其实是:

复制代码
本地已经下载的图片
        ↓
每小时随机选择一张
        ↓
设置为桌面

Bing Wallpaper 官方对 Shuffle 的描述也是从 stored Bing images 中随机选择。

而:

复制代码
Refresh Now

才是:

复制代码
访问在线图片源
      ↓
请求 Windows Spotlight
      ↓
取得新的内容

所以简单理解:

复制代码
Refresh Now
    ↓
负责"进货"

Shuffle
    ↓
负责"从库存里随机挑一张"

这样就非常清楚了。


十、为什么 Refresh Now 下面显示 <No refresh scheduled>

我刚切换到 Spotlight 后,顶栏菜单里显示:

复制代码
Refresh Now

<No refresh scheduled>

最开始我还以为是不是哪里没有设置好。

实际上它表达的是:

当前没有安排下一次在线 Refresh 的时间。

这不是 Shuffle 的时间。

因为:

复制代码
Shuffle interval = on the hour

只是每小时切换一次本地图片

并不代表:

复制代码
每小时去 Spotlight 下载一次

Bing Wallpaper 原来的设计本身也强调不会持续轮询 Bing,而是只在预计图片更新时重新尝试下载。

而设置界面也没有提供一个:

复制代码
Refresh Spotlight every ...

这样的自定义选项。

因此现阶段如果想主动获取更多 Spotlight 图片,只能使用顶栏菜单里的 Refresh Now。

现在我的使用方式很简单:

复制代码
想增加 Spotlight 新图
        ↓
Refresh Now

已经有一批本地图
        ↓
Shuffle 每小时随机切换

日常使用完全够了。


十一、目前的实际体验

这样折腾以后,我现在的壁纸链路已经从:

复制代码
Damask
   ↓
Windows Spotlight
   ↓
当前桌面

变成:

复制代码
Windows Spotlight
        ↓
Bing Wallpaper
        ↓
下载到本地
        ↓
Spotlight 图片库
        ↓
Previous / Next
Favorite
Random / Shuffle
        ↓
GNOME Desktop

而 Bing Wallpaper 本身又仍然保留 Bing Image of the Day 这个 Provider。

所以一个 Extension 就可以负责:

复制代码
Bing
+
Windows Spotlight

这正是我想要的效果。

接上篇《Ubuntu 26.04 顶部面板优化:用 Top Panel Logo 补上一个高效入口-CSDN博客》,目前我的 Ubuntu 26.04 桌面分工继续简化。

|------------|-------------------------------|
| 功能 | 工具 |
| 显示缩放 | GNOME Fractional Scaling 125% |
| 应用启动与窗口切换 | Ubuntu Dock |
| 顶部快捷入口 | Top Panel Logo |
| 桌面模糊效果 | Blur My Shell |
| 壁纸下载,展示和切换 | Bing Wallpaper |

下面是随机切换后的几张桌面效果:


十二、如果开发版出了问题怎么恢复?

因为前面已经做了备份,所以回退其实不复杂。

先停掉当前开发版:

复制代码
gnome-extensions disable BingWallpaper@ineffable-gmail.com

删除:

复制代码
rm -rf \
  ~/.local/share/gnome-shell/extensions/BingWallpaper@ineffable-gmail.com

把原来的 Extension 恢复回去:

复制代码
cp -a \
  ~/Backup/BingWallpaper/BingWallpaper@ineffable-gmail.com \
  ~/.local/share/gnome-shell/extensions/

恢复原来的设置:

复制代码
dconf load /org/gnome/shell/extensions/bingwallpaper/ \
  < ~/Backup/BingWallpaper/settings.dconf

然后:

复制代码
gnome-extensions enable BingWallpaper@ineffable-gmail.com

注销并重新登录即可。

如果连 Damask 也想恢复:

复制代码
flatpak install flathub app.drey.Damask

因为之前卸载时没有删除 ~/.var/app/app.drey.Damask 数据,回退也相对容易。


最后

这次折腾最开始只是一个很小的问题:

Damask 刚刚显示的那张好看 Spotlight 照片去哪了?

结果最后变成了:

复制代码
Windows Spotlight
        +
Bing Wallpaper 的本地图库
        +
Favorite
        +
Previous / Next
        +
Shuffle

从功能上来说,这套组合确实比我之前同时使用 Damask 和 Bing Wallpaper 更符合自己的需求。

不过本文最大的前提还是那句话:

目前使用的是尚未正式进入主线的开发代码。

因此我并不建议所有 Ubuntu 用户直接在主力系统照着修改。

我的做法是:

复制代码
VM 测试
   ↓
确认功能
   ↓
准备备份和回退方案
   ↓
再修改 Host

对一个每天真正使用的主力系统来说,我觉得这比"看见新功能就直接装"靠谱得多。

另外,目前这个版本还有两个我观察到的不完善之处:

复制代码
Spotlight 在线自动 Refresh Schedule
    → 还不够完善

JSON Export
    → 实测暂时不能依赖

但它们并不影响核心功能。

目前最实用的组合反而非常简单:

复制代码
Windows Spotlight
+
Refresh Now 获取新图
+
Shuffle 每小时随机看本地图
+
本地自动保存

这已经基本解决了我最初安装 Damask 时想解决的问题。

相关推荐
夜月yeyue42 分钟前
SOME/IP 服务模型
linux·服务器·单片机·安全·车载系统
江湖有缘1 小时前
Docker开源项目: 基于Ubuntu系统部署ExpenseOwl自托管记账工具实战教程
ubuntu·docker·开源
一直C1 小时前
【数据结构】哈希表+算法复杂度与经典排序查找(C语言)
java·linux·开发语言·数据结构·算法·ubuntu·散列表
Kismet_nvi1 小时前
Python 基础核心知识点总结
开发语言·windows·python
λqaq72 小时前
MySQL 数据库基础(2)约束、用户权限、远程连接、外键与 TCP/UDP 理解
linux·数据库·python·tcp/ip·mysql
CedarQR2 小时前
云卓 G20 遥控器 Android 开发实录:从 USB 设备到读取摇杆/按键通道值
android·linux·无人机
lxw20230271162 小时前
k8s的pod管理
linux·容器·kubernetes
IT大白鼠2 小时前
MSF环境搭建全教程(Kali/Windows/Mac/Docker)
windows·macos·msf
qetfw3 小时前
Debian Samba 与 OpenLDAP 统一认证配置
linux·debian