Skip to content

Instantly share code, notes, and snippets.

@JoshuaJChan
Last active January 2, 2020 05:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JoshuaJChan/989c786379a73a76511cea4d013ae723 to your computer and use it in GitHub Desktop.
Save JoshuaJChan/989c786379a73a76511cea4d013ae723 to your computer and use it in GitHub Desktop.
script to play videos on xscreensaver on i3 to then transition into i3lock (Needs xautolock too)
# XScreenSaver Preferences File
# Written by xscreensaver-demo 5.43 for play on Mon Aug 5 20:23:29 2019.
# https://www.jwz.org/xscreensaver/
timeout: 12:00:00
cycle: 12:00:00
lock: False
lockTimeout: 0:00:00
passwdTimeout: 0:00:30
visualID: default
installColormap: True
verbose: False
timestamp: True
splash: False
splashDuration: 0:00:05
demoCommand: xscreensaver-demo
prefsCommand: xscreensaver-demo -prefs
nice: 10
memoryLimit: 0
fade: True
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: True
grabVideoFrames: False
chooseRandomImages: False
imageDirectory:
mode: one
selected: 0
textMode: file
textLiteral: XScreenSaver
textFile:
textProgram: fortune
textURL: https://en.wikipedia.org/w/index.php?title=Special:NewPages&feed=rss
programs: \
"Screensaver Videos" mpv --really-quiet --no-audio --fs \
--loop=inf --no-stop-screensaver \
--shuffle --wid=$XSCREENSAVER_WINDOW \
$HOME/SSVids/* \n\
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\
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: dnalogo -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\
GL: deepstars -root \n\
GL: gravitywell -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
exec --no-startup-id xautolock -time 30 -locker "killall xscreensaver-co & killall xscreensaver-wa ; ~/989c786379a73a76511cea4d013ae723/xscreensaver-watch.sh & xscreensaver-command -activate" -killtime 30 -killer "systemctl suspend"
#!/bin/bash
# You must have installed xautolock, xscreensaver, i3, i3lock
## Set up xscreensaver daemon ##
cp xscreensaver.service ~/.config/systemd/user/xscreensaver.service
systemctl --user enable xscreensaver
## Create Directory to play selected videos ## NOTE: vids must be short <1min
mkdir ~/SSVids
## Directory to hold Screensaver pictures, must edit xscreensaver-watch.sh to display a specific picture
mkdir ~/SSPics
## xscreensaver config file ##
cp .xscreensaver ~
## Append line to i3 config file ##
cat ~/.config/i3/config
echo "$(cat ~/.config/i3/config addline)" >> ~/.config/i3/config
## Extra: To control xscreensaver using other programs in general, can watch output using this script below: ##
# https://gist.github.com/rduplain/3852987
## Call this command and choose the video folder in:
# xscreensaver-demo
## restart X
#!/bin/sh
#
# Code credited to: https://gist.github.com/rduplain/3852987
#
# Watch xscreensaver and react to status changes.
#
# Include somewhere in X session startup with:
#
# xscreensaver-watch &
lock() {
# Log this somewhere with `date` instead of just echoing.
# echo `uname -n` screen is now blank
# Do other things here, like stop music playback & mute speakers.
:
}
unlock() {
# Log this somewhere with `date` instead of just echoing.
echo `uname -n` screen is now unblank
# Do other things here, like resume music playback & unmute speakers.
i3lock -i "$HOME/SSPics/randompic.png"
}
# The purpose of -watch is to print a line each time the screensaver changes state
# The output is piped into grep where an "UNBLANK" string is search for
# If received, call unlock() and eventually calls i3lock
# grep -q is quiet output, ^ is from beginning of line
$exitCounter = 0
xscreensaver-command -watch | while read watchOutput; do
# echo "$watchOutput" | grep -q '^BLANK' && lock
# echo "$watchOutput" >> ~/tmp.txt
if [$exitCounter = 1]; then
echo "$watchOutput" | grep -q '^UNBLANK' && unlock
break
else
echo "$watchOutput" | grep -q '^UNBLANK' && unlock
fi
((exitCounter++))
done
[Unit]
Description=XScreenSaver
[Service]
ExecStart=xscreensaver
[Install]
WantedBy=default.target
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment