Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Nieuwe achtergrondwisselaar voor XFCE  (gelezen 3329 keer)

Offline Bloom

  • Lid
Nieuwe achtergrondwisselaar voor XFCE
« Gepost op: 2022/04/25, 18:24:44 »
XFCE vanaf v4.10 heeft een eigen automatische achtergrondwisselaar ingebouwd, maar als je ettelijke duizenden wallpapers hebt staan duurt dat letterlijk uren voordat hij dat allemaal verwerkt heeft. Dat is niet goed, en dus heb ik het zelf gedaan. Dit is het script nextwall:
#!/bin/bash
if [[ -n $1 ]]; then
  Script="${0##*/}"
  echo "$Script without parameters = next wallpaper immediately"
  echo "^-- this will show the chosen wallpaper path if executed from a terminal or be silent otherwise"
  echo "To run it every 5 minutes, use crontab: */5 * * * * ~/bin/$Script"
  echo "You can see the chosen wallpaper in $HOME/wp.log"
  echo "$Script with any parameter = this help text"
  exit 0
fi
export DISPLAY=:0.0
Scherm=$(xrandr|grep " connected"|cut -d " " -f 1)
[[ $HOSTNAME == "zilversteen" || $HOSTNAME = "happy" ]] && WP=1 || WP=0
BehangLI=$(xfconf-query -c xfce4-desktop -l|grep "screen0/monitor${Scherm}/workspace${WP}/last-image")
Behangpad="$HOME/Afbeeldingen/DesktopWallpapers/"
Behanglijst="$HOME/wallpaper.list"
Behangkeuze="$HOME/wp.log"
function CurPic () {
  tail -1 <"${Behangkeuze}" 2>/dev/null
}
function NextWP () {
  local PIC
  local picnr
  local Lmax
  local CP="$1"
  local XFPID=$(echo $(ps -C xfce4-session -o pid=))
  find "${Behangpad}" -type f | sort >"${Behanglijst}"
  Lmax=$(wc -l < "${Behanglijst}")
  picnr=0
  [[ -n $CP ]] && picnr=$(grep -n "$CP" <"${Behanglijst}"| head -1 | cut -d ':' -f 1)
  ((picnr++))
  [[ $picnr -gt $Lmax ]] && picnr=1
  PIC=$(awk "NR==$picnr" "${Behanglijst}") #$(shuf -n1 "${Behanglijst}")
  export DISPLAY=:0.0
  [[ ! -t 1 ]] && export $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$XFPID/environ|tr -d '\0')
  xfconf-query -c xfce4-desktop -p "${BehangLI}" -s "${PIC}"
  echo "${PIC}"
}
CurPic >/dev/null
NextWP "$(CurPic)">"${Behangkeuze}"
[[ -t 1 ]] && cat "${Behangkeuze}"

De controle op de hostnames zilversteen of happy is specifiek voor mijn twee desktopsystemen die een iets andere parameter vereisen. Dat moet je natuurlijk aanpassen voor je eigen configuratie en of je maar één desktop van achtergrond wil doen veranderen of meerdere of allemaal.
Om dit script geautomatiseerd te draaien gebruik ik een cronjob. De [[ -t 1 ]] controleert of het script vanuit de terminal gestart werd (indien niet, gaat het om de cronjob). Omdat een cronjob niet het environment van de gebruiker overneemt, moest ik een paar variabelen goed zetten (waaronder DISPLAY) vooraleer het wou werken.
In elk geval, amuseer jullie ermee!