Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/02/2014, à 14:55

rsuinux

un fond d'écran différent par bureau sur XFCE4

bonjour,
Je vous propose un petit script sans aucune prétention pour avoir un fond d'écran différent sur chaque bureau de xfce4 (sur ubuntu 13.10)
Seule restriction (pour le moment?) utiliser les touches ctrl-Fx pour changer de bureau.
J'ai fait une petite doc dans l'entête du script. En fait, ce n'est guère compliqué. Il faut juste contourner quelques fonctions.
voila le script:

#!/bin/bash
# -------------------------------------------------------------------------
# R. Suinot <remi <at> suinot.org>
# 17 Fev. 2014 
# un fond d'écran différent quand on utilise la touche ctrl-Fx
# Utilisation:
# placer le script dans ~/bin/
# chmod +x ~/bin/xfce4-multi-walpaper.sh
# créer des liens correspondant à vos bureaux, autant de lien que de bureaux:
# ln -s ~/bin/xfce4-multi-walpaper.sh ~/bin/F1.sh
# ln -s ~/bin/xfce4-multi-walpaper.sh ~/bin/F2.sh
# etc...
# éditer à la main (je n'ai pas trouver comment le faire via l'utilitaire d'xfce)
# le fichier ~/.config/xfce4/xfconf/xfce-perchannel-xml
# supprimer les références F3, F4 ...
# Ce sont des lignes du type (supprimer ces lignes):
#    <property name="&lt;Control&gt;F3" type="string" value="workspace_3_key"/>
# et dans le même fichier remplacer les lignes 
# <property name="&lt;Primary&gt;&lt;Super&gt;F3" type="string" value="/home/remi/bin/F3"/>
# par
# <property name="&lt;Primary&gt;F3" type="string" value="/home/remi/bin/F3"/>
# pareil pour F4, ...
# ----------------
# étrangement, cela ne marche pas pour les bureaux 1 et 2, ceux ci ont une référence dans
#  <property name="xfwm4" type="empty">
# et impossible de les modifier.
# -------------------------------------------------------------------------
#   dépendances: 
#       notify-send (pour le débug si besoin)
#       wmctrl (attention, celui ci compte les bureaux à partir de zéro)
# -------------------------------------------------------------------------

param=$1
appel=$0
# debug:
# notify-send "Commande= $appel / $# "
# echo "param: $appel " >> /tmp/xfce4-prso.txt

if [[ $appel == *F1* ]]
then
  # Nous supprimons le lien du fond d'écran défini en parametre standard (fait en premier via 'parametre du bureau')
  rm ~/Images/fond-d-ecran.jpg
  # et nous recréons le lien, même nom, avec une autre image comme source
  ln -s ~/Images/image-paysage-feerique-68-1920-1080.php.jpeg ~/Images/fond-d-ecran.jpg
  # xfce4, peux tu me rechager le bureau s'l te plait?
  xfdesktop --reload
  # je m'en vais sur le bureau numéro zéro , bye bye!
  wmctrl -s 0
elif [[ $appel == *F2* ]]
then
  rm ~/Images/fond-d-ecran.jpg
  ln -s ~/Images/miyazaki_byou-1513408.jpg ~/Images/fond-d-ecran.jpg
  xfdesktop --reload
  wmctrl -s 1
elif [[ $appel == *F3* ]]
then
  rm ~/Images/fond-d-ecran.jpg
  ln -s ~/Images/Le-Chateau-Ambulant.jpg ~/Images/fond-d-ecran.jpg
  xfdesktop --reload
  wmctrl -s 2
elif [[ $appel == *F4* ]]
then
  rm ~/Images/fond-d-ecran.jpg
  ln -s ~/Images/paysage-manga-1.jpg ~/Images/fond-d-ecran.jpg
  xfdesktop --reload
  wmctrl -s 3
fi
exit 0

N'oubliez pas la principale dépendance.
C'est largement améliorable (utilisation de case  à la place de if/then/else/fi) et d'autre raccourci clavier via d'autre lien .
Et celui qui me donne l'astuce pour que cela marche avec la touche F1 et F2 je lui paye une bière sur Limoges

Vos avis/suggestions sont les bienvenues.

Rémi.

Dernière modification par rsuinux (Le 18/02/2014, à 21:53)


Si tu ne sais pas: demande; si tu sais: partage!

Hors ligne

#2 Le 18/02/2014, à 18:25

rsuinux

Re : un fond d'écran différent par bureau sur XFCE4

j'ai remarqué qu'au redémarrage, mes modification n'étaient pas gardées lorsqu'on supprime les lignes

