set wallpaper


Forum: DSL Tips and Tricks
Topic: set wallpaper
started by: humpty

Posted by humpty on Dec. 01 2007,16:48
It seems xrsi doesn't mind if the wallpaper doesn't have an extension.
This means it's fairly easy to manage your wallpaper.

-----------------
Create this file which will set the new default wallpaper and load it;
/home/dsl/.dfmdesk/wallpaper/set_wallpaper
Quote
#!/bin/bash
cp $1 /home/dsl/.dfmdesk/wallpaper/default
xsri --scale-width=100 --scale-height=100 /home/dsl/.dfmdesk/wallpaper/default

In /home/dsl/.fluxbox.inc (or whatever window manager .inc file) add
this line at the bottom to load the wallpaper at startup;
Quote
xsri --scale-width=100 --scale-height=100 home/dsl/.dfmdesk/wallpaper/default

You can now drag/drop pictures into the set_wallpaper script in your desktop wallpaper folder to load and set the default wallpaper.

In dfm, the wallpaper might disappear if you press 'esc' on a blank desktop or 'update' on an icon. You can create an additional script to reload it;
/home/dsl/.dfmdesk/wallpaper/reload_wallpaper;
Quote
#!/bin/bash
pkill dfm && dfm
sleep 1
xsri --scale-width=100 --scale-height=100 /home/dsl/.dfmdesk/wallpaper/default

-----------------
If you use emelfm, you can also add this user-command e.g "set wallpaper"
Quote
cp %f /home/dsl/.dfmdesk/wallpaper/default


-----------------

Posted by mikshaw on Dec. 01 2007,20:25
I wonder why you need to copy the file?
This single line should do as well as the two you have:
xsri --scale-width=100 --scale-height=100 $1

In any case, that's a handy tip. thanks

Posted by humpty on Dec. 01 2007,22:21
Quote (mikshaw @ Dec. 01 2007,23:25)
I wonder why you need to copy the file?

the file might be from a temporary source,
(and the name needs to be the same for reloading at reboot).

Posted by mikshaw on Dec. 02 2007,03:32
That makes sense.

In situations that reuse the same file, though, I've found that using an environment variable for that file can be very useful. In that way you can prevent the need to edit all scripts that use that file if you happen to change the file path (using the scripts on a system without dfm, for example), and at the same time probably cut the size of your scripts by several bytes.

Posted by roberts on Dec. 02 2007,05:56
So using this scheme every window manager has the same wallpaper?
Posted by jpeters on Dec. 02 2007,16:45
Quote (mikshaw @ Dec. 01 2007,15:25)
I wonder why you need to copy the file?
This single line should do as well as the two you have:
xsri --scale-width=100 --scale-height=100 $1

In any case, that's a handy tip. thanks

I believe the --scale-width=100 --scale-height=100 options are assigned by default.

Edit: after trying it, it seems you need it!

