From 88a99772e033da621a684a820ed5e479a71bbf49 Mon Sep 17 00:00:00 2001 From: dabruh <11458706-dabruh@users.noreply.gitlab.com> Date: Thu, 29 Feb 2024 12:30:23 +0100 Subject: [PATCH] feat: switch to XScreenSaver for less OLED burn-in --- .../i3/layers/config.post-main-00-security | 3 +- .config/xscreensaver/config | 298 ++++++++++++++++++ .installer/packages | 4 +- .local/bin/i3exit | 44 +-- .xscreensaver | 1 + 5 files changed, 306 insertions(+), 44 deletions(-) create mode 100644 .config/xscreensaver/config create mode 120000 .xscreensaver diff --git a/.config/i3/layers/config.post-main-00-security b/.config/i3/layers/config.post-main-00-security index 754a625..adfdac4 100644 --- a/.config/i3/layers/config.post-main-00-security +++ b/.config/i3/layers/config.post-main-00-security @@ -2,11 +2,12 @@ exec_always --no-startup-id xss-lock --transfer-sleep-lock -- i3exit lock # lock screen after inactivity +exec_always --no-startup-id pgrep -x xscreensaver || xscreensaver & exec --no-startup-id dmenuxautolock -t $lock_after_min -n $lock_notify_sec bindsym $mod+Ctrl+Shift+l exec --no-startup-id dmenuxautolock -t 0 -n 0 # Run i3hwlock -exec_always --no-startup-id pgrep i3hwlock || i3hwlock +exec_always --no-startup-id pgrep -x i3hwlock || i3hwlock # Start authentication agent exec_always --no-startup-id $auth_agent diff --git a/.config/xscreensaver/config b/.config/xscreensaver/config new file mode 100644 index 0000000..8257df2 --- /dev/null +++ b/.config/xscreensaver/config @@ -0,0 +1,298 @@ +# XScreenSaver Preferences File +# https://www.jwz.org/xscreensaver/ + +timeout: 0:01:00 +cycle: 0:01: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: +nice: 10 +memoryLimit: 0 +fade: True +unfade: False +fadeSeconds: 0:00:02 +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: random +selected: 50 + +textMode: url +textLiteral: XScreenSaver +textFile: +textProgram: fortune +textURL: https://feeds.feedburner.com/ubuntu-news + +programs: \ +- maze -root \n\ +- GL: sphereeversion -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\ + scooter -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\ +- GL: beats -root \n\ +- GL: covid19 -root \n\ +- GL: etruscanvenus -root \n\ +- GL: gibson -root \n\ +- GL: headroom -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 diff --git a/.installer/packages b/.installer/packages index 1fec661..ead926b 100644 --- a/.installer/packages +++ b/.installer/packages @@ -1,12 +1,12 @@ pacman-base:acpi wget curl # Required for setup_system.sh -pacman-any:i3-gaps feh i3status network-manager-applet pasystray xautolock inotify-tools xss-lock noto-fonts-emoji +pacman-any:i3-gaps feh i3status network-manager-applet pasystray xscreensaver xautolock inotify-tools xss-lock noto-fonts-emoji pacman-any:arandr code dunst flameshot kitty ranger scrot thunar tmux ufw vim zsh pacman-any:gst-libav phonon-qt5-gstreamer gst-plugins-good qt5-quickcontrols qt5-graphicaleffects qt5-multimedia pacman-type-hasbattery:brightnessctl aur-any:picom-git sddm-theme-aerial-git apt-base:acpi wget curl ca-certificates gnupg lsb-release # Required for setup_system.sh -apt-any:i3 feh i3status nm-tray pasystray xautolock inotify-tools xss-lock fonts-noto-color-emoji fonts-hack-ttf xclip +apt-any:i3 feh i3status nm-tray pasystray xscreensaver xautolock inotify-tools xss-lock fonts-noto-color-emoji fonts-hack-ttf xclip apt-any:docker-ce docker-ce-cli containerd.io docker-compose-plugin apt-any:arandr chromium-browser codium dunst flameshot kitty ranger scrot thunar tmux ufw vim zsh apt-any:libxext-dev libxcb1-dev libxcb-damage0-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-render-util0-dev libxcb-render0-dev libxcb-randr0-dev libxcb-composite0-dev libxcb-image0-dev libxcb-present-dev libxcb-xinerama0-dev libxcb-glx0-dev libpixman-1-dev libdbus-1-dev libconfig-dev libgl1-mesa-dev libpcre2-dev libpcre3-dev libevdev-dev uthash-dev libev-dev libx11-xcb-dev meson diff --git a/.local/bin/i3exit b/.local/bin/i3exit index c8102e5..67c66c8 100755 --- a/.local/bin/i3exit +++ b/.local/bin/i3exit @@ -7,49 +7,13 @@ # with openrc use loginctl [[ $(cat /proc/1/comm) == "systemd" ]] && logind=systemctl || logind=loginctl -LOCK_SCREEN_BLUR=${LOCK_SCREEN_BLUR:-false} -LOCK_SCREEN_COLOR=${LOCK_SCREEN_COLOR:-29414f} -I3LOCK_RE="i3lock -(c|i) " - -_lock() { - i3lock -c "$LOCK_SCREEN_COLOR" -} - -_unlock() { - pkill -u "$USER" -f "$I3LOCK_RE" -} - -is_locked() { - pgrep -u "$USER" -f "$I3LOCK_RE" >/dev/null -} - -lock() { - local abort=false screen=/tmp/screenshot.png blurred=/tmp/screenshotblur.png - - $LOCK_SCREEN_BLUR && sleep 0.25 && scrot -q 100 $screen # Take screenshot - - _lock # Lock immediately - - if [ -f $screen ]; then - # Blur screenshot - scrot -q 100 $screen || abort=true # Larger file size, but faster - convert -scale 10% -blur 0x1.25 -resize 1000% $screen $blurred || abort=true - rm $screen - - $abort && return 1 - - # Now try to replace the solid color with the blurred image. - _unlock - i3lock -i $blurred || _lock - fi - - # Add a small delay to prevent possible race conditions with suspend - sleep 1 +function lock() { + xscreensaver-command -lock } case "$1" in lock) - is_locked || lock + lock ;; logout) i3-msg exit @@ -58,11 +22,9 @@ case "$1" in dm-tool switch-to-greeter ;; suspend) - export LOCK_SCREEN_BLUR=false lock && $logind suspend ;; hibernate) - export LOCK_SCREEN_BLUR=false lock && $logind hibernate ;; reboot) diff --git a/.xscreensaver b/.xscreensaver new file mode 120000 index 0000000..5a15acb --- /dev/null +++ b/.xscreensaver @@ -0,0 +1 @@ +.config/xscreensaver/config \ No newline at end of file