marioq

changeImgDesktop / bash cambia immagine del desktop

Feb 15th, 2016 (edited)
404
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 6.18 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. ########################################################################
  4. #
  5. # 16.02.2016
  6. # mario.q59
  7. #
  8. # Questo script bash cambia l'immagine (.jpg|.png) del desktop
  9. # prendendone una a caso dal Folder impostato
  10. # nella variabile "IMG_FOLDER" qui nella prossima riga.
  11. IMG_FOLDER="/usr/share/backgrounds/"
  12. #IMG_FOLDER="/home/mario.q/Immagini/canon/DCIM/100CANON/"
  13. #
  14. # Se avviato con il parametro "key", aggiunge la
  15. # combinazione di tasti "Alt+b" che cambia
  16. # l'immagine di sfondo del desktop.
  17. # "changeImgDesktop key"
  18. #
  19. # Rendere eseguibile questo file "changeImgDesktop", ed avviarlo.
  20. #
  21. # PROBLEMI NOTI:
  22. #    Non viene fatto nessun controllo se è già presente una
  23. #    combinazione di tasti "Alt+b"
  24. #    Prima di eseguire questo script verificare se la combinazione
  25. #    di tasti "Alt+b" è già in uso.
  26. #
  27. # Su "ubuntu desktop" la combinazione di tasti "Alt+b"
  28. # è disponibile all'uso.
  29. #
  30. #  Distributed under the terms of the GNU General Public License
  31. #  http://www.gnu.org/licenses/gpl.html
  32. #
  33. ########################################################################
  34. #                                                                      #
  35. #           da qui in giù non dovresti cambiare niente                 #
  36. #                                                                      #
  37. ########################################################################
  38.  
  39. ECHO_LINE=" ------------------------------------------"
  40.  
  41. DC="`which dconf`"
  42. DC_ERROR=$?
  43. if [ $DC_ERROR -eq 1 ]; then
  44.     echo "$ECHO_LINE"
  45.     echo "  installa \"dconf-editor\""
  46.     echo "$ECHO_LINE"
  47.     exit $DC_ERROR
  48. else
  49.     DW="$DC write"
  50.     DR="$DC read"
  51. fi
  52.  
  53. if [ ! -d "$IMG_FOLDER" ] ; then
  54.     echo "$ECHO_LINE"
  55.     echo " \"$IMG_FOLDER\"             "
  56.     echo "  il folder specificato nella"
  57.     echo "  variabile \"\$IMG_FOLDER\" "
  58.     echo "  non va bene (non è una cartella)"
  59.     echo "$ECHO_LINE"
  60.     exit 1
  61. fi
  62.  
  63. FIND_IMG="`find -L $IMG_FOLDER \! -executable -readable -type f -iregex '.*\.jpg$\|.*\.jpeg\|.*\.png$'`"
  64.  
  65. COUNT_IMG_DESKTOP="`echo "$FIND_IMG" | wc -l`"
  66. if [ $COUNT_IMG_DESKTOP -eq 0 ]; then
  67.     echo "$ECHO_LINE"
  68.     echo "  Il folder \"$IMG_FOLDER\"   "
  69.     echo "  non contiene immagini \".jpg | .jpeg | .png\""
  70.     echo "$ECHO_LINE"
  71.     exit 1
  72. fi
  73.  
  74. RANDOM_X(){
  75.     # restituisce un numero a caso tra 1 e $1
  76.     random_1=`echo $RANDOM`
  77.     random_2=`echo $RANDOM`
  78.     random_3=`echo $RANDOM`
  79.     echo $((random_1*random_2*random_3%$1+1))
  80. }
  81.  
  82. # un'immagine a caso
  83. IMG_DESKTOP="`echo "$FIND_IMG" | sort -r -R | shuf -n $(RANDOM_X $COUNT_IMG_DESKTOP) | shuf -n 1`"
  84.  
  85. THIS_FILE_FULL_PATH="`readlink -m $(type -a $0 | awk '{print $3}')`"
  86. THIS_FILE_FOLDER="`dirname $THIS_FILE_FULL_PATH`"
  87. THIS_FILE="`basename $0`"
  88. XML_WALLPAPER_FILE="$HOME/.$THIS_FILE.`date +%N`.xml"
  89. # XML_WALLPAPER_FILE="$THIS_FILE_FOLDER/$THIS_FILE.xml"
  90.  
  91. CUSTOM_KEYBINDINGS_VALUE="`$DR /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings`"
  92. MY_CUSTOM_KEYBINDINGS_VALUE="/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/$THIS_FILE/"
  93.  
  94. DCONF_WRITE_PICTURE_URI(){
  95.     rm -f $HOME/.$THIS_FILE.*.xml
  96.     echo "<!--
  97. $ECHO_LINE
  98. `date`
  99. file scritto dallo script bash
  100. \"$THIS_FILE_FULL_PATH\"
  101. $(ECHO_INFO)
  102. -->
  103. <background>
  104.     <static>
  105.         <file>$IMG_DESKTOP</file>
  106.         <options>zoom</options>
  107.     </static>
  108. </background>" > $XML_WALLPAPER_FILE
  109.  
  110.     $DW /org/gnome/desktop/background/picture-options \"zoom\"
  111.     $DW /org/gnome/desktop/background/picture-uri \"file://$XML_WALLPAPER_FILE\"
  112. }
  113.  
  114. ECHO_INFO(){
  115.     if [ "$1" == "key" ]; then
  116.         echo "$ECHO_LINE"
  117.         exit 0
  118.     else
  119.         cat <<EOF
  120.  
  121.   "`basename $IMG_DESKTOP`"
  122.    un'immagine a caso tra $COUNT_IMG_DESKTOP
  123.    dal folder "$IMG_FOLDER"
  124. $ECHO_LINE
  125. EOF
  126.     fi
  127. }
  128.  
  129. # Inserisco una combinazione di tasti per cambiare l'immagine del desktop
  130. CUSTOM_KEYBINDINGS(){
  131.     GUI_NAME="Cambia immagine di sfondo del Desktop"
  132.     name="name"
  133.     command="command '$THIS_FILE_FULL_PATH'"
  134.     binding="binding \"\<Alt\>b\""
  135.  
  136.     # quando è vuota "-z $CUSTOM_KEYBINDINGS_VALUE" oppure ha questo valore "@as []",
  137.     # se grep trova "@as \[\]" esce con il codice 0, true
  138.     if [ -z "$CUSTOM_KEYBINDINGS_VALUE" -o "`echo "$CUSTOM_KEYBINDINGS_VALUE" | grep "@as \[\]"`" ]; then
  139.         if [ "$1" == "key" ]; then
  140.             $DW /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings "['$MY_CUSTOM_KEYBINDINGS_VALUE']"
  141.             $DW $MY_CUSTOM_KEYBINDINGS_VALUE$command
  142.             $DW $MY_CUSTOM_KEYBINDINGS_VALUE$name "'$GUI_NAME'"
  143.             $DW $MY_CUSTOM_KEYBINDINGS_VALUE$binding
  144.             echo "$ECHO_LINE"
  145.             echo "  ALT+b cambia l'immagine sul desktop "
  146.         fi
  147.         ECHO_INFO $1
  148.         DCONF_WRITE_PICTURE_URI
  149.         exit 0
  150.     fi
  151.  
  152.     # grep restituisce 0, true de trova la corrispondenza esatta di $MY_CUSTOM_KEYBINDINGS_VALUE
  153.     if [ `echo "$CUSTOM_KEYBINDINGS_VALUE" | grep -o "'$MY_CUSTOM_KEYBINDINGS_VALUE'"` ]; then
  154.         if [ "$1" == "key" ]; then
  155.             $DW $MY_CUSTOM_KEYBINDINGS_VALUE$command
  156.             $DW $MY_CUSTOM_KEYBINDINGS_VALUE$name  "'$GUI_NAME'"
  157.             $DW $MY_CUSTOM_KEYBINDINGS_VALUE$binding
  158.             echo "$ECHO_LINE"
  159.             echo "  La combinazione di tasti è già presente "
  160.             echo "  ALT+b cambia l'immagine sul desktop     "
  161.         fi
  162.         ECHO_INFO $1
  163.         DCONF_WRITE_PICTURE_URI
  164.         exit 0
  165.     fi
  166.  
  167.     if [ true ]; then
  168.         if [ "$1" == "key" ]; then
  169.             CUSTOM_KEYBINDINGS_VALUE=`echo $CUSTOM_KEYBINDINGS_VALUE | sed 's,\[,,g'`
  170.             CUSTOM_KEYBINDINGS_VALUE="['$MY_CUSTOM_KEYBINDINGS_VALUE',$CUSTOM_KEYBINDINGS_VALUE"
  171.             $DW /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings "$CUSTOM_KEYBINDINGS_VALUE"
  172.             $DW $MY_CUSTOM_KEYBINDINGS_VALUE$command
  173.             $DW $MY_CUSTOM_KEYBINDINGS_VALUE$name "'$GUI_NAME'"
  174.             $DW $MY_CUSTOM_KEYBINDINGS_VALUE$binding
  175.             echo "$ECHO_LINE"
  176.             echo "  ALT+b cambia l'immagine sul desktop "
  177.             echo "    Combinazione dei tasti aggiunta   "
  178.             echo "    alle altre già presenti           "
  179.         fi
  180.         ECHO_INFO $1
  181.         DCONF_WRITE_PICTURE_URI
  182.         exit 0
  183.     fi
  184. }
  185.  
  186. if [ "$1" == "key" ]; then
  187.     CUSTOM_KEYBINDINGS $1
  188. else
  189.     echo " |"$ECHO_LINE
  190.     echo " |  avviando questo script        "
  191.     echo " | \"$THIS_FILE_FULL_PATH\"       "
  192.     echo " |  con l'argomento \"key\"       "
  193.     echo " |  viene agginta la combinazione "
  194.     echo " |  di tasti ALT+b che lo esegue  "
  195.     echo " | \"$THIS_FILE_FULL_PATH key\"   "
  196.     echo " |"$ECHO_LINE
  197.     ECHO_INFO
  198.     DCONF_WRITE_PICTURE_URI
  199. fi
  200.  
Add Comment
Please, Sign In to add comment