Disable screensaver for Raspberry Pi

Posted by ads' corner on Thursday, 2020-03-19
Posted in [Raspberry-Pi][Software]

The 7" Raspberry display in the kitchen is nice, but unfortunately by default the installation comes with a screensaver enabled. After a while, the display goes dark. No one wants to stare at a blank display, and touch the screen in order to see crucial information.

The Pi Debian distribution uses “xscreensaver” by default, and can be configured using a config file. The file goes into /home/pi/.xscreensaver. The most important settings are:

timeout:	0:10:00
cycle:		0:10:00
lock:		False
lockTimeout:	0:00:00
passwdTimeout:	0:00:30
visualID:	default
verbose:	False
nice:		10
memoryLimit:	0
dpmsEnabled:	False
dpmsQuickOff:	False
dpmsStandby:	2:00:00
dpmsSuspend:	2:00:00
dpmsOff:	4:00:00
mode:		off
selected:	-1

The full file is attached at the end of this blog post. I’m using Ansible to deploy the file to the Pi:

1
2
3
4
5
6
7
8
- name: Copy xscreensaver config to server
  copy:
    src: '{{ playbook_dir }}/files/xscreensaver'
    dest: '/home/pi/.xscreensaver'
    owner: pi
    group: pi
    mode: 0644
  register: xscreensaver_config_installed

The xscreensaver tool also needs to be started once the system boots. That’s a job for systemd, and requires a service file:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[Unit]
Description=XScreenSaver

[Service]
ExecStart=/usr/bin/xscreensaver -nosplash -log /dev/null
ExecStop=killall -15 xscreensaver
Restart=always

[Install]
WantedBy=default.target

Finally the service file needs to be copied to the Pi as well, and the service must be enabled for the user. The copy job for the xscreensaver config file stores the status in $xscreensaver_service_installed, therefore running the enable task can be limited to cases where anything changed before. That saves time during deployment.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
- name: Create systemd user directory
  file:
    path: /home/pi/.config/systemd/user/
    state: directory
    owner: pi
    group: pi
    mode: 0700

- name: Copy systemd service file to server
  copy:
    src: '{{ playbook_dir }}/files/xscreensaver.service'
    dest: '/home/pi/.config/systemd/user/xscreensaver.service'
    owner: pi
    group: pi
    mode: 0600
  register: xscreensaver_service_installed

# this only works for the logged in user
# not for another user, and not if the user is not logged in at all
- name: Enable systemd service for user
  become: true
  become_user: pi
  systemd:
    daemon_reload: yes
    enabled: yes
    scope: user
    state: restarted
    name: xscreensaver.service
  when: xscreensaver_service_installed.changed or xscreensaver_config_installed.changed

After enabling the service, the xscreensaver will no longer switch off the display.

Here is my full .xscreensaver file, as reference:

# XScreenSaver Preferences File
# Written by xscreensaver-demo 5.42 for pi on Mon Jan  6 03:57:42 2020.
# https://www.jwz.org/xscreensaver/

timeout:	0:10:00
cycle:		0:10:00
lock:		False
lockTimeout:	0:00:00
passwdTimeout:	0:00:30
visualID:	default
installColormap:    True
verbose:	False
timestamp:	True
splash:		True
splashDuration:	0:00:05
demoCommand:	xscreensaver-demo
prefsCommand:	xscreensaver-demo -prefs
nice:		10
memoryLimit:	0
fade:		False
unfade:		False
fadeSeconds:	0:00:03
fadeTicks:	20
captureStderr:	True
ignoreUninstalledPrograms:False
font:		*-medium-r-*-140-*-m-*
dpmsEnabled:	False
dpmsQuickOff:	False
dpmsStandby:	2:00:00
dpmsSuspend:	2:00:00
dpmsOff:	4:00:00
grabDesktopImages:  False
grabVideoFrames:    False
chooseRandomImages: False
imageDirectory:

mode:		off
selected:	-1

textMode:	url
textLiteral:	XScreenSaver
textFile:
textProgram:	fortune
textURL:	https://planet.debian.org/rss20.xml

programs:								      \
				maze -root				    \n\
- GL: 				superquadrics -root			    \n\
				attraction -root			    \n\
				blitspin -root				    \n\
				greynetic -root				    \n\
				helix -root				    \n\
				hopalong -root				    \n\
				imsmap -root				    \n\
-				noseguy -root				    \n\
-				pyro -root				    \n\
				qix -root				    \n\
