Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[SCRIPT] fond d'ecran fvwm, fluxbox et xfce4 (updated bis)
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4954

PostPosted: Mon Jan 31, 2005 3:43 pm    Post subject: [SCRIPT] fond d'ecran fvwm, fluxbox et xfce4 (updated bis) Reply with quote

version 0.6

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

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é... :lol:

[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 :)


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 :

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
Back to top
View user's profile Send private message
Trevoke
Advocate
Advocate


Joined: 04 Sep 2004
Posts: 4099
Location: NY, NY

PostPosted: Mon Jan 31, 2005 4:53 pm    Post subject: Reply with quote

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 ;-)
Merci!
_________________
Votre moment detente
What is the nature of conflict?
Back to top
View user's profile Send private message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4954

PostPosted: Mon Jan 31, 2005 6:22 pm    Post subject: Reply with quote

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

siou plait un peu de retour! :oops:
Back to top
View user's profile Send private message
Darkael
Veteran
Veteran


Joined: 10 Aug 2004
Posts: 1321
Location: France

PostPosted: Mon Jan 31, 2005 6:42 pm    Post subject: Reply with quote

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

siou plait un peu de retour! :oops:


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 :D
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.
Back to top
View user's profile Send private message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4954

PostPosted: Mon Jan 31, 2005 7:35 pm    Post subject: Reply with quote

ç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... :?
Back to top
View user's profile Send private message
Prosper4tie
Tux's lil' helper
Tux's lil' helper


Joined: 02 Apr 2004
Posts: 94
Location: France (74)

PostPosted: Mon Jan 31, 2005 8:01 pm    Post subject: Reply with quote

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

Code:
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.
Back to top
View user's profile Send private message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4954

PostPosted: Mon Jan 31, 2005 8:39 pm    Post subject: Reply with quote

ok je vais penser à tout ça :)

par contre ton warning est plus qu'étrange, je ne'arrive pas à comprendre où il lit un "html2ps" quelque part...(surtout à la ligne 1)
Back to top
View user's profile Send private message
Darkael
Veteran
Veteran


Joined: 10 Aug 2004
Posts: 1321
Location: France

PostPosted: Mon Jan 31, 2005 9:10 pm    Post subject: Reply with quote

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)
Back to top
View user's profile Send private message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4954

PostPosted: Mon Jan 31, 2005 9:27 pm    Post subject: Reply with quote

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é.
Back to top
View user's profile Send private message
Darkael
Veteran
Veteran


Joined: 10 Aug 2004
Posts: 1321
Location: France

PostPosted: Mon Jan 31, 2005 9:48 pm    Post subject: Reply with quote

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.
Back to top
View user's profile Send private message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4954

PostPosted: Tue Feb 01, 2005 12:54 pm    Post subject: Reply with quote

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... :? 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
Back to top
View user's profile Send private message
yoyo
Bodhisattva
Bodhisattva


Joined: 04 Mar 2003
Posts: 4273
Location: Lyon - France

PostPosted: Tue Feb 01, 2005 1:09 pm    Post subject: Reply with quote

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
_________________
La connaissance s'accroît quand on la partage.
JCB
Back to top
View user's profile Send private message
Prosper4tie
Tux's lil' helper
Tux's lil' helper


Joined: 02 Apr 2004
Posts: 94
Location: France (74)

PostPosted: Tue Feb 01, 2005 1:14 pm    Post subject: Reply with quote

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
Back to top
View user's profile Send private message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4954

PostPosted: Tue Feb 01, 2005 1:20 pm    Post subject: Reply with quote

@yoyo : ookiii! :) 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!
Back to top
View user's profile Send private message
yoyo
Bodhisattva
Bodhisattva


Joined: 04 Mar 2003
Posts: 4273
Location: Lyon - France

PostPosted: Tue Feb 01, 2005 1:29 pm    Post subject: Reply with quote

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 je sais pas, pour FVWM il te faudra surement passer par FvwmBacker ou FvwmEvent.
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 ... :(
_________________
La connaissance s'accroît quand on la partage.
JCB
Back to top
View user's profile Send private message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4954

PostPosted: Thu Feb 17, 2005 6:39 pm    Post subject: Reply with quote

J'ai eu le temps de retoucher mon script cet après-midi, voilà le résultat (premier post de ce topic)
Back to top
View user's profile Send private message
Prosper4tie
Tux's lil' helper
Tux's lil' helper


Joined: 02 Apr 2004
Posts: 94
Location: France (74)

PostPosted: Sun Feb 20, 2005 12:33 pm    Post subject: Reply with quote

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é.

Code:
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 $
Back to top
View user's profile Send private message
pititjo
Apprentice
Apprentice


Joined: 19 Sep 2004
Posts: 245
Location: Paris (France)

PostPosted: Sun Feb 20, 2005 12:45 pm    Post subject: Reply with quote

D'après le message d'erreur, il semblerais que -t demande un entier.
Renplace donc 30s par 30 et ça devrait marcher.
_________________
pititjo.net
Le Mus. Et si c'était vrai ?
Back to top
View user's profile Send private message
Prosper4tie
Tux's lil' helper
Tux's lil' helper


Joined: 02 Apr 2004
Posts: 94
Location: France (74)

PostPosted: Sun Feb 20, 2005 1:56 pm    Post subject: Reply with quote

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
Code:

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
Code:
*  media-gfx/imagemagick     
      Latest version available: 6.1.8.8
      Latest version installed: 6.1.8.8
Back to top
View user's profile Send private message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4954

PostPosted: Sun Feb 20, 2005 5:22 pm    Post subject: Reply with quote

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:
Back to top
View user's profile Send private message
ppierre
n00b
n00b


Joined: 17 Aug 2004
Posts: 35

PostPosted: Mon Feb 21, 2005 12:28 pm    Post subject: Reply with quote

Il existe :
Code:
# emerge -va dev-python/python-xlib


et cela donne :
Quote:
Method: Display screen ( sno = None )
width_in_pixels
height_in_pixels
The size of the root window in pixels, i.e. the size of the entire screen.


J'ai jamais testé mais cela devrait marcher.
Back to top
View user's profile Send private message
Prosper4tie
Tux's lil' helper
Tux's lil' helper


Joined: 02 Apr 2004
Posts: 94
Location: France (74)

PostPosted: Mon Feb 21, 2005 1:19 pm    Post subject: Reply with quote

Pour ma part plus de problème depuis la correction de variable, le script tourne nickel.
Back to top
View user's profile Send private message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4954

PostPosted: Mon Feb 21, 2005 5:21 pm    Post subject: Reply with quote

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

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 :?

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?)
Back to top
View user's profile Send private message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4954

PostPosted: Fri Mar 11, 2005 4:06 pm    Post subject: Reply with quote

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:
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum