-
Notifications
You must be signed in to change notification settings - Fork 150
XFCE three monitor script
Peter Levi edited this page Jan 12, 2025
·
1 revision
I am under xubuntu 14.04 using 3 screens (all the same resolution), and I would have 3 different wallpapers, one per screen, using Variety, as I could do using the basic screen manager from xfce4. based on the current dual screen scripts, I succeeded in my configuration using this script (complete set_wallpaper one)
#!/bin/bash # # This script is run by Variety when a new wallpaper is set. # You can use bash, python or whatever suits you for the script. # Here you can put custom commands for setting the wallpaper on your specific desktop environment # or run commands like notify-send to notify you of the change, or you can # run commands that would theme your browser, login screen or whatever you desire. # # PARAMETERS: # $1: The first passed parameter is the absolute path to the wallpaper image to be set as wallpaper # (after effects, clock, etc. are applied). # # $2: The second passed parameter is "auto" when the wallpaper is changed automatically (i.e. regular change), "manual" # when the user has triggered the change or "refresh" when the change is triggered by a change in quotes, clock, etc. # # $3: The third passed parameter is the absolute path to the original wallpaper image (before effects, clock, etc.) # # EXAMPLE: # echo "$1" # /home/username/.config/variety/wallpaper/wallpaper-clock-fac0eef772f9b03bd9c0f82a79d72506.jpg # echo "$2" # auto # echo "$3" # /home/username/Pictures/Wallpapers/Nature/green-tunnel-1920x1080-wallpaper-861.jpg # Here you may apply some additional custom operations on the wallpaper before it is applied. # In the end put the path to the actual final wallpaper image file in the WP variable. # The default is to simply set WP=$1. WP=$1 # Enlightenment # Needs Modules/System/DBus Extension loaded to work if [ "`echo $DESKTOP | grep Enlightenment`" ]; then OUTPUT_DIR="$HOME/.e/e/backgrounds" TEMPLATE=' images { image: "@IMAGE@" USER; } collections { group { name: "e/desktop/background"; data { item: "style" "4"; item: "noanimation" "1"; } max: @WIDTH@ @HEIGHT@; parts { part { name: "bg"; mouse_events: 0; description { state: "default" 0.0; aspect: @ASPECT@ @ASPECT@; aspect_preference: NONE; image { normal: "@IMAGE@"; scale_hint: STATIC; } } } } } } ' OFILE="$OUTPUT_DIR/variety_wallpaper_$RANDOM" DIMENSION="$(identify -format "%w/%h" "$WP")" if [ ! -z "$DIMENSION" ]; then WIDTH=$(echo $DIMENSION | cut -d/ -f1) HEIGHT=$(echo $DIMENSION | cut -d/ -f2) IMAGE="$(echo "$WP" | sed 's/[^[:alnum:]_-]/\\&/g')" if [ -z "$HEIGHT" -o "$HEIGHT" = "0" ]; then ASPECT="0.0" else ASPECT=$(echo "scale=9; $DIMENSION" | bc) fi fi printf "%s" "$TEMPLATE" | \ sed "s/@ASPECT@/$ASPECT/g; s/@WIDTH@/$WIDTH/g; s/@HEIGHT@/$HEIGHT/g; s|@IMAGE@|$IMAGE|g" > "$OFILE.edc" edje_cc "$OFILE.edc" "$OFILE.edj" 2>/dev/null rm "$OFILE.edc" ## Get the current number of virtual desktops desk_x_count=$(enlightenment_remote -desktops-get | awk '{print $1}') desk_y_count=$(enlightenment_remote -desktops-get | awk '{print $2}') ## Set the wallpaper for each virtual desktop for ((x=0; x<$desk_x_count; x++)); do for ((y=0; y<$desk_y_count; y++)); do # -desktop-bg-add OPT1 OPT2 OPT3 OPT4 OPT5 Add a desktop bg definition. # OPT1 = ContainerNo OPT2 = ZoneNo OPT3 = Desk_x. OPT4 = Desk_y. OPT5 = bg file path enlightenment_remote -desktop-bg-add 0 0 "$x" "$y" "$OFILE.edj"; done done # Remove all Variety wallpapers, but the current one find $OUTPUT_DIR -name "variety_wallpaper*.*" | grep -v "$OFILE.edj" | xargs rm exit 0 fi # KDE - User will have to manually choose ~/Pictures/variety-wallpaper/ as a slideshow folder with a short iterval. # Afterwards, with the command below, Variety will just overwrite the single file there when changing the wallpaper # and KDE will refresh it if [ "`env | grep KDE_FULL_SESSION | tail -c +18`" == "true" ]; then mkdir -p "$(xdg-user-dir PICTURES)/variety-wallpaper" cp "$WP" "$(xdg-user-dir PICTURES)/variety-wallpaper/wallpaper-kde.jpg" exit 0 fi # Cinnamon, for cases when it is detectable if [ "$XDG_CURRENT_DESKTOP" == "X-Cinnamon" ]; then gsettings set org.cinnamon.background picture-uri "file://$WP" 2> /dev/null if [ "`gsettings get org.cinnamon.background picture-options`" == "'none'" ]; then gsettings set org.cinnamon.background picture-options 'zoom' fi gsettings set org.cinnamon.desktop.background picture-uri "file://$WP" 2> /dev/null if [ "`gsettings get org.cinnamon.desktop.background picture-options`" == "'none'" ]; then gsettings set org.cinnamon.desktop.background picture-options 'zoom' fi exit 0 fi # Gnome 3, Unity gsettings set org.gnome.desktop.background picture-uri "file://$WP" 2> /dev/null gsettings set com.canonical.unity-greeter background "$WP" if [ "`gsettings get org.gnome.desktop.background picture-options`" == "'none'" ]; then gsettings set org.gnome.desktop.background picture-options 'zoom' fi # XFCE command -v xfconf-query >/dev/null 2>&1 #Try to check if XFCE rc=$? #Adding multimonitor support FOR XFCE4 ONLY CMFILE=~/.config/variety/.changedmonitor #File for the monitor to be changed CM=$(cat $CMFILE) if [[ $rc = 0 ]] ; then for i in $(xfconf-query -c xfce4-desktop -p /backdrop -l|egrep -e "screen.*/monitor$CM.*/last-image"); do xfconf-query -c xfce4-desktop -p $i -n -t string -s "" 2> /dev/null xfconf-query -c xfce4-desktop -p $i -s "" 2> /dev/null xfconf-query -c xfce4-desktop -p $i -s "$WP" 2> /dev/null done fi #Configuring the next monitor to DP0="DisplayPort-0" DP1="DisplayPort-1" DVI="DVI-0" if [[ $CM = $DP0 ]]; then NM="DisplayPort-1" rm $CMFILE echo $NM > $CMFILE elif [[ $CM = $DP1 ]]; then NM="DVI-0" rm $CMFILE echo $NM > $CMFILE elif [[ $CM = $DVI ]];then NM="DisplayPort-0" rm $CMFILE echo $NM > $CMFILE else notify-send "Not the good monitor to be configured" fi # LXDE/PCmanFM if [ "$XDG_CURRENT_DESKTOP" == "LXDE" ]; then pcmanfm --set-wallpaper "$WP" 2> /dev/null fi # Feh - commented, as it may cause problems with Nautilus, (see bug https://bugs.launchpad.net/variety/+bug/1047083) # feh --bg-scale "$WP" 2> /dev/null # MATE after 1.6 gsettings set org.mate.background picture-filename "$WP" 2> /dev/null # MATE before 1.6 mateconftool-2 -t string -s /desktop/mate/background/picture_filename "$WP" 2> /dev/null # Cinnamon after 1.8, before 2.0 gsettings set org.cinnamon.background picture-uri "file://$WP" 2> /dev/null # Cinnamon after 2.0 gsettings set org.cinnamon.desktop.background picture-uri "file://$WP" 2> /dev/null # Gnome 2 gconftool-2 -t string -s /desktop/gnome/background/picture_filename "$WP" 2> /dev/null # Show a notification on wallpaper change (only when the change is automatic). Display the original filename, but the post-effects image. # name=$(echo "$3" | sed 's/\//\n/g'| tail -n 1) # if [ "$2" == "auto" ]; then notify-send --icon "$WP" "Wallpaper changed" "$name" ; fi