-				rocks -root				    \n\
				rorschach -root				    \n\
				decayscreen -root			    \n\
				flame -root				    \n\
				halo -root				    \n\
				slidescreen -root			    \n\
				pedal -root				    \n\
				bouboule -root				    \n\
-				braid -root				    \n\
				coral -root				    \n\
				deco -root				    \n\
				drift -root				    \n\
-				fadeplot -root				    \n\
				galaxy -root				    \n\
				goop -root				    \n\
				grav -root				    \n\
				ifs -root				    \n\
				unicode -root				    \n\
- GL: 				jigsaw -root				    \n\
				julia -root				    \n\
-				kaleidescope -root			    \n\
- GL: 				moebius -root				    \n\
				moire -root				    \n\
- GL: 				morph3d -root				    \n\
				mountain -root				    \n\
				munch -root				    \n\
				penrose -root				    \n\
- GL: 				pipes -root				    \n\
				rd-bomb -root				    \n\
- GL: 				rubik -root				    \n\
-				sierpinski -root			    \n\
				slip -root				    \n\
- GL: 				sproingies -root			    \n\
				starfish -root				    \n\
				strange -root				    \n\
				swirl -root				    \n\
				triangle -root				    \n\
				xjack -root				    \n\
				xlyap -root				    \n\
- GL: 				atlantis -root				    \n\
				bsod -root				    \n\
- GL: 				bubble3d -root				    \n\
- GL: 				cage -root				    \n\
-				crystal -root				    \n\
				cynosure -root				    \n\
				discrete -root				    \n\
				distort -root				    \n\
				epicycle -root				    \n\
				flow -root				    \n\
- GL: 				glplanet -root				    \n\
				interference -root			    \n\
				kumppa -root				    \n\
- GL: 				lament -root				    \n\
				moire2 -root				    \n\
- GL: 				sonar -root				    \n\
- GL: 				stairs -root				    \n\
				truchet -root				    \n\
-				vidwhacker -root			    \n\
				blaster -root				    \n\
				bumps -root				    \n\
				ccurve -root				    \n\
				compass -root				    \n\
				deluxe -root				    \n\
-				demon -root				    \n\
- GL: 				extrusion -root				    \n\
-				loop -root				    \n\
				penetrate -root				    \n\
				petri -root				    \n\
				phosphor -root				    \n\
- GL: 				pulsar -root				    \n\
				ripples -root				    \n\
				shadebobs -root				    \n\
- GL: 				sierpinski3d -root			    \n\
				spotlight -root				    \n\
				squiral -root				    \n\
				wander -root				    \n\
-				webcollage -root			    \n\
				xflame -root				    \n\
				xmatrix -root				    \n\
- GL: 				gflux -root				    \n\
-				nerverot -root				    \n\
				xrayswarm -root				    \n\
				xspirograph -root			    \n\
- GL: 				circuit -root				    \n\
- GL: 				dangerball -root			    \n\
- GL: 				engine -root				    \n\
- GL: 				flipscreen3d -root			    \n\
- GL: 				gltext -root				    \n\
- GL: 				menger -root				    \n\
- GL: 				molecule -root				    \n\
				rotzoomer -root				    \n\
				speedmine -root				    \n\
- GL: 				starwars -root				    \n\
- GL: 				stonerview -root			    \n\
				vermiculate -root			    \n\
				whirlwindwarp -root			    \n\
				zoom -root				    \n\
				anemone -root				    \n\
				apollonian -root			    \n\
- GL: 				boxed -root				    \n\
- GL: 				cubenetic -root				    \n\
- GL: 				endgame -root				    \n\
				euler2d -root				    \n\
				fluidballs -root			    \n\
- GL: 				flurry -root				    \n\
- GL: 				glblur -root				    \n\
- GL: 				glsnake -root				    \n\
				halftone -root				    \n\
- GL: 				juggler3d -root				    \n\
- GL: 				lavalite -root				    \n\
-				polyominoes -root			    \n\
- GL: 				queens -root				    \n\
- GL: 				sballs -root				    \n\
- GL: 				spheremonics -root			    \n\
-				thornbird -root				    \n\
				twang -root				    \n\
- GL: 				antspotlight -root			    \n\
				apple2 -root				    \n\
- GL: 				atunnel -root				    \n\
				barcode -root				    \n\
- GL: 				blinkbox -root				    \n\
- GL: 				blocktube -root				    \n\
- GL: 				bouncingcow -root			    \n\
				cloudlife -root				    \n\
