#!/bin/sh # # Set wallpaper for fluxbox. # # Copyright (c) 2003 Han Boetes <han@mijncomputer.nl> # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the # "Software"), to deal in the Software without restriction, including # without limitation the rights to use, copy, modify, merge, publish, # distribute, sublicense, and/or sell copies of the Software, and to # permit persons to whom the Software is furnished to do so, subject to # the following conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # $Id: fbsetbg,v 1.6 2003/05/12 19:58:47 fluxgen Exp $ # # Portability notes: # To guarantee this script works on all platforms that support fluxbox # please keep the following restrictions in mind: # # don't use [ -e file ], use [ -r file ] # don't use $(), use `` # don't use ~, use ${HOME} # don't use id -u, use whoami # getopts won't work on all platforms, but the config-file can # compensate for that. # wpsetters='Esetroot wmsetbg display qiv xv xsri xli xsetbg' lastwallpaper=${HOME}/.fluxbox/lastwallpaper WHOAMI=`whoami` [ "$WHOAMI" = "root" ] && PATH=/bin:/usr/bin/:/usr/local/bin:/usr/X11R6/bin # Functions display_usage() { cat <<EOF Usage: fbsetbg [ -fcta /path/to/wallpaper ] [ -l ] [ -h ] [ -d ] EOF } display_help() { display_usage cat <<EOF Options: -f Set fullscreen wallpaper -c Set centered wallpaper -t Set tiled wallpaper -a Set maximized wallpaper, preserving aspect. ( if your bgsetter doesn't support this fbsetbg falls back to -f ) -h Display this help -l Set previous wallpaper -d Debug fbsetbg -T Tips Files: ~/.fluxbox/lastwallpaper EOF } display_tips(){ cat<<EOF To replace all occurrences of bsetbg in a file use this command: perl -pi -e 's,([^f]|^)bsetbg,fbsetbg,' If you want the style to set the wallpaper and you want fbsetbg to remember the previous wallpaper put this in your ~/.fluxbox/init session.screen0.rootCommand: fbsetbg -l EOF } # ugly code for solaris compat. find_it() { file=`which $1 2> /dev/null` if [ -x "$file" ]; then if [ $# -gt 1 ]; then shift $* fi return 0 else return 1 fi } message() { xmessage -center "$@" } remembercommand() { #if the $wallpaper path is absolute echo $option > $lastwallpaper case $wallpaper in /*) echo $wallpaper >> $lastwallpaper ;; *) echo $PWD/$wallpaper >> $lastwallpaper ;; esac } debugfbsetbg (){ echo echo $debugstory echo exit 0 } # Find the default wallpapersetter # The precise order is up for debate. for wpsetter in $wpsetters; do if find_it $wpsetter; then WPSETTER=$wpsetter break fi done standardrant="$WPSETTER sets the 'wrong' wallpaper. Transparant apps like aterm and xchat won't work right with it. Consider using wmsetbg (from windowmaker) or Esetroot (from Eterm)" case $WPSETTER in xsri) full='--center-x --center-y --scale-width=100 --scale-width=100' tile='--tile' center='--center-x --center-y' aspect=$full debugstory="This is a RedHat specific app. I can't find docs about it." ;; display) full="`xwininfo -root|grep geom` -window root" tile='-window root' center='-backdrop -window root' aspect=$full debugstory=$standardrant ;; Esetroot) full='-scale' tile='' center='-c' aspect='-fit' debugstory="Esetroot is a nice app. You won't have any problems." ;; wmsetbg) full='-s -S' tile='-t' center='-b black -e' aspect='-b black -a' debugstory="wmsetbg is a nice app. You won't have any problems." ;; xsetbg) tile='-border black' center='-center -border black' aspect='-fullscreen -border black' full=$aspect #broken debugstory="xsetbg is actually xli. The fillscreen option (-f) is broken, defaults to (-a). $standardrant" ;; xli) tile='-onroot -quiet -border black' center='-center -onroot -quiet -border black' aspect='-fullscreen -onroot -quiet -border black' full=$aspect #broken debugstory='The fillscreen option (-f) is broken, defaults to (-a). $standardrant' ;; qiv) full='--root_s' tile='--root_t' center='--root' aspect='-m --root' debugstory=$standardrant ;; xv) full='-max -smooth -root -quit' tile='-root -quit' center='-rmode 5 -root -quit' aspect='-maxpect -smooth -root -quit' debugstory=$standardrant ;; '') message "I can't find an app to set the wallpaper with. You can install one in many many ways but I will give you some simple advice: install Eterm and you're set. Eterm provides Esetroot and thats a great wallpaper setter. I recommend you install the package provided by your distro." exit 1 ;; esac #Get options. getopts ":a:f:c:t:Tdlh-" COMMAND_LINE_ARGUMENT case "${COMMAND_LINE_ARGUMENT}" in d) debugfbsetbg exit 0 ;; a) option=$aspect wallpaper=$OPTARG ;; f) option=$full wallpaper=$OPTARG ;; c) option=$center wallpaper=$OPTARG ;; t) option=$tile wallpaper=$OPTARG ;; l) if [ -r $lastwallpaper ];then option=`head -n1 $lastwallpaper` wallpaper=`tail -n1 $lastwallpaper` else message 'No previous wallpaper recorded.' fi ;; h) display_help ; exit 0 ;; T) display_tips ; exit 0 ;; -) echo "fbsetbg doesn't recognize -- gnu-longopts." echo 'Use fbsetbg -h for a long help message.' display_usage exit 1 ;; *) if [ ! -r "$1" ]; then echo "$1 isn't an existing wallpaper or a valid option." >&2 display_usage exit 1 fi if [ -z "$1" ];then message 'No wallpaper to set' >&2 display_usage exit 1 fi ;; esac option=${option:=$full} wallpaper=${wallpaper:=$1} if [ ! -r "$wallpaper" ];then message "Can't find wallpaper $wallpaper" exit 1 fi $WPSETTER $option "$wallpaper" || message "Something went wrong while setting the wallpaper Run '$WPSETTER $option "$wallpaper"' from an xterm to find out what." #remember previous wallpaper remembercommand