<property name="&lt;Control&gt;F3" type="string" value="workspace_3_key"/>

Il faut donc contourner ça, c'est tout simple:
Trouver le bloc:

     <property name="&lt;Control&gt;F1" type="empty"/>
      <property name="&lt;Control&gt;F2" type="empty"/>
      <property name="&lt;Control&gt;F3" type="empty"/>
      <property name="&lt;Control&gt;F4" type="empty"/>
      <property name="&lt;Control&gt;F5" type="empty"/>
      <property name="&lt;Control&gt;F6" type="empty"/>
      <property name="&lt;Control&gt;F7" type="empty"/>
      <property name="&lt;Control&gt;F8" type="empty"/>
      <property name="&lt;Control&gt;F9" type="empty"/>
      <property name="&lt;Control&gt;F10" type="empty"/>
      <property name="&lt;Control&gt;F11" type="empty"/>
      <property name="&lt;Control&gt;F12" type="empty"/>

et le faire précéder par
<code>
<!--
</code>
puis finir par
<code>
-->
</code>
Cela donne ça (je montre le début et la fin):

<!--
      <property name="&lt;Control&gt;F1" type="empty"/>
      <property name="&lt;Control&gt;F2" type="empty"/>
   .../...
      <property name="&lt;Control&gt;F11" type="empty"/>
      <property name="&lt;Control&gt;F12" type="empty"/>
-->
Cela fonctionne après reboot de l'interface, mais toujours pas pour Ctrl-F1 et Ctrl-F2 ! C'est codé en dur ou quoi?

Si tu ne sais pas: demande; si tu sais: partage!

Hors ligne

#3 Le 18/02/2014, à 22:50

rsuinux

Re : un fond d'écran différent par bureau sur XFCE4

j'ai trouvé comment résoudre le problème de la stabilité et des raccourcis F1 et F2:
La méthode n'est possible que parce que je suis seul sur ma machine!
Il faut mettre les caractères "<!--"  et "-->" dans /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml
de cette façon:

<!--
      <property name="&lt;Control&gt;F1" type="string" value="workspace_1_key"/>
      <property name="&lt;Control&gt;F2" type="string" value="workspace_2_key"/>
  .../...
      <property name="&lt;Control&gt;F11" type="string" value="workspace_11_key"/>
      <property name="&lt;Control&gt;F12" type="string" value="workspace_12_key"/>
-->

tout en gardant les modifications citées dans les messages précédant.

Je suis en train de faire, parallèlement, un script d'installation. ce sera plus simple.


Si tu ne sais pas: demande; si tu sais: partage!

Hors ligne

#4 Le 20/02/2014, à 22:35

rsuinux

Re : un fond d'écran différent par bureau sur XFCE4

script amélioré!
on peut demander (configuration dans le script même uniquement) à afficher une image particulière par bureau, ou une image aléatoire à chaque changement de bureau.
Les touches F1 à Fx selon le nombre de bureu fonctionne, et les touches 'Alt flèche droites' et 'Alt flèche gauche' aussi.

Reste à trouvé pour chaque clique dans le "changeur d'espace de travail" comment faire la même chose avec xfconf.


Si tu ne sais pas: demande; si tu sais: partage!

Hors ligne

#5 Le 01/03/2014, à 16:11

rsuinux

Re : un fond d'écran différent par bureau sur XFCE4

nouvelle version:

#!/bin/bash
# -------------------------------------------------------------------------
# R. Suinot <remi@suinot.org>
# 23 Fev. 2014 
# un fond d'écran différent quand on utilise la touche ctrl-Fx 
# ou ctrl-alt-droite, ctrl-alt-gauche
# Utilisation:
# placer le script dans ~/bin/
# chmod +x ~/bin/xfce4-multi-walpaper.sh
# créer des liens correspondants à vos bureaux, autant de lien que de bureaux:
# ln -s ~/bin/xfce4-multi-walpaper.sh ~/bin/F1.sh
# ln -s ~/bin/xfce4-multi-walpaper.sh ~/bin/F2.sh
# etc... 
# ln -s ~/bin/xfce4-multi-walpaper.sh ~/bin/Left.sh
# ln -s ~/bin/xfce4-multi-walpaper.sh ~/bin/Right.sh
#
# éditer à la main (je n'ai pas trouver comment le faire via l'utilitaire d'xfce)
# le fichier ~/.config/xfce4/xfconf/xfce-perchannel-xml
# mettre en commentaire les références F3, F4 ...
# Ce sont des lignes du type (commencez par '<--' et finissez par '-->')
#    <property name="&lt;Control&gt;F3" type="string" value="workspace_3_key"/>
# et dans le même fichier remplacer les lignes 
# <property name="&lt;Primary&gt;&lt;Super&gt;F3" type="string" value="/home/remi/bin/F3"/>
# par
# <property name="&lt;Primary&gt;F3" type="string" value="/home/remi/bin/F3"/>
# pareil pour F4, ...
#
# -------------------------------------------------------------------------
# dépendances: 
#	notify-send (pour le débug si besoin)
#	wmctrl (attention, celui ci compte les bureaux à partir de zéro)
# pour info: wmctrl -d = affiche les bureaux et une étoile devant celui actif
#                   -s 1 = se déplace sur le bureau n° 1
# -------------------------------------------------------------------------