- GL: 				cubestorm -root				    \n\
				eruption -root				    \n\
- GL: 				flipflop -root				    \n\
- GL: 				flyingtoasters -root			    \n\
				fontglide -root				    \n\
- GL: 				gleidescope -root			    \n\
- GL: 				glknots -root				    \n\
- GL: 				glmatrix -root				    \n\
- GL: 				glslideshow -root			    \n\
- GL: 				hypertorus -root			    \n\
- GL: 				jigglypuff -root			    \n\
				metaballs -root				    \n\
- GL: 				mirrorblob -root			    \n\
				piecewise -root				    \n\
- GL: 				polytopes -root				    \n\
				pong -root				    \n\
				popsquares -root			    \n\
- GL: 				surfaces -root				    \n\
				xanalogtv -root				    \n\
				abstractile -root			    \n\
				anemotaxis -root			    \n\
- GL: 				antinspect -root			    \n\
				fireworkx -root				    \n\
				fuzzyflakes -root			    \n\
				interaggregate -root			    \n\
				intermomentary -root			    \n\
				memscroller -root			    \n\
- GL: 				noof -root				    \n\
				pacman -root				    \n\
- GL: 				pinion -root				    \n\
- GL: 				polyhedra -root				    \n\
- GL: 				providence -root			    \n\
				substrate -root				    \n\
				wormhole -root				    \n\
- GL: 				antmaze -root				    \n\
- GL: 				boing -root				    \n\
				boxfit -root				    \n\
- GL: 				carousel -root				    \n\
				celtic -root				    \n\
- GL: 				crackberg -root				    \n\
- GL: 				cube21 -root				    \n\
				fiberlamp -root				    \n\
- GL: 				fliptext -root				    \n\
- GL: 				glhanoi -root				    \n\
- GL: 				tangram -root				    \n\
- GL: 				timetunnel -root			    \n\
- GL: 				glschool -root				    \n\
- GL: 				topblock -root				    \n\
- GL: 				cubicgrid -root				    \n\
				cwaves -root				    \n\
- GL: 				gears -root				    \n\
- GL: 				glcells -root				    \n\
- GL: 				lockward -root				    \n\
				m6502 -root				    \n\
- GL: 				moebiusgears -root			    \n\
- GL: 				voronoi -root				    \n\
- GL: 				hypnowheel -root			    \n\
- GL: 				klein -root				    \n\
-				lcdscrub -root				    \n\
- GL: 				photopile -root				    \n\
- GL: 				skytentacles -root			    \n\
- GL: 				rubikblocks -root			    \n\
- GL: 				companioncube -root			    \n\
- GL: 				hilbert -root				    \n\
- GL: 				tronbit -root				    \n\
- GL: 				geodesic -root				    \n\
				hexadrop -root				    \n\
- GL: 				kaleidocycle -root			    \n\
- GL: 				quasicrystal -root			    \n\
- GL: 				unknownpleasures -root			    \n\
				binaryring -root			    \n\
- GL: 				cityflow -root				    \n\
- GL: 				geodesicgears -root			    \n\
- GL: 				projectiveplane -root			    \n\
- GL: 				romanboy -root				    \n\
				tessellimage -root			    \n\
- GL: 				winduprobot -root			    \n\
- GL: 				splitflap -root				    \n\
- GL: 				cubestack -root				    \n\
- GL: 				cubetwist -root				    \n\
- GL: 				discoball -root				    \n\
- GL: 				dymaxionmap -root			    \n\
- GL: 				energystream -root			    \n\
- GL: 				hexstrut -root				    \n\
- GL: 				hydrostat -root				    \n\
- GL: 				raverhoop -root				    \n\
- GL: 				splodesic -root				    \n\
- GL: 				unicrud -root				    \n\
- GL: 				esper -root				    \n\
- GL: 				vigilance -root				    \n\
- GL: 				crumbler -root				    \n\
				filmleader -root			    \n\
				glitchpeg -root				    \n\
- GL: 				handsy -root				    \n\
- GL: 				maze3d -root				    \n\
- GL: 				peepers -root				    \n\
- GL: 				razzledazzle -root			    \n\
				vfeedback -root				    \n\

pointerPollTime:    0:00:05
pointerHysteresis:  10
windowCreationTimeout:0:00:30
initialDelay:	0:00:00
GetViewPortIsFullOfLies:False
procInterrupts:	True
xinputExtensionDev: False
overlayStderr:	True
authWarningSlack:   20

Categories: [Raspberry-Pi] [Software]