mirror of
https://github.com/Almamu/linux-wallpaperengine.git
synced 2025-09-14 13:56:48 +08:00

* feat: added glslang and spirv-core for handling shaders, should provide better results than current systems
* fix: brought back proper include placement, should fix some shaders not working
* chore: dial down required version to 330
* fix: crash when taking screenshot
* fix: use glReadnPixels for X11 copying to be more memory safe
* chore: reverted part of last commit
* chore: delay initialization of browser until it's used once
* chore: do not initialize web browser unless explicitly needed
* chore: cleanup filesystem functions to use containers directly
* chore: memory cleanup fixes
* chore: fix glReadPixels for older opengl versions
* chore: remove shader patches as they shouldn't be needed anymore
* chore: initialise variables
* chore: update deps, actions and readme
* chore: make use of custon glslang and SPIRV-Cross
* Revert "chore: update deps, actions and readme"
This reverts commit c3fbc9340b
.
* chore: update actions to include submodules
* chore: do not depend on SPIRV-Tools
* fix: added log10 macro
* feat: update to latest glslang (swizzle and vec2/vec3/vec4 implicit casting to float)
* revert: delayed initialization of cef was causing issues, reverted
* chore: re-organized web wallpaper support to use custom scheme and better handle multiprocessing
* chore: make use of external repos for all deps instead of copying things manually and more cleanup work
* chore: wrong include file used in CGLSLContext.cpp
* chore: fix wayland generation folder not being present
* feat: somewhat support TEXB0004
* chore: improve function call matching and fallback to more lax method if no function is found
* chore: changed shader compilation slightly so they're passed onto glsl just once
* feat: swap android's fft implementation (which wasn't right) with kissfft's and fix update frequency issues
* chore: added missing dependency
* chore: added missing dep to PKGBUILD
* feat: add testing tools to run over all backgrounds and getting output data
* chore: jail CDirectory to the basepath and prevent accessing data outside of the main directory
* chore: process script now scales the previews so the html file is not too big
* chore: add showcase gallery to the README.md
* chore: update README
* chore: some readability improvements on code
* chore: fix segfault after code cleanup
* chore: make use of std::filesystem::canonical instead of basepath and slight typing changes on texture objects
* chore: fix path detection being wrong, make use of std::filesystem::path on CContainers
* chore: cleanup of the core part of the project
* chore: bring back std::move and make some methods const where it makes sense
* feat: added a pretty printer for easier debug and comparison between different versions of linux-wallpaperengine
* chore: refactored shader compilation code once more to be easier to follow and fixed the longstanding bug of #include not being added in the right place
* chore: more debug info for the pretty printer
* fix: some textures applied were not the right ones
* chore: properly set combos based on textures
* feat: take into account project properties for shader values
feat: proper parsing of combo values in shaders
fix: shader units weren't linked as they should
chore: more support for detecting shader things automatically
* fix: blending mode for passes using the wrong value
fix: shader uniforms from project properties should now be taken into account
* chore: use ubuntu 22 and ubuntu 24 as builders, ubuntu 20 is retired
* chore: use ubuntu 22 and ubuntu 24 as builders, ubuntu 20 is retired
* chore: hopefully fix github actions build
* refactor: simplified working with properties, constants and shader variables
* chore: remove a couple of todos that aren't needed anymore
* chore: simplify the texture detection a little bit, still work left to do
* fix: regression on texture setup not working properly
* fix: filenames with dots were not being handled properly
* chore: remove some uselesss messages
* chore: fixed std::string json values not casting anything to it as it was assumed
* fix: null user value for constants means it cannot be modified by the user
* chore: remove exception when a shader constant uses a non-existant property
* fix: angles can be an user setting too, also added detection for animation frames to show a warning
* fix: ensure variable information is not commented out by a line comment
* fix: shader includes weren't being processed properly
* chore: update to latest glslang and SPIRV-Cross to support non-integer array indices
* chore: make use of auto where it made sense
* feat: make use of in/out promotion on glslang-WallpaperEngine
feat: use glslang-WallpaperEngine linkin process as an extra validation
* chore: improve scripts for running the app
* chore: hide background structure dump behind a command-line switch
* chore: rewritten bloom effect as a json object inside C++ so it's easier to follow
* chore: removed deprecated parameters and switched to argparse instead of getopt
fix: clamping mode wasn't applied by background properly, only globally
* chore: removed help prompt from the output unless actually required
* fix: web subprocesses weren't launching due to parameter's parsing, temporal fix
* feat: added material command copy support
* feat: do not initialize some subsystems if they're disabled or not used by backgrounds
* chore: ignore type in combos as only seems to be used in the editor
* chore: update to latest glslang-WallpaperEngine changes
* chore: delete uniforms if they already exist before setting
* chore: more cleanup and fixes
* chore: more cleanup and fixes
* chore: more cleanup and fixes
* chore: update file functions to make use of shared_ptr/unique_ptr instead of copying things around
* chore: more changes to unique_ptr and shared_ptr
* chore: more changes to unique_ptr and shared_ptr
* chore: more changes to unique_ptr and shared_ptr
feat: improved render initialization process to make it easier and simpler to add new drivers (no more #ifdef in CWallpaperApplication.cpp)
* chore: change all is/as castings to use typeid so no string comparison takes place
* chore: more cleanup, default initialization of values wherever possible
* chore: moved more things to std::unique_ptr and std::shared_ptr
* chore: moved more things to std::unique_ptr and std::shared_ptr
* fix: browser context usage crashed the app
* chore: the setting controls fullscreen detection creation the same way audio works
* fix: ensure that at least one frame is rendered before detecting fullscreen windows
* chore: slight changes to output and documentation to properly reflect current build configuration
* chore: fix mipmap texture creation
* chore: fix pass uniforms not taking into account fragment shader's uniforms
chore: keep processed code in the shader sent to opengl so it appears on RenderDoc
* chore: formating issues by codefactor
* chore: do not use new to allocate the pretty printer
* fix: strchr wasn't properly done for window geometry
* chore: add recording mode for status page generation
* chore: update .gitignore
* chore: update script to make use of video generation instead of the old python scripts
* chore: also copy project.json so it can be used on the site too
* fix: regression on invisible images not being rendered
* feat: add option to disable camera parallax
* chore: add the reversing tools I have locally
* chore: mention some of the common issues in the README.md
* chore: take submodules into account for archlinux
* chore: missed cd "$pkgname" in arch's prepare step
295 lines
9.3 KiB
Markdown
295 lines
9.3 KiB
Markdown
<p align="center">
|
||
<a href="https://github.com/Almamu/linux-wallpaperengine/blob/main/LICENSE"><img src="https://img.shields.io/github/license/Almamu/linux-wallpaperengine" /></a>
|
||
<a href="https://github.com/Almamu/linux-wallpaperengine/actions?query=branch%3Amain"><img src="https://img.shields.io/github/actions/workflow/status/Almamu/linux-wallpaperengine/cmake.yml?branch=main" /></a>
|
||
<a href="https://github.com/Almamu/linux-wallpaperengine/pulse"><img src="https://img.shields.io/tokei/lines/github/Almamu/linux-wallpaperengine" /></a>
|
||
<a href="https://www.codefactor.io/repository/github/almamu/linux-wallpaperengine"><img src="https://img.shields.io/codefactor/grade/github/Almamu/linux-wallpaperengine" /></a>
|
||
<a href="https://github.com/Almamu/linux-wallpaperengine/graphs/commit-activity"><img src="https://img.shields.io/github/commit-activity/m/Almamu/linux-wallpaperengine" /></a>
|
||
<a href="https://github.com/Almamu/linux-wallpaperengine/graphs/contributors"><img src="https://img.shields.io/github/contributors/Almamu/linux-wallpaperengine" /></a>
|
||
<a href="https://github.com/Almamu/linux-wallpaperengine/issues"><img src="https://img.shields.io/github/issues-raw/Almamu/linux-wallpaperengine" /></a>
|
||
<a href="https://github.com/Almamu/linux-wallpaperengine/issues?q=is%3Aissue+is%3Aopen+label%3A%22help%20wanted%22"><img src="https://img.shields.io/github/issues/Almamu/linux-wallpaperengine/help%20wanted?color=green" alt="help wanted"></a>
|
||
<a href="https://wpengine.alma.mu/"><img src="https://img.shields.io/badge/showcase_gallery-blue" alt="Compatibility gallery" /></a>
|
||
</p>
|
||
|
||
# 🖼️ Linux Wallpaper Engine
|
||
|
||
Bring **Wallpaper Engine**-style live wallpapers to Linux! This project allows you to run animated wallpapers from Steam’s Wallpaper Engine right on your desktop.
|
||
|
||
> ⚠️ This is an educational project that evolved into a functional OpenGL-based wallpaper engine for Linux. Expect some limitations and quirks!
|
||
|
||
---
|
||
|
||
## 📦 System Requirements
|
||
|
||
To compile and run this, you'll need:
|
||
|
||
- OpenGL 3.3 support
|
||
- CMake
|
||
- LZ4, Zlib
|
||
- SDL2
|
||
- FFmpeg
|
||
- X11 or Wayland
|
||
- Xrandr (for X11)
|
||
- GLFW3, GLEW, GLUT, GLM
|
||
- MPV
|
||
- PulseAudio
|
||
- FFTW3
|
||
|
||
Install the required dependencies on Ubuntu/Debian-based systems:
|
||
|
||
### Ubuntu 22.04
|
||
```bash
|
||
sudo apt-get update
|
||
sudo apt-get install build-essential cmake libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev libgl-dev libglew-dev freeglut3-dev libsdl2-dev liblz4-dev libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libxxf86vm-dev libglm-dev libglfw3-dev libmpv-dev mpv libmpv1 libpulse-dev libpulse0 libfftw3-dev
|
||
```
|
||
|
||
### Ubuntu 24.04
|
||
```bash
|
||
sudo apt-get update
|
||
sudo apt-get install build-essential cmake libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev libgl-dev libglew-dev freeglut3-dev libsdl2-dev liblz4-dev libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libxxf86vm-dev libglm-dev libglfw3-dev libmpv-dev mpv libmpv2 libpulse-dev libpulse0 libfftw3-dev
|
||
```
|
||
|
||
---
|
||
|
||
## 🐧 Arch Linux Users
|
||
|
||
You can install this directly from the AUR using your favorite AUR helper:
|
||
|
||
```bash
|
||
yay -S linux-wallpaperengine-git
|
||
```
|
||
|
||
> This installs the latest development version.
|
||
|
||
**Note:** You’ll still need assets from the official Wallpaper Engine (via Steam). See below for details.
|
||
|
||
---
|
||
|
||
## 🚀 Getting Started
|
||
|
||
### 1. Get Wallpaper Engine Assets
|
||
|
||
You **must own and install Wallpaper Engine** via Steam. This provides the required assets used by many backgrounds.
|
||
|
||
Good news: **you usually don’t need to copy anything manually.** The app will automatically look in these common install paths:
|
||
|
||
```
|
||
~/.steam/steam/steamapps/common
|
||
~/.local/share/Steam/steamapps/common
|
||
~/.var/app/com.valvesoftware.Steam/.local/share/Steam/steamapps/common
|
||
~/snap/steam/common/.local/share/Steam/steamapps/common
|
||
```
|
||
|
||
> ✅ If Wallpaper Engine is installed in one of these paths, the assets will be detected automatically!
|
||
|
||
---
|
||
|
||
#### ❗ If Assets Aren’t Found Automatically
|
||
|
||
You can copy the `assets` folder manually:
|
||
|
||
1. In Steam, right-click **Wallpaper Engine** → **Manage** → **Browse local files**
|
||
2. Copy the `assets` folder
|
||
3. Paste it into the same folder where the `linux-wallpaperengine` binary is located
|
||
|
||
---
|
||
|
||
### 2. Build from Source
|
||
|
||
Clone the repo:
|
||
|
||
```bash
|
||
git clone --recurse-submodules https://github.com/Almamu/linux-wallpaperengine.git
|
||
cd linux-wallpaperengine
|
||
```
|
||
|
||
Build it:
|
||
|
||
```bash
|
||
mkdir build && cd build
|
||
cmake ..
|
||
make
|
||
```
|
||
|
||
Once the build process is finished, this should create a new `output` folder containing the app and all the required
|
||
support files to run.
|
||
|
||
> ✅ Remember: Place the `assets` folder next to the built binary if it isn’t detected automatically.
|
||
|
||
---
|
||
|
||
## 🧪 Usage
|
||
|
||
Basic syntax:
|
||
|
||
```bash
|
||
./linux-wallpaperengine [options] <background_id or path>
|
||
```
|
||
|
||
You can use either:
|
||
- A Steam Workshop ID (e.g. `1845706469`)
|
||
- A path to a background folder
|
||
|
||
---
|
||
|
||
### 🔧 Common Options
|
||
|
||
| Option | Description |
|
||
|--------|-------------|
|
||
| `--silent` | Mute background audio |
|
||
| `--volume <val>` | Set audio volume |
|
||
| `--noautomute` | Don't mute when other apps play audio |
|
||
| `--no-audio-processing` | Disable audio reactive features |
|
||
| `--fps <val>` | Limit frame rate |
|
||
| `--window <XxYxWxH>` | Run in windowed mode with custom size/position |
|
||
| `--screen-root <screen>` | Set as background for specific screen |
|
||
| `--bg <id/path>` | Assign a background to a specific screen (use after `--screen-root`) |
|
||
| `--scaling <mode>` | Wallpaper scaling: `stretch`, `fit`, `fill`, or `default` |
|
||
| `--clamping <mode>` | Set texture clamping: `clamp`, `border`, `repeat` |
|
||
| `--assets-dir <path>` | Set custom path for assets |
|
||
| `--screenshot <file>` | Save screenshot (PNG, JPEG, BMP) |
|
||
| `--list-properties` | Show customizable properties of a wallpaper |
|
||
| `--set-property name=value` | Override a specific property |
|
||
| `--disable-mouse` | Disable mouse interaction |
|
||
| `--disable-parallax` | Disable parallax effect on backgrounds that support it |
|
||
| `--no-fullscreen-pause` | Prevent pausing while fullscreen apps are running |
|
||
|
||
---
|
||
|
||
### 💡 Examples
|
||
|
||
#### Run a background by ID
|
||
```bash
|
||
./linux-wallpaperengine 1845706469
|
||
```
|
||
|
||
#### Run a background from a folder
|
||
```bash
|
||
./linux-wallpaperengine ~/backgrounds/1845706469/
|
||
```
|
||
|
||
#### Assign backgrounds to screens with scaling
|
||
```bash
|
||
./linux-wallpaperengine \
|
||
--scaling stretch --screen-root eDP-1 --bg 2667198601 \
|
||
--scaling fill --screen-root HDMI-1 --bg 2667198602
|
||
```
|
||
|
||
#### Run in a window
|
||
```bash
|
||
./linux-wallpaperengine --window 0x0x1280x720 1845706469
|
||
```
|
||
|
||
#### Limit FPS to save power
|
||
```bash
|
||
./linux-wallpaperengine --fps 30 1845706469
|
||
```
|
||
|
||
#### Take a screenshot
|
||
```bash
|
||
./linux-wallpaperengine --screenshot ~/wallpaper.png 1845706469
|
||
```
|
||
|
||
This can be useful as output for pywal or other color systems that use images as basis to generate a set of colors
|
||
to apply to your system.
|
||
|
||
#### View and change properties
|
||
```bash
|
||
./linux-wallpaperengine --list-properties 2370927443
|
||
```
|
||
|
||
The output includes all the relevant information for each of the different properties:
|
||
```
|
||
barcount - slider
|
||
Description: Bar Count
|
||
Value: 64
|
||
Minimum value: 16
|
||
Maximum value: 64
|
||
Step: 1
|
||
|
||
bloom - boolean
|
||
Description: Bloom
|
||
Value: 0
|
||
frequency - combolist
|
||
Description: Frequency
|
||
Value: 2
|
||
Posible values:
|
||
16 -> 1
|
||
32 -> 2
|
||
64 -> 3
|
||
|
||
owl - boolean
|
||
Description: Owl
|
||
Value: 0
|
||
rain - boolean
|
||
Description: Rain
|
||
Value: 1
|
||
schemecolor - color
|
||
Description: ui_browse_properties_scheme_color
|
||
R: 0.14902 G: 0.23137 B: 0.4 A: 1
|
||
visualizer - boolean
|
||
Description: <hr>Add Visualizer<hr>
|
||
Value: 1
|
||
visualizercolor - color
|
||
Description: Bar Color
|
||
R: 0.12549 G: 0.215686 B: 0.352941 A: 1
|
||
visualizeropacity - slider
|
||
Description: Bar Opacity
|
||
Value: 1
|
||
Minimum value: 0
|
||
Maximum value: 1
|
||
Step: 0.1
|
||
|
||
visualizerwidth - slider
|
||
Description: Bar Spacing
|
||
Value: 0.25
|
||
Minimum value: 0
|
||
Maximum value: 0.5
|
||
Step: 0.01
|
||
```
|
||
|
||
Any of these values can be modified with the --set-property switch. Say you want to enable the bloom in this background, you would do so like this:
|
||
```
|
||
./linux-wallpaperengine --set-property bloom=1 2370927443
|
||
```
|
||
|
||
---
|
||
|
||
## 🧪 Wayland & X11 Support
|
||
|
||
- **Wayland**: Works with compositors that support `wlr-layer-shell-unstable`.
|
||
- **X11**: Requires XRandr. Use `--screen-root <screen_name>` (as shown in `xrandr`).
|
||
|
||
> ⚠ For X11 users: Currently doesn't work if a compositor or desktop environment (e.g. GNOME, KDE, Nautilus) is drawing the background.
|
||
|
||
---
|
||
|
||
## 🌈 Example Backgrounds
|
||
|
||

|
||

|
||
|
||
## 🪲 Common issues
|
||
### Black screen when setting as screen's background
|
||
This can be caused by a few different things depending on your environment and setup.
|
||
|
||
### X11
|
||
Common symptom of a compositor drawing to the background which prevents Wallpaper Engine from being properly visible.
|
||
The only solution currently is disabling the compositor so Wallpaper Engine can properly draw on the screen
|
||
|
||
### NVIDIA
|
||
Some users have had issues with GLFW initialization and other OpenGL errors. These are generally something that's
|
||
worth reporting in the issues. Sometimes adding this variable when running Wallpaper Engine helps and/or solves
|
||
the issue:
|
||
```bash
|
||
__GL_THREADED_OPTIMIZATIONS=0 linux-wallpaperengine
|
||
```
|
||
|
||
We'll be looking at improving this in the future, but for now it can be a useful workaround.
|
||
|
||
---
|
||
|
||
## 🙏 Special Thanks
|
||
|
||
- [RePKG](https://github.com/notscuffed/repkg) – for texture flag insights
|
||
- [RenderDoc](https://github.com/baldurk/renderdoc) – the best OpenGL debugger out there!
|