Live wallpaper for GNOME
Livedesk lets GNOME use a video file as the desktop background. The app writes the video URI to GNOME's normal wallpaper setting, a native GNOME Shell background module renders it behind normal windows, and a small Rust + GStreamer daemon decodes frames. It is not a hidden fullscreen player pretending to be a wallpaper.
in this doc: features · architecture · install · requirements · recovery · usage · development

org.gnome.desktop.background picture-uri setting as the wallpaper source.livedesk is a GTK4/Libadwaita app for picking videos, monitors, service mode, autostart, tray, and playback state.video file
-> livedesk-daemon
-> /run/user/<uid>/livedesk/<monitor>.frame
-> GNOME Shell native background module
-> Clutter actor in GNOME's background manager path
-> Mutter compositorNo pixel data crosses D-Bus. The daemon writes RGBA frames to a memory-mapped file; the native Shell module polls it using a small seqlock header to avoid torn reads. D-Bus carries only coarse control: play, pause, mute, source changes, and frame-path lookup.
support status — the current native setup targets GNOME Shell 40-44 and has been tested on GNOME Shell 43.x. GNOME Shell 45+ changed its JavaScript module layout and needs a separate native overlay before it is treated as supported.
Install the package, run livedesk-setup once, then log out and back in. After that, open livedesk and choose a video.
read before logging out — native setup changes how GNOME Shell loads JavaScript on the next login. Keep the Emergency Recovery commands available in case GNOME shows an unrecoverable error screen.
Good for Ubuntu and Ubuntu-based distributions.
# via PPA
sudo add-apt-repository ppa:tamkungz/stable
sudo apt update
sudo apt install livedesk
livedesk-setup
livedeskUse this for Debian, Ubuntu, or other APT-based systems where you want the package repo directly.
# add the APT repo manually
curl -fsSL https://packages.tamkungz.me/gpg.key \
| sudo gpg --dearmor -o /usr/share/keyrings/tamkungz-archive-keyring.gpg
echo "deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/tamkungz-archive-keyring.gpg] https://packages.tamkungz.me/apt stable main" \
| sudo tee /etc/apt/sources.list.d/tamkungz.list
sudo apt update
sudo apt install livedesk
livedesk-setup
livedesksudo rpm --import https://packages.tamkungz.me/gpg.key
sudo tee /etc/yum.repos.d/tamkungz.repo >/dev/null <<'EOF'
[tamkungz]
name=TamKungZ Packages
baseurl=https://packages.tamkungz.me/rpm/$basearch
enabled=1
gpgcheck=0
repo_gpgcheck=1
gpgkey=https://packages.tamkungz.me/gpg.key
EOF
sudo dnf install livedesk
livedesk-setup
livedeskRPM repository metadata is signed. RPM packages also include detached .asc signatures in the package directory.
./install.sh
livedesk-setup
livedeskLog out and back in once after livedesk-setup. The native setup installs a user-session GNOME Shell JavaScript overlay under ~/.local/share/livedesk/gnome-shell-js and writes ~/.config/environment.d/90-livedesk-gnome-shell.conf.
To build from source. The *-dev packages compile the Rust daemon; the gstreamer1.0-* plugins provide runtime decoders.
sudo apt install cargo rustc pkg-config gjs gir1.2-gtk-4.0 gir1.2-adw-1 \
gir1.2-gtk-3.0 gir1.2-ayatanaappindicator3-0.1 \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libdbus-1-dev \
libunwind-dev libglib2.0-bin \
gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-libav \
totemtotem supplies totem-video-thumbnailer, used for gallery thumbnails when present.gstreamer-1.0.pc or similar .pc files usually mean the runtime is installed but headers aren't.fix for missing headers —
sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libunwind-dev
If GNOME shows Oh no! Something has gone wrong. after native setup, remove the native overlay from a TTY and restart the display manager.
# 1. Open a TTY:
Ctrl+Alt+F3
# 2. Log in with your normal username and password, then run:
rm -f ~/.config/environment.d/90-livedesk-gnome-shell.conf
rm -rf ~/.local/share/livedesk/gnome-shell-js
sudo systemctl restart gdm
# If your distro does not use GDM:
sudo rebootReturn to the graphical session with Ctrl+Alt+F1. On some systems it is Ctrl+Alt+F2 instead.
Open anytime with livedesk. Double-click a video thumbnail, or select a video and click Save and Apply.
| video library | ~/Videos/Livedesk |
| thumbnail cache | ~/.cache/livedesk/thumbnails |
| still fallback cache | ~/.cache/livedesk/stills |
| action log | ~/.cache/livedesk/livedesk.log |
| config file | ~/.config/livedesk/config.json |
livedesk/
├── app/ GTK4/Libadwaita settings app
├── daemon/ Rust + GStreamer decode daemon
├── native/gnome-shell/ GNOME Shell native background overlay
├── native/mutter/ roadmap for a future Mutter-native renderer
├── scripts/ setup, uninstall, package, and Launchpad helpers
└── install.shmanual daemon build
cd daemon
cargo +1.77 build --release --lockedme.tamkungz.Livedeskme.tamkungz.LivedeskApp~/.local/share/livedesk/gnome-shell-js~/.config/livedesk$XDG_RUNTIME_DIR/livedesk