Paperview is a high performance animated desktop background setter for Linux and X11.
Video of the above screenshot: https://www.youtube.com/watch?v=6ZTiA885bWM
make # NOTE: SDL2 is required
./paperview FOLDER SPEED
A lower SPEED number will result in a faster frame rate. Only BMP files are supported.
Paperview supports any number of monitors with its dynamic parameter list:
./paperview FOLDER SPEED X Y W H FOLDER SPEED X Y W H # ... And so on
The values X, Y, W (width), H (height) are integers and represent a rectangle with pixel dimensions specifying where the wallpaper animation will be placed. For instance, with a 1366x768 monitor on the left and a 1920x1080 monitor on the right, the following command will animate the left monitor with a cat animation, and the right, a river animation:
./paperview \
~/scenes/cat 5 0 0 1366 768 \
~/scenes/river 5 1366 0 1928 1080
Append an (&) to a paperview command to have it run as a background process. Eg:
./paperview FOLDER SPEED &
To stop this backgroud process, use killall
:
killall paperview
Creating a custom BMP scene folder from a GIF requires imagemagick. For example, to create a castle scene folder from a castle.gif:
mkdir castle
mv castle.gif castle
cd castle
convert -coalesce castle.gif out.bmp
rm castle.gif
Assuming a scenes folder containing a number of scene folders is present in the home folder,
run the following snippet as a background process within .xinitrc before running startx
,
or simply execute it after X11 is running:
while true
do
scene=$(ls -d ~/scenes/*/ | shuf -n 1)
timeout 600 paperview $scene 5 # See Multi-Monitor Use above for multiple monitor support
done
Running on a Thinkpad X230 from 2012 at 1920x1080 and 60fps with an integrated Intel GPU:
intel_gpu_time ./paperview castle 5
user: 1.904135s, sys: 0.357277s, elapsed: 100.458648s, CPU: 2.3%, GPU: 11.7%
Picom, Compton (and possibly other compositors) seem to already write to the base root X11 window which may overwrite the render done by paperview.
Alternatively, if SDL2 is a problem, or if you are on Windows, two workarounds are currently available:
https://gist.github.com/AlecsFerra/ef1cc008990319f3b676eb2d8aa89903