A native Qt 6 / C++ application that automatically sets your desktop wallpaper to the daily Bing image. Supports Linux, macOS, and Windows, and runs entirely from the system tray — no dock icon, no taskbar entry, no window.
- Fetches the latest Bing wallpaper (optionally in UHD resolution) and caches it locally
- Linux: sets wallpaper for GNOME, KDE Plasma, XFCE, MATE, Cinnamon, LXQt/Openbox (
feh), sway - macOS: sets wallpaper via AppleScript (System Events / Finder fallback)
- Windows: sets wallpaper via
SystemParametersInfoW(native WinAPI) - Gallery window — browse every saved wallpaper as thumbnails, set any of them as the current wallpaper, delete one or several (moved to the Trash), copy its description
- Tray menu: Refresh Now, Open Gallery…, Copy Description, Previous Wallpapers (last 8 days), Market, Refresh Interval, Keep Wallpapers (retention), Start at Login, About, Quit
- Desktop notification when the wallpaper changes
- Installs via native packages and can autostart on login for all platforms (toggle from the tray menu)
- No Dock icon (macOS
LSUIElement), no taskbar button (Windows/Linux), tray-only everywhere
Grab the package for your platform from the releases page. All builds are unsigned (no code signing / notarization) — each OS's first-run warning is expected, not a sign of a broken download.
- Download
bing-wallpaper-*-macos.dmgand open it. - Drag
Bing Wallpaper.appinto/Applications(or~/Applications). - Gatekeeper will block the first launch since the app is unsigned. Right-click the app → Open → Open in the confirmation dialog. (Only needed once — subsequent launches are normal double-clicks.)
- Look for the icon in the menu bar — there's no Dock icon or window by design.
- Download
bing-wallpaper-*-windows-setup.exeand run it. - SmartScreen will warn since the installer is unsigned. Click More info → Run anyway.
- Follow the installer; it adds a Start Menu entry and launches the app.
- Look for the icon in the system tray (may be under the "hidden icons" chevron).
- Download
bing-wallpaper-*-linux-x86_64.AppImage(or-linux-arm64...). - Make it executable and run it:
(Or extract the
chmod +x bing-wallpaper-*.AppImage ./bing-wallpaper-*.AppImage
.tar.gzinstead and run thebing-wallpaperbinary inside.) - A tray icon requires a
StatusNotifierItem/AppIndicator host — most desktops (GNOME with an extension, KDE, XFCE, Cinnamon, MATE) provide one out of the box.
On first launch the app registers autostart (see table below) — this can be turned off later from the tray menu's Start at Login checkbox.
| Platform | Binary | Autostart |
|---|---|---|
| Linux | ~/.local/bin/bing-wallpaper |
~/.config/autostart/bing-wallpaper.desktop |
| macOS | wherever the .app is placed (e.g. /Applications) |
~/Library/LaunchAgents/com.bing-wallpaper.plist |
| Windows | installer directory, normally %ProgramFiles%\bing-wallpaper\bing-wallpaper.exe |
HKCU\Software\Microsoft\Windows\CurrentVersion\Run |
Before removing anything, uncheck Start at Login in the tray menu and Quit — this cleanly deregisters autostart through the app itself instead of hand-editing files. Then:
rm -rf "/Applications/Bing Wallpaper.app" # or ~/Applications
rm -f ~/Library/LaunchAgents/com.bing-wallpaper.plist # only if still present
rm -rf ~/Library/Application\ Support/bing-wallpapers # cached wallpapers, optional
rm -f ~/Library/Preferences/com.bing-wallpaper.BingWallpaper.plist # settings, optional# Prefer Windows Settings > Apps > Bing Wallpaper > Uninstall.
Remove-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name BingWallpaper -ErrorAction SilentlyContinue
Remove-Item -Recurse -Force "$env:APPDATA\bing-wallpapers" # cached wallpapers, optional
Remove-Item -Recurse -Force "HKCU:\Software\bing-wallpaper" -ErrorAction SilentlyContinue # settings, optionalrm -f ~/.local/bin/bing-wallpaper
rm -f ~/.config/autostart/bing-wallpaper.desktop # only if still present
rm -rf ~/.local/share/bing-wallpapers # cached wallpapers, optional
rm -rf ~/.config/bing-wallpaper # settings, optional(If installed via AppImage instead of the self-installed copy, just delete the
.AppImage file itself in addition to the above.)
| Platform | Location |
|---|---|
| Linux | ~/.local/share/bing-wallpapers/ |
| macOS | ~/Library/Application Support/bing-wallpapers/ |
| Windows | %APPDATA%\bing-wallpapers\ |
Each image is saved as <date>_<market>_<id>.jpg alongside a <same-name>.json sidecar
holding its title/copyright/market, so the Gallery can show every image's caption without
re-fetching it. Older <date>.jpg files from before this naming scheme are still read fine.
The app runs in the background with no visible window — everything is driven from the system tray icon's menu:
- Refresh Now — fetch and apply today's image immediately
- Open Gallery… — browse every saved wallpaper as thumbnails; set any one as the current wallpaper, delete it (or several at once — moved to the Trash), copy its description, or reveal the save folder. Also opens if you launch the app again while it's already running, or on desktops without a system tray.
- Copy Description — copy the current image's caption/photo credit to the clipboard
- Previous Wallpapers — pick from the last 8 days
- Market — which Bing regional edition to fetch from (
en-US,ja-JP,de-DE, …) - Refresh Interval — how often to check for a new wallpaper (1h–24h, default 5h)
- Keep Wallpapers — retention: forever (default), or auto-prune after 30/90/180 days
- Start at Login — toggle autostart
- Quit
A manual pick (Previous Wallpapers or the Gallery) always sticks — the next automatic refresh only replaces the wallpaper once an actually-newer image is published; it won't silently revert your choice.
Requires Qt 6.5+, CMake ≥ 3.21, and a C++17 compiler.
sudo apt install -y qt6-base-dev libqt6svg6-dev qt6-tools-dev cmake build-essential \
libgl1-mesa-dev libxkbcommon-x11-0
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build buildxcode-select --install # Xcode Command Line Tools
brew install qt cmake
cmake -S . -B build -DCMAKE_PREFIX_PATH=$(brew --prefix qt) -DCMAKE_BUILD_TYPE=Release
cmake --build build
open build/bing-wallpaper.app# Qt 6 (MSVC kit) and CMake installed, then from a "Qt command prompt" or with
# CMAKE_PREFIX_PATH pointing at the Qt install:
cmake -S . -B build -DCMAKE_PREFIX_PATH="C:\Qt\6.7.2\msvc2019_64" -DCMAKE_BUILD_TYPE=Release
cmake --build build --config ReleaseScripts in packaging/ turn a Release build into a distributable package:
packaging/macos/package.sh build <version> # -> bing-wallpaper-<version>-macos.dmg
packaging/linux/package.sh build <version> # -> AppImage + .tar.gz (needs linuxdeploy + linuxdeploy-plugin-qt on PATH)Windows packaging needs a deployed Qt runtime tree before running Inno Setup:
Remove-Item -Recurse -Force build\windeploy -ErrorAction SilentlyContinue
New-Item -ItemType Directory -Force build\windeploy | Out-Null
Copy-Item build\Release\bing-wallpaper.exe build\windeploy\
windeployqt --release --no-translations --dir build\windeploy build\windeploy\bing-wallpaper.exe
ISCC packaging\windows\installer.iss /DAppVersion=1.0.0 /DSourceDir=build\windeployThe deployed tree must contain platforms\qwindows.dll beside the Qt DLLs. A
platform\qwindows.dll directory will not be found by Qt.
None of these are code-signed — see the Gatekeeper/SmartScreen notes above.
cmake --build build
ctest --test-dir build --output-on-failureTests use QtTest and run headless (QT_QPA_PLATFORM=offscreen, no network access).
BingClient's API parsing / URL building / save-path logic is tested directly as pure
functions; WallpaperSetter tests are guarded per-OS (#ifdef Q_OS_MAC/WIN/...) and only
compile the tests relevant to the platform being built.
Image Comics icons created by Design Circle - Flaticon
MIT License.