BTW/ very cool! Thanks   (now here's an excellent use for icons /drag & drop...(put the script in the wallpaper folder and its only one desktop icon))

Posted by humpty on Dec. 02 2007,18:43
Quote (roberts @ Dec. 02 2007,08:56)
So using this scheme every window manager has the same wallpaper?

well, every window manager that has the xsri command in the .inc file will load it at X startup.
infact, thinking about it, it's probably best if the .inc file just call set_wallpaper instead of the xsri command.

anyway, i have combined set_wallpaper and reload_wallpaper into one script;
/home/dsl/.dfmdesk/wallpaper/set_wallpaper
Code Sample

#!/bin/bash

#set_wallpaper <file>

#copy the wallpaper to a file called 'default' inside the desktop wallpaper folder and load it.
#if no <file> is given, just reload 'default'

if [ "$1" != "" ]; then
cp $1 /home/dsl/.dfmdesk/wallpaper/default
fi
xsri --scale-width=100 --scale-height=100 /home/dsl/.dfmdesk/wallpaper/default



just double click set_wallpaper to reload it.

Posted by jpeters on Dec. 03 2007,04:19
I'm having lots of fun with this script

< http://jpeters.net/apps/screenshot.png >

Posted by roberts on Dec. 03 2007,07:10
Nice. Seeing various wallpapers, reminds me of the difficulty that I have with my vision and aterm's transparency. While transparency is a cool feature it can, for me, be difficult to read when overlayed on some backgrounds. The transparency can be easily turned off by changing the .Xdefaults file in your home directory.

Aterm*transparent: false

Posted by ^thehatsrule^ on Dec. 03 2007,15:55
re: aterm -tr: for lighter/mixed backgrounds, I like to increase the shade amount i.e. with -sh
Posted by humpty on Dec. 09 2007,06:25
i didn't know xsri was so versatile.
here is the final script to wrap up.

/home/dsl/.dfmdesk/wallpaper/set_wallpaper
Code Sample


#!/bin/bash

#set_wallpaper <file>

#copy the wallpaper to a file called 'default' inside the desktop wallpaper folder and load it.
#if no <file> is given, just reload 'default'

if [ "$1" != "" ]; then
cp $1 /home/dsl/.dfmdesk/wallpaper/default
fi

xsri \
--color=black \
--scale-width=100 --scale-height=100 \
--keep-aspect \
--emblem \
/home/dsl/.dfmdesk/wallpaper/default \

# xsri options
# --scale-width=100 --scale-height=100 \
# --center-x --center-y \
# --keep-aspect \
# --color=black \
# --emblem=<image> \
# --emblem-alpha [0-255] \
# --tile=<image> \
# --tile-alpha [0-255] \
# --emboss \
# --geometry=[wxh][+x+y] \
# --color=#226622 \
# --color2=black \
# --vgradient \
# --hgradient \


drag the file from a dfm folder onto the set_wallpaper icon.

and don't forget to call set_wallpaper from your window manager .inc file for startup.

Posted by humpty on Jan. 01 2008,03:57
Below is a lua version of my wallpaper/background loader I did over the hols (yeh yeh, you can tell I don't have a life).

I may have gone a bit overboard here with the dragNdrop concept but basically set_wallpaper now allows commands either embedded in the filename or solo dragNdrop commands.

So you can drop files named e.g mypic--reset--full-screen--keep-aspect.jpg

Or you can individually dragNdrop e.g
mypic.jpg
++full_screen
++keep-aspect

or highlight a few ++cmds to drop.

The commands accumalate and are saved to default.opts and re-used until a '++reset' or '--reset' is issued.

Just put this file in /home/dsl/.dfmdesk/wallpaper folder and run 'set_wallpaper __make' to make the solo (++)commands.

Read the end of the file to see the commands supported.

Also include '/home/dsl/.dfmdesk/wallpaper/set_wallpaper' in .xinitrc before the last line to load wallpaper at boot.

(the default wallpaper is now called 'current')

Code Sample

#!/bin/lua

-- set_wallpaper [file] [file--with-commands] [++solo-commands]

-- current pic is called 'current'
-- use cmd '++make' to make solo cmd files for dragNdrop
-- last settings are kept in 'default.opts', use cmd '++reset' to clear
-- --------------------------------------------------------------------------
-- functions

function reset_defaults ()
-- note: if you edit these defaults, required is a space before the cmd
scalex  = ""
scaley  = ""
aspect  = ""
centerx = ""
centery = ""
color   = ""
color2  = ""
grad    = ""
tile    = ""
opts    = ""
end

function process_cmds (cmd)
-- tailored cmds
if (string.find (cmd, "--reset")) then  
 reset_defaults ()
 print ("defaults reset")
end
if (string.find (cmd, "--full%-screen")) then
scalex=" --scale-width=100"
scaley=" --scale-height=100"
end
if (string.find (cmd, "--full%-x"))    then scalex=" --scale-width=100" end
if (string.find (cmd, "--full%-y"))    then scaley=" --scale-height=100" end
if (string.find (cmd, "--black"))    then color= " --color=black" end

-- standard xsri cmds (no parameters)
if (string.find (cmd, "--keep%-aspect")) then aspect  = " --keep-aspect" end
if (string.find (cmd, "--center%-x"))    then centerx = " --center-x" end
if (string.find (cmd, "--center%-y"))    then centery = " --center-y" end
if (string.find (cmd, "--hgradient"))    then grad    = " --hgradient" end
if (string.find (cmd, "--vgradient"))    then grad    = " --vgradient" end
if (string.find (cmd, "--tile"))      then tile    = " --tile" end

-- cmds which require parameters
s,e,x = string.find (cmd, "--scale%-width=(%d+)")
if x then scalex = " --scale-width="..x end
s,e,y = string.find (cmd, "--scale%-height=(%d+)")
if y then scaley = " --scale-height="..y end

s,e,c = string.find (cmd, "--color=([#%w]+)")
if c then color = " --color="..c end
s,e,c = string.find (cmd, "--color2=([#%w]+)")
if c then color2 = " --color2="..c end

end --process_cmds
-- --------------------------------------------------------------------------
-- main

wcmd = ""
i=1
while arg[i] ~= nil do
wcmd = wcmd.." "..arg[i]
i=i+1
end

if wcmd == " ++make" then
os.execute ("touch ++black ++full-screen ++full-x ++full-y ++keep-aspect ++center-x ++center-y ++tile ++reset")
os.exit(0)
end

-- are these solo cmds or embedded in the filename ?
if (string.find (wcmd, "++") or wcmd == "") then
wcmd = string.gsub (wcmd, "++", "--")
solo=true
else solo=false
end

-- load any filename, and copy it to 'current'
if not solo then
os.execute ("cp "..wcmd.." /home/dsl/.dfmdesk/wallpaper/current")
else print ("solo")
end

reset_defaults ()

--load default opts
fin=io.open("/home/dsl/.dfmdesk/wallpaper/default.opts", "r")
opts=fin:read()
fin:close ()

-- process default opts
print ("defaults:"..opts)
process_cmds (opts)

-- add input opts
print ("inputs  :"..wcmd)
process_cmds (wcmd)

opts=scalex..scaley..aspect..centerx..centery..color..color2..grad..tile
print ("final   :"..opts)

-- load current pic
os.execute ("xsri "..opts.." /home/dsl/.dfmdesk/wallpaper/current")

-- save as default opts
fout=io.open("/home/dsl/.dfmdesk/wallpaper/default.opts", "w")
fout:write (opts, "\n")
fout:close ()

--tailored command options
-- ++full-screen
-- ++full-x
-- ++full-y
-- ++black

-- xsri options implemented (see xsri --help for reference)
-- --scale-width=100 --scale-height=100
-- --center-x --center-y
-- --keep-aspect
-- --tile
-- --color=#226622 --color2=black
-- --vgradient --hgradient

-- xsri options not yet implemented
-- --emblem=file
-- --emblem-alpha [0-255]
-- --geometry=[wxh][+x+y]
-- --tile-alpha [0-255]
-- --emboss

Powered by Ikonboard 3.1.2a
Ikonboard © 2001 Jarvis Entertainment Group, Inc.