# [SCRIPT] fond d'ecran fvwm, fluxbox et xfce4 (updated bis)

## kwenspc

version 0.6

Voilà, je viens de coder rapido un ptit script et je tenais à vous en faire part  :Smile: 

Ce dernier est parti d'un post précédent 

(ici)

Je me demandais si il existait un programme qui sache gérer les fonds d'écrans sous fvwm (et consors) en mode xinerama (double écran, je n'ai pas géré plus de 2 écrans). Je voulais en effet avoir un fond d'écran différent sur chaque écrans et pouvoir les changer de manière automatique.

N'ayant pas de réponse positive j'ai fais ce script.

NOUVEAU :Il est dorénavant codé en python, vu que c'est mon premier programme en python, soyez indulgents et faites moi part de vos remarques au niveau du code (bug, mauvais syntaxe, pas tres belle construction etc... ). De plus en ligne de code il est à peine plus long (301 lignes) que le script Bash original et il a une fonction en plus! 

UPDATED BIS : Bon j'ai ajouté une petite gestion de signaux afin de commander le script pour qu'il change de fond si celui qu'il nous a mis ne nous interesse pas (./wp2d -c) et aussi pour lui dire de quitter proprement (./wp2d -q). Ah aussi, désormais il teste sir le repertoire temporaire où il va traiter les images existe bel et bien. voili voilou

Son nom: wp2d.py

Ce qu'il sait faire:

- afficher 1 fond pour 1 écran (wouaaaah)

- afficher 1 fond pour 2 écrans (c'est mieux)

- afficher 1 fond sur chaque écran 1 fois

- afficher 1 fond sur chaque écran selon un temps d'attente définis (toute les 10minutes par ex)

- le fond peut-être le même sur chaque écran

- le fond peut-être différent sur chaque écran

- l'affichage peut-être séquentiel (les uns après les autres selon leur rangement dans le repertoire)

- l'affichage peut-être "aléatoire" 

- il peut utiliser Esetroot ou fbsetbg (j'en ai pas essayé d'autres)

NOUVEAU : - il peut respecter l'échelle des images à afficher (merci Prosper4tie pour l'idée!)

Ce qu'il ne sait pas faire:

- afficher 1 fond pour plus de 2 écrans

- faire le café...   :Laughing: 

[old]Au début j'avais commencer à le faire en Perl, langage que je connais un peu plus que le Bash-script.

Mais finalement j'ai choisi Bash car au moins tout le monde l'a ce fameux Bash.

Cependant, n'étant pas un crack en Bash-script (vous le verrez vous même), il est tout à fait possible que des erreurs ce soient glissées dans ce script et/ou que le code soit moche;

je ne verrais aucuns inconvénients à ce que vous me fassiez des remarques donc![/old]

 nouveau :J'ai cette fois-ci choisis le python non seuleument parce que je suis en train de l'apprendre, mais aussi parce qu'il est plutôt simple et en plus là encore  : tout les gentooïste l'ont alors pourquoi s'en priver!

En espérant qu'il servira à d'autres qu'à moi  :Smile: 

Note : voici un exemple d'utilisation que j'en fais 

wp2d.py -w /home/fond/ -1 1152x864 -2 1280x1024 -t 30 -m rand -d diff

(vous pouvez mettre une telle commande dans le .fluxbox/startup par exemple)

Attention : l'option "-t" ne prend plus que des temps en secondes donc ne mettez qu'un chiffre entier seul ça suffira.

Maintenant le code :

```

#!/usr/bin/python

#

#   wp2d.py

#

#   WP2D

#

#   WallPaper

#   To

#   Display

#

#   version 0.6

#   python version

#

#   by kwenspc (for gentoo frensh's forum)

#

import os, sys, commands, getopt, time, random, signal

vg_user = os.environ['USER']

vg_wpList = []

vg_finalWp = '/tmp/' + vg_user + '/wp_' + vg_user + '.jpg'

vg_tmpWp1 = '/tmp/' + vg_user + '/wp_' + vg_user + '1.jpg'

vg_tmpWp2 = '/tmp/' + vg_user + '/wp_' + vg_user + '2.jpg'

vg_tmpImg = '/tmp/' + vg_user + '/tmp_' + vg_user + '.jpg'

# It just prints the help message

# No need of arguments

def fHelp():

   print "Usage of wp2d\n"

   print "Available options:"

   print "-w [dir]   : all path to wallpaper's directory\n"

   print "-1 [size]  : resolution of screen one (left screen)"

   print "-2 [size]  : resolution of screen two (right screen)"

   print "note: size must be like [number]x[number] such as 1280x1024"

   print "      -1 option is needed, -2 is optional (if you have not a 2nd screen)"

   print "-t [time]  : time to wait before changing wallpaper"

   print "note: time must be set in seconds"

   print "      set 0 if you want 1 turn (wp2d will left after that)"

   print "      by default time is set to 3600 seconds"

   print "-p [prog]  : program used to display wallpaper on screen"

   print "             by default fbsetbg"

   print "-m [mode]  : mode used to display wallpaper."

   print "             seq for sequential or rand for randomised."

   print "-d [how]   : how could be diff or same"

   print "             diff : different wallpapers will be displayed"

   print "                    on each screen"

   print "             same : same wallpaper will be displayed"

   print "                    on each screen"

   print "note: by default how is set to same"

   print "-s         : scale respected image"

   print "-c         : send a signal, to current wp2d session, to change wallpaper."

   print "-q         : send a signal, to current wp2d session, to exit."

   sys.exit(1)

# Used to set variables properly (from arguments)

# Usage : fInit(va_opt)

# va_opt  is a list from getopt module

def fInit(va_opt):

   vf_dir = ''

   vf_size1 = ''

   vf_size2 = ''

   vf_wait = 3600

   vf_prog = 'fbsetbg'

   vf_mode = 'seq'

   vf_how = 'same'

   vf_scale = 0

   vf_scrS1 = []

   vf_scrS2 = []

   for vf_option, vf_value in va_opt:

      if vf_option in ('-h', '--help'):

         fHelp()

      elif vf_option in ('-c'):

         fChangeWp()

      elif vf_option in ('-q'):

         fQuit()

      elif vf_option in ('-w'):

         vf_dir = vf_value

      elif vf_option in ('-1'):

         vf_size1 = vf_value

      elif vf_option in ('-2'):

         vf_size2 = vf_value

      elif vf_option in ('-t'):

         vf_wait = int(vf_value)

      elif vf_option in ('-p'):

         vf_prog = vf_value

      elif vf_option in ('-m'):

         vf_mode = vf_value

      elif vf_option in ('-d'):

         vf_how = vf_value

      elif vf_option in ('-s'):

         vf_scale = 1

   

   if (vf_dir == ''):

      print 'You need to set a wallpaper\'s directory'

      sys.exit(1)

   

   if ((vf_size2 != '') and (vf_size1 == '')):

      vf_size1 = vf_size2

      vf_size2 = ''

   

   if (vf_size1 == ''):

      print 'You need to set the screen size (see option -h for more information)'

      sys.exit(1)

   

   if (vf_size1 and vf_size2):

      vf_trans = vf_size1.split('x')

      vf_scrS1.append(int(vf_trans[0]))

      vf_scrS1.append(int(vf_trans[1]))

      vf_trans = vf_size2.split('x')

      vf_scrS2.append(int(vf_trans[0]))

      vf_scrS2.append(int(vf_trans[1]))

   

   vf_tmpDir = '/tmp/' + vg_user + '/'

   if(not os.path.isdir(vf_tmpDir)):

      mkdir(vf_tmpDir)

   return vf_dir, vf_size1, vf_size2, vf_wait, vf_prog, vf_mode, vf_how, vf_scale, vf_scrS1, vf_scrS2

# Lists all wallpaper present in a directory

# Usage : fList(va_wpDir)

# va_wpDir is the directory to list

def fListWp(va_wpDir):

   vf_wpPath = os.path.abspath(va_wpDir)

   vf_fileLst = os.listdir(vf_wpPath)

   vf_wpLst = []

   

   for vf_file in vf_fileLst:

      vf_filePath = os.path.join(vf_wpPath, vf_file)

      if os.path.isfile(vf_filePath):

         vf_wpLst.append(vf_filePath)

   

   vf_wpLst.sort()

   

   return vf_wpLst

# Runs command through 'commands' module

# Usage : fExecCmd(va_cmdString)

# va_cmdString is the string command to execute

def fExecCmd(va_cmdString):

   if (va_cmdString == ''):

      print 'Can\'t execute void string command'

      sys.exit(1)

   

   vf_cmdError, vf_cmdResult = commands.getstatusoutput(va_cmdString)

   if vf_cmdError:

      print 'Error with command : ' + va_cmdString

      print vf_cmdError

      sys.exit(1)

   

   return vf_cmdResult

# Returns the size of an image given

# Usage fGetSize(va_image)

# Return value : vf_size[0] is H and vf_size[1] is V

def fGetSize(va_image):

   vf_size = []

   vf_cmdRes = ''

   vf_cmdString = 'identify ' + va_image + ' | awk -F \' \' \'{print $3}\''

   vf_cmdRes = fExecCmd(vf_cmdString)

   vf_trans = vf_cmdRes.split('x')

   vf_size.append(int(vf_trans[0]))

   vf_size.append(int(vf_trans[1]))

   

   return vf_size

# Resizes an image given with a ratio

# Usage : fResizeImage(va_startImg, va_endImg, va_scrSize, va_ratio)

# va_ratio could be '!' (no respect for scale), '<' (scale respect while reducing an image size)

# and '>' (scale respect while increasing an image size)

def fResizeImage(va_startImg, va_endImg, va_scrSize, va_ratio):

   vf_cmdString = 'nice -n 19 convert ' + va_startImg + ' -resize ' + va_scrSize + '\\' + va_ratio + ' ' + va_endImg

   fExecCmd(vf_cmdString)

   

   return 1

# Resize an image scale-respected

# Usage : fCreateScaleRespectedImage(va_startImg, va_endImg, va_scrSize , va_scrHV)

def fCreateScaleRespectedImage(va_startImg, va_endImg, va_scrSize , va_scrHV):

   vf_imgHV = fGetSize(va_startImg)

   if (vf_imgHV < va_scrHV):

      vf_ratio = '<'

   else:

      vf_ratio = '>'

   

   fResizeImage(va_startImg, va_endImg, va_scrSize, vf_ratio)

   

   vf_imgHV = fGetSize(va_endImg)

   vf_hBorder = (va_scrHV[0] - vf_imgHV[0])/2

   vf_vBorder = (va_scrHV[1] - vf_imgHV[1])/2

   

   if ((vf_hBorder != 0) or (vf_vBorder != 0)):

      vf_cmdString = 'nice -n 19 convert ' + va_endImg + ' -bordercolor black -border ' + str(vf_hBorder) + 'x' + str(vf_vBorder) + ' ' + va_endImg

      fExecCmd(vf_cmdString)

      

   return 1

# Generates a wallpaper and displaying it (on 1 or 2 screens)

# Usage : fGenerateWp(va_indexWp1, va_indexWp2)

# (va_indexWp2 is optional, sets to -1 by default)

def fGenerateWp(va_indexWp1, va_indexWp2 = -1):

   if vg_scaleRespect:

      fCreateScaleRespectedImage(vg_wpList[va_indexWp1], vg_tmpWp1, vg_scrSize1, vg_scrHV1)

   else:

      fResizeImage(vg_wpList[va_indexWp1], vg_tmpWp1, vg_scrSize1, '!')

   if ((va_indexWp2 > -1) and (va_indexWp2 != va_indexWp1)):

      if vg_scaleRespect:

         fCreateScaleRespectedImage(vg_wpList[va_indexWp2], vg_tmpWp2, vg_scrSize2, vg_scrHV2)

      else:

         fResizeImage(vg_wpList[va_indexWp2], vg_tmpWp2, vg_scrSize2, '!')

      

      vf_cmdString = 'nice -n 19 montage ' + vg_tmpWp1 + ' ' + vg_tmpWp2 + ' -mode Concatenate ' + vg_finalWp

   elif (va_indexWp2 == va_indexWp1):

      vf_cmdString = 'nice -n 19 montage ' + vg_tmpWp1 + ' ' + vg_tmpWp1 + ' -mode Concatenate ' + vg_finalWp

      

   else:

      vf_cmdString = 'cp ' + vg_tmpWp1 + ' ' + vg_finalWp

   

   fExecCmd(vf_cmdString)

   

   vf_cmdString = 'chmod 600 ' + vg_finalWp

   fExecCmd(vf_cmdString)

   

   vf_cmdString = vg_wpProgName + ' ' + vg_finalWp

   fExecCmd(vf_cmdString)

   

   vf_cmdString = 'rm ' + vg_tmpWp1

   fExecCmd(vf_cmdString)

   

   if (va_indexWp2 > -1):

      vf_cmdString = 'rm ' + vg_tmpWp2

      fExecCmd(vf_cmdString)

   

   return

# Displays sequentialy wallpapers

# No need of arguments

def fSeqTurn():

   vf_index = 0

   while (1):

      if (vf_index >= len(vg_wpList)):

         vf_index = 0

      

      if (vg_scrSize2 == ''):

         fGenerateWp(vf_index)

      else:

         if (vg_how == 'same'):

            fGenerateWp(vf_index, vf_index)

         else:

            fGenerateWp(vf_index, (vf_index + 1))

      

      vf_index = vf_index + 1

      

      if (vg_timeToWait == 0):

         sys.exit(1)

      

      time.sleep(float(vg_timeToWait))

   

   return

# Displays randomly wallpapers

# No need of arguments

def fRandTurn():

   while (1):

      vf_index = random.randint(0, len(vg_wpList))

      

      if (vg_scrSize2 == ''):

         fGenerateWp(vf_index)

      else:

         if (vg_how == 'same'):

            fGenerateWp(vf_index, vf_index)

         else:

            fGenerateWp(vf_index, (random.randint(0, len(vg_wpList))))

      

      if (vg_timeToWait == 0):

         sys.exit(1)

      

      time.sleep(float(vg_timeToWait))

   

   return

# Send a SIGUSR1 signal to the top wp2d launched process telling him to change wallpaper

# No nedd of arguments

def fChangeWp():

   vf_cmdString = 'ps x | grep wp2d | awk -F \' \' \'{print $1}\''

   vf_cmdResult = fExecCmd(vf_cmdString)

   vf_pid = vf_cmdResult.split('\n')

   os.kill(int(vf_pid[0]), signal.SIGUSR1)

   sys.exit(1)

   

# Send a SIGUSR2 signal to the top wp2d launched process telling him to exit properly

# No nedd of arguments

def fQuit():

   vf_cmdString = 'ps x | grep wp2d | awk -F \' \' \'{print $1}\''

   vf_cmdResult = fExecCmd(vf_cmdString)

   vf_pid = vf_cmdResult.split('\n')

   os.kill(int(vf_pid[0]), signal.SIGUSR2)

   sys.exit(1)

# Handle SIGUSR1 signal : it changes the wallpaper

# Arguments are used by system

def fHandleSigusr1(va_signum, va_frame):

   if (vg_mode == 'rand'):

      fRandTurn()

   else:

      fSeqTurn()

# Handle SIGUSR2 signal : it exit properly

# Arguments are used by system

def fHandleSigusr2(va_signum, va_frame):

   vf_cdmString = 'rm ' + vg_finalWp

   fExecCmd(vf_cdmString)

   sys.exit(1)

   

# We need to get arguments

options, args = getopt.getopt(sys.argv[1:], 'hcqw:1:2:t:p:m:d:s', ['help'])

if (len(options) == 0):

   print 'Usage:'

   print './wp2d.py [options]'

   print 'See ./wp2d.py --help (or -h) for more information'

   sys.exit(1)

   

# ############## #

# Script starts here     #

# ############## #

# Setting variables from arguments properly

vg_wpDirectory, vg_scrSize1, vg_scrSize2, vg_timeToWait, vg_wpProgName, vg_mode, vg_how, vg_scaleRespect, vg_scrHV1, vg_scrHV2 = fInit(options)

# We list wallpaper's directory

vg_wpList = fListWp(vg_wpDirectory)

# Let's go!

if (len(vg_wpList) == 0):

   print 'There is no files in ' + vg_wpDirectory

   sys.exit(1)

# On prend en charge les signaux SIGUSR1 et SIGUSR2

signal.signal(signal.SIGUSR1, fHandleSigusr1)

signal.signal(signal.SIGUSR2, fHandleSigusr2)

if (vg_mode == 'rand'):

   fRandTurn()

else:

   fSeqTurn()

# EOF # 

```

Note: au moment de lister le repertoire de fond d'écrans, wp2d récupère aussi la résolution de chaque image. Ainsi il verra si il est nécéssaire de redimensionner l'image pour l'écran ou non (pour gagner du temps).

Cependant j'ai remarqué qu'avec un rep de 100 images c'est assez long à initiliser à cause de ça et je me demande si ça ne serait pas mieux de ne pas gérer cette résolution et de redimensionner quoiqu'il arrive l'image pour l'écran où elle va aller...

Dites moi ce que vous en pensez

 Update : Si vous êtes encore sur une version 6.1.7-r1 d'ImageMagick vous aures un bug, en effet le programme "convert" d'ImageMagick souffre d'un bug dans cette version. IL s'agit des opsions pour rajouter des bord à une image : convert truc.jpg ... -border 36x0 res.jpg par exemple ne marche pas. Donc un petti emerge sync && emerge imagemagick s'impose  :Wink: Last edited by kwenspc on Fri Mar 11, 2005 4:05 pm; edited 5 times in total

----------

## Trevoke

Desole - si ca sait pas faire le cafe je m'en tapotte le popotin avec un concombre epluche a la main par les bonnes soeurs.

Mais a part ca, tres joli le script  :Wink: 

Merci!

----------

## kwenspc

je sais pas si il est joli mais au moins sert-il à quelque chose???  :Neutral: 

siou plait un peu de retour!    :Embarassed: 

----------

## Darkael

 *kwenspc wrote:*   

> je sais pas si il est joli mais au moins sert-il à quelque chose??? 
> 
> siou plait un peu de retour!   

 

Salut, il a l'air pas mal le script, je l'ai pas essayé vu que j'ai qu'un seul écran donc ça limite un peu l'interet  :Very Happy: 

Par contre je vois que les -s1 et -s2 doivent être spécifiés par l'utilisateur, à mon avis ce serait peut-être mieux si le script se chargeait automatiquement de déterminer les résolutions de chaque écran.

----------

## kwenspc

ça existe un utilitaire qui fait ça? (qui donne la résolution courantes des ecrans)

parce que là à part une combinaison avec more,grep,awk,sed sur le fichier de log de Xorg, j'ai beau chercher je vois pas trop...   :Confused: 

----------

## Prosper4tie

Pour ma part, a par un warning, tout fonctionne bien.

```
prosper@altrus prosper $ ./wp2d.sh -w Images/ -s1 1280x1024 -s2 1024x768 -t 30s -m rand -d diff

sh: line 1: html2ps: command not found identify: Delegate failed `"html2ps" -U -o "%o" "%i"'.
```

Juste un petite remarque, si l'image est plus petite que la résolution de l'écran, elle est redimensionnée, et ça c'est mal, parce que les photos en portrait ca devient des gens tout écrasés.

Sinon bon boulot.

----------

## kwenspc

ok je vais penser à tout ça   :Smile: 

par contre ton warning est plus qu'étrange, je ne'arrive pas à comprendre où il lit un "html2ps" quelque part...(surtout à la ligne 1)

----------

## Darkael

 *kwenspc wrote:*   

> ça existe un utilitaire qui fait ça? (qui donne la résolution courantes des ecrans)
> 
> parce que là à part une combinaison avec more,grep,awk,sed sur le fichier de log de Xorg, j'ai beau chercher je vois pas trop...  

 

Hmm pour un seul écran "xwininfo -root" donne des infos facilement exploitables, mais je suppose que pour du double écran ça va misérablement foirer.

Bon sinon comme tu dis la solution serait de chercher dans les logs (tu peux aussi chercher dans les fichiers de conf, mais je sais pas où se configure le double écran)

----------

## kwenspc

oui j'avais déjà essayer xwininfo, et en effte c'est pas exploitable car pour il ne fournit que la resolution totale et non la résolution de chaque écran. bon c'est pas grave je vais parser le log ou le conf on verra bien.

j'ai ptet une idée à ajouter aussi à ce script (je verrais si c'est faisable) : je vias faire en sorte qu'il puisse afficher un fond d'écran différent sur chaque bureau virtuel (flux, fvwm etc...). Mais je pense que c'est plus facile de faire cette manip directement en configurant le wm utilisé.

----------

## Darkael

 *kwenspc wrote:*   

> 
> 
> j'ai ptet une idée à ajouter aussi à ce script (je verrais si c'est faisable) : je vias faire en sorte qu'il puisse afficher un fond d'écran différent sur chaque bureau virtuel (flux, fvwm etc...). Mais je pense que c'est plus facile de faire cette manip directement en configurant le wm utilisé.

 

C'est possible de faire ça autrement que par le wm? 

Pour fluxbox je sais pas, pour FVWM il te faudra surement passer par FvwmBacker ou FvwmEvent.

----------

## kwenspc

Bon je suis en train d'essayer de parser le fichier de conf xorg mais pour le moment j'ai pas de solution "lgère".

Est ce que quelqu'un sait comment faire un grep qui permette par exemple de récupérer toutes les section "Section Screen" (je veux dire on récupère le "Section Screen" ce qu'il y a au milieu et la fin "EndSection)?

@Prosper4tie : je me creuse la tête pour le problème de portrait mais je crains que je ne vais pas implémenter le truc faute de temps...  :Confused:   j'ai bien une solution. Donc en gros je vérifie le rapport de l'image par rapport à la résolution de l'écran courant, je reconstruit une image avec agrandissement de l'image originale mais en faisant bien attention que le rapport original soit gardé et je la plaque sur un fond (de même résolution de l'écran) et je concatene le tout...

Bah ecoutes je vais voir ce que je peus faire

----------

## yoyo

 *kwenspc wrote:*   

> @Prosper4tie : je me creuse la tête pour le problème de portrait mais je crains que je ne vais pas implémenter le truc faute de temps...   j'ai bien une solution. Donc en gros je vérifie le rapport de l'image par rapport à la résolution de l'écran courant, je reconstruit une image avec agrandissement de l'image originale mais en faisant bien attention que le rapport original soit gardé et je la plaque sur un fond (de même résolution de l'écran) et je concatene le tout...

 Bon, j'ai pas regardé le script (de toute façon j'y connais pas grand chose) mais le comportement que tu décris correspond à l'option "-a" de fbsetbg :

 *man fbsetbg wrote:*   

> -a file
> 
>              Set maximized wallpaper, preserving aspect (if your bgsetter doesn't support this option fbsetbg falls back to -f ).

 

Mes 0.02 cents

----------

## Prosper4tie

Faut pas non plus se prende la tête la dessus, je disais ca comme ca (:

Sinon j'ai pas precisé, le script est lancé sous xfce4, donc tu peux mettre le tampon "xfce4 certified" en plus de fvwm et fluxbox

----------

## kwenspc

@yoyo : ookiii!  :Smile:   bon je vais voir ça, ça va me faciliter la tâche!

[edit] ah ouais mais non en fait dans mon cas ça va pas être possible, car en fait le fbsetbg je le fais sur le fond d'écran résultant de la concaténation et non sur l'image original...bon pas grave je vais voir ce qu'imagemagick a à me mettre sous la dent pour ça[/edit]

@Prosper4tie : t'inkièt! au contraire c'était une remarque qui va faire avancer les choses!

et je met le tip pour xfce4   :Wink:   thx!

----------

## yoyo

 *KarnEvil wrote:*   

>  *kwenspc wrote:*   
> 
> j'ai ptet une idée à ajouter aussi à ce script (je verrais si c'est faisable) : je vias faire en sorte qu'il puisse afficher un fond d'écran différent sur chaque bureau virtuel (flux, fvwm etc...). Mais je pense que c'est plus facile de faire cette manip directement en configurant le wm utilisé. 
> 
> C'est possible de faire ça autrement que par le wm? 
> ...

 Pour fluxbox, il y a "fluxspace" qui permet non-seulement d'avoir des fonds d'écrans différents, mais aussi des icônes et dockapps différentes sur chaque bureau etc. (plus d'infos ici : http://fluxspace.sourceforge.net/).

EDIT : *kwenspc wrote:*   

> ah ouais mais non en fait dans mon cas ça va pas être possible, car en fait le fbsetbg je le fais sur le fond d'écran résultant de la concaténation et non sur l'image original...bon pas grave je vais voir ce qu'imagemagick a à me mettre sous la dent pour ça

 Arf ...   :Sad: 

----------

## kwenspc

J'ai eu le temps de retoucher mon script cet après-midi, voilà le résultat (premier post de ce topic)

----------

## Prosper4tie

Ma connaissance en pyhton étant aussi limitée qu'une recette à base de vache qui rit, je préfère m'en remettre à la communauté.

```
prosper@altrus prosper $ ./wp2d.py -w Images/ -1 1280x1024 -2 1024x768 -t 30s -m rand -d diff

Traceback (most recent call last):

  File "./wp2d.py", line 286, in ?

    vg_wpDirectory, vg_scrSize1, vg_scrSize2, vg_timeToWait, vg_wpProgName, vg_mode, vg_how, vg_scaleRespect, vg_scrHV1, vg_scrHV2 = fInit(options)

  File "./wp2d.py", line 77, in fInit

    vf_wait = int(vf_value)

ValueError: invalid literal for int(): 30s

prosper@altrus prosper $ 
```

----------

## pititjo

D'après le message d'erreur, il semblerais que -t demande un entier.

Renplace donc 30s par 30 et ça devrait marcher.

----------

## Prosper4tie

yep c'était ca, j'avais essayer de mettre "s" à la place de "m" mais j'avais pas suivi qu'il attendait pas l'unité.

Sinon il faudrait corriger le topic de départ qui indique :

 *Quote:*   

> Note : voici un exemple d'utilisation que j'en fais
> 
> wp2d.py -w /home/fond/ -1 1152x864 -2 1280x1024 -t 30m -m rand -d diff
> 
> (vous pouvez mettre une telle commande dans le .fluxbox/startup par exemple) 

 

Par contre j'arrive pas a activer l'option -s.

J'ai modifié le script à la ligne 182 pour indiquer wg_tmpImage à la place de wa_tmpImage, et maintenant j'obtiens ceci

```

prosper@altrus prosper $ ./wp2d.py -w Images/ -1 1280x1024 -2 1024x768 -t 10 -m rand -d diff -s

Error with command : nice -n 19 convert /tmp/prosper/tmp_prosper.jpg -bordercolor black -border 0x85 /tmp/prosper/wp_prosper1.jpg

256

prosper@altrus prosper $

```

Pour info

```
*  media-gfx/imagemagick     

      Latest version available: 6.1.8.8

      Latest version installed: 6.1.8.8

```

----------

## kwenspc

je vois ça dès que je rentre, pour va_tmpImg il faut mettre va_endImg

je change ça de suite sur le poste original

je vais revoir ça. (j'espère aussi qu'ImageMagick n'a pas un autre bug)

Oui par contre désolé de ne pas avoir notifé le fait qu'il ne faut plus mettre 's', 'm' ou 'h' au côté du temps et exprimer ce dernier qu'en secondes.

Bien evidemment c'est un premier coup d'essai en python. je vais essayer de le rendre plus "user friendly" si possible.

 Appel aux developpeurs python : si vous connaissez des bibliothèques de fonctions permettant de gérer X (résoltuion d'écran etc..) faites moi signe, je pourrais implémenter la fonction de détection automatique de la résoltuion écran. ce qui eviterait de le passer ne paramètre. A propos de paramètres le "-1" et "-2" me semble pas très parlant, mais je n'arrivais pas à faire "-s1" "-s2"...enfin si j'arrive à faire la fonction ci-dessus ces deux paramètres dispraîtront.

et encore merci Prosper4tie! vu que tu sembles être le seul à tester ce script   :Wink: 

----------

## ppierre

Il existe :

```
# emerge -va dev-python/python-xlib
```

et cela donne : 

 *Quote:*   

> Method: Display screen ( sno = None ) 
> 
> width_in_pixels 
> 
> height_in_pixels 
> ...

 

J'ai jamais testé mais cela devrait marcher.

----------

## Prosper4tie

Pour ma part plus de problème depuis la correction de variable, le script tourne nickel.

----------

## kwenspc

merci ppierre il semblerait que ça soit exactement ce que je cherche  :Smile: 

Au fait, est ce que vous avez rencontré un problème de "court ralentissement" de la machine dès lors que le script change de fond d'écran?

j'ai beau avoir mis un nice -n 19 au commande pour imagemagick chez moi il y a toujours un petit à-coup dès que le sleep se termine  :Confused: 

c'est assez embêtant. 

Je vais essayer de regler ce petit problème.

Pendant que j'y pense, pour ceux qui passent dans le coin  :Wink:  :  y en aurait-il qui font du xinerama avec  3 écrans ou plus?

(ça serait intéréssant que le script sache gérer n'importe quelle configuration xinerama non?)

----------

## kwenspc

j'ai rajouté 3 ptits trucs rapido qui rendent le script souple. (j'ai mis à jour le topic)

je suis toujours à l'écoute de vos suggestions  :Wink: 

----------