###########################################################################
#### code: 
###        ramdom -> une image aléatoire à chaque changement de bureau
###        nop    -> une image définie pour chaque bureau
###########################################################################
# Déclarations de fonctions
###########################################################################
Changementbureau ()
{
  # Nous supprimons le lien du fond d'écran défini en parametre standard (fait en premier via 'parametre du bureau')
  rm $lien_fond_d_ecran
  # et nous recréons le lien, même nom, avec une autre image comme source
  ln -s $repertoire/$image $lien_fond_d_ecran
  # xfce4, peux tu me rechager le bureau s'l te plait?
  xfdesktop --reload
  var1=$1
  if [[ $var1 == *F1* ]]
  then
    # je m'en vais sur le bureau numéro zéro , bye bye!
    a=0
  elif [[ $var1 == *F2* ]]
  then
    a=1
  elif [[ $var1 == *F3* ]]
  then
    a=2
  elif [[ $var1 == *F4* ]]
  then
    a=3
  elif [[ $var1 == *F5* ]]
  then
    a=4
  elif [[ $var1 == *Left* ]]
  then
    a=0
  elif [[ $var1 == *Right* ]]
  then
    if [ $b_actuel -eq $b_max ]
    then
      a=0
    else
      a=$(($b_actuel+1))
    fi
  else
    # Si on arrive là, c'est que le script n'a pas été appelé comme il faut
    notify-send "Commande= $appel / $# "
    exit 1
  fi
  wmctrl -s $a
}

# Fin des fonctions
###########################################################################

###########################################################################
# Variables globales
code="ramdom"
param=$1
appel=$0
b_actuel=`wmctrl -d | grep \* | awk '{print $1}'`
# nombre de bureau:
b_max=`xfconf-query -c xfwm4 -p /general/workspace_count -v`
# b_max=`wmctrl -d | wc -l `
let b_max--
repertoire="$HOME/Images/Wallpapers"
lien_fond_d_ecran="$HOME/Images/fond-d-ecran.jpg"
image=""

# Fin des variables globales
###########################################################################
# debug:
# notify-send "Commande= $appel / $# "
# echo "param: $appel " >> /tmp/xfce4-prso.txt

if [[ $code -eq "ramdom" ]]
then
  # une image aléatoirement à chaque changement de bureau
  line=$(($RANDOM%`ls $repertoire | wc -l`))
  line=$((line + 1))
  image=""

#  echo "line= "$line

  while read tmp
  do
#    echo $tmp
    echo "$tmp" | grep -qi "^$line"
    if [ $? == 0 ]
    then
      image=$(echo $tmp | cut -f2 -d " ")
      Changementbureau $appel $image
      break
    fi
  done < <(ls $repertoire | nl)

#  echo "image= "$image
else
# ici, chaque bureau a sa propre image
  if [[ $appel == *F1* ]]
  then
    image=$repertoire/image-paysage-feerique-68-1920-1080.php.jpeg
  elif [[ $appel == *F2* ]]
  then
    image=$repertoire/miyazaki_byou-1513408.jpg
  elif [[ $appel == *F3* ]]
  then
    image=$repertoire/Le-Chateau-Ambulant.jpg
  elif [[ $appel == *F4* ]]
  then
    image=$repertoire/paysage-manga-1.jpg
  elif [[ $appel == *F5* ]]
  then
    image=$repertoire/borg_01.jpg
  elif [[ $appel == *Left* ]]
  then
    image=$repertoire/ncc-94155.jpg
  elif [[ $appel == *Right* ]]
  then
    image=$repertoire/scene-of-the-cartoon-nausicaa-c58c-diaporama.jpg
  else
    exit 0
  fi
  Changementbureau $appel $image 
fi

exit 0

En espérant que cela vous amuse un peu.


Si tu ne sais pas: demande; si tu sais: partage!

Hors ligne