¿Cómo configuro otro directorio de búsqueda para fondos de pantalla?

12

Guardo todos mis documentos en una unidad separada de mi instalación de ubuntu, y tengo una carpeta llena de bonitos fondos de pantalla en esa unidad. ¿Cómo puedo hacer que ubuntu busque automáticamente este directorio para que los fondos de pantalla aparezcan en el diálogo del cambiador de fondos de pantalla, al hacer clic derecho en el escritorio y seleccionar Cambiar fondo de escritorio ?

Editar: He intentado poner un enlace simbólico en la carpeta / usr / share / backgrounds a la otra unidad y eso no funcionó.

Slipstream
fuente
Una nota para todas las respuestas a continuación: Puede crear $HOME/.local/share/gnome-background-properties/my-wallpapers.xmly usar eso, en lugar de editar los archivos de fondo del sistema.
Zan Lynx

Respuestas:

9

* EDITAR - Segundo intento - y disculpas de inmediato por todo el trabajo del terminal - con suerte esto debería ser solo copiar y pegar las entradas resaltadas *

la carpeta que contiene los detalles de los fondos de pantalla de gnome se llama /usr/share/gnome-background-properties/ubuntu-wallpapers.xml

Puede editar ese archivo para tener un fondo de pantalla ... / subsecciones de fondo de pantalla que apuntan a su nueva carpeta y archivos de fondo de pantalla

A continuación se muestra un script modificado de esta entrada del foro que regenerará el archivo ubuntu-wallpapers.xml automáticamente para una carpeta que contenga archivos .png y .jpg.

copie y pegue el contenido en un nuevo archivo de texto llamado "ubuntu-wallpaper-generator"

Luego ejecute el archivo con la sintaxis

sh ubuntu-wallpaper-generator <path to new wallpaper folder>

Esto generará un archivo llamado ubuntu-wallpapers.xml en la misma carpeta donde está ejecutando este script.

Haga una copia de seguridad segura de su archivo xml actual, es decir

sudo cp /usr/share/gnome-background-properties/ubuntu-wallpapers.xml /usr/share/gnome-background-properties/ubuntu-wallpapers.xml.backup

la copia en el archivo recién generado

sudo cp ubuntu-wallpapers.xml /usr/share/gnome-background-properties/ubuntu-wallpapers.xml

Aquí está el archivo de script al que me referí:

#!/bin/bash
#
# This script will take all wallpapers in a given folder and
# make them available as "default" background in the "Change Background" gui
# frontend in Ubuntu.
#
################################################################################

#CONFIG_DIR="/usr/share/gnome-background-properties"
CONFIG_DIR="./"
XML_FILE="$CONFIG_DIR/ubuntu-wallpapers.xml"

if [ $# -ne 1 ]; then
   echo "*** syntax ubuntu-wallpaper-generator <path to wallpaper folder> ***"
   echo "*** for example ***"
   echo "*** ubuntu-wallpaper-generator /usr/share/backgrounds ***"
   exit 1
else
   WALLPAPER_DIR=$1
   echo "*** parameters passed: $1 ***"
fi

#### First check if we have write permissions to the share dirctory. ####
touch $CONFIG_DIR/testfile >/dev/null 2>/dev/null
if [ $? -ne 0 ]; then
   echo "**** No permissions to the desktop share directory. ****"
   echo "**** $CONFIG_DIR ****"
   echo "**** Procedure Terminated. ****"
   exit 1
else
   rm $CONFIG_DIR/testfile 2>/dev/null
fi

#### Show the script description message. ###
cat <<EOF

################################################################################
     This script makes all pictures in the $WALLPAPER_DIR
     directory available to all users defined on this system as their
     system-wide GNOME wallpapers.
################################################################################
EOF

#### Fail if the wallpaper directory does not exist. ####
if [ ! -d $WALLPAPER_DIR ]; then
    echo "**** The wallpaper directory \"$WALLPAPER_DIR\" does not exist. ****"
    echo "**** Precedure Terminated. ****"
    exit 1
fi

#### Count the number of jpg/jpeg/png images. ####
numfiles=`ls -1 $WALLPAPER_DIR/*.jpg WALLPAPER_DIR/*.jpeg WALLPAPER_DIR/*.png 2>/dev/null | wc -l`

#### If there are no image files there then exit. ####
if [ $numfiles -eq 0 ]; then
    echo "**** The wallpaper directory \"$WALLPAPER_DIR\" has no images. ****"
    echo "**** Precedure Terminated. ****"
    exit 1
fi

#### Now we create the XML file containing the images for backgrounds. ####
#### Start by creating the header in the XML file. ####
cat <<EOF > $XML_FILE
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wallpapers SYSTEM "gnome-wp-list.dtd">
<wallpapers>
EOF

#### Add each file to the XML file. ####
#### Doing it this way makes sure files with spaces in their names are ####
#### handled properly.   (ls .... | while read fname; do)              ####
ls -1 $WALLPAPER_DIR/*.jpg $WALLPAPER_DIR/*.png $WALLPAPER_DIR/*.jpeg 2> /dev/null |
while read image_name; do
   echo "   Adding: `basename "$image_name"`."
   fname=`basename "$image_name"`
   fname="${fname%%\.*}"
   echo "  <wallpaper>"                          >> $XML_FILE
   echo "    <name>$fname</name>"                >> $XML_FILE
   echo "    <filename>$image_name</filename>"   >> $XML_FILE
   echo "    <options>stretched</options>"       >> $XML_FILE
   echo "    <pcolor>#c58357</pcolor>"           >> $XML_FILE
   echo "    <scolor>#c58357</scolor>"           >> $XML_FILE
   echo "    <shade_type>solid</shade_type>"     >> $XML_FILE
   echo "  </wallpaper>"                         >> $XML_FILE
done

#### Create the footer for the XML file. ####
echo "</wallpapers>"                             >> $XML_FILE

cat <<EOF
################################################################################
     You're almost done. copy the generated file ubuntu-wallpapers.xml to the
     folder /usr/shared/gnome-background-properties
     REMEMBER to backup the current ubuntu-wallpaper.xml in that folder first!
################################################################################

EOF
fossfreedom
fuente
1
Esto solo configurará la carpeta en su propia carpeta. Todavía tiene que importar los fondos de pantalla al cambiador.
bdr529
Puede que no haya sido claro, lo siento. Por ejemplo, si su nueva carpeta de fondo de pantalla estaba en / media / <somedrive> / <somefolder> entonces sudo ln -s / media / <somedrive> / <somefolder> los fondos enumerarían todos sus nuevos fondos de pantalla. Si quisieras también los fondos de pantalla estándar, simplemente copiaría el contenido actual de la carpeta de fondos a tu nueva carpeta de fondos de pantalla. Acabo de probar esto en Natty: cuando elijo "nuevos fondos" haciendo clic derecho en el escritorio, muestra el contenido del nuevo fondo de pantalla de la carpeta sin "importar"
fossfreedom
oops - acabo de ver lo que está mal ...
fossfreedom
funciona muy bien, hace que el cambiador de fondo de pantalla funcione un poco lento debido a las imágenes adicionales. ¡Gracias!
Slipstream
Yo también gracias. Puse su script y cp en otro script y agregué "gnome-apariencia-propiedades --show-page = background" para mostrar el diálogo de cambio. Comienzo el nuevo script desde mi menú.
bdr529
1

Heres una actualización:

    #!/bin/bash

    ################################################################################
    # This script will take all wallpapers in a given folder and
    # make them available as options in the "change desktop background" OR "system->pref->apperances"
    # dialog boxes.
    # for ubuntu or debian
    #    wallpapers are in /usr/share/pixmaps/backgrounds/gnome OR /usr/share/backgrounds
    #    config file(s) for the dialog are in /usr/share/gnome-background-properties
    # --that will make them system wide. 
    #
    #ToDo:
    #  paths with spaces.
    ################################################################################

    # put the output in the same directory as this script
    OutDirectory="$( cd "$( dirname "$0" )" && pwd )"
    OutFile="$OutDirectory/gnome-added.xml"

    # options
    options="zoom"      #zoom is best but stretch,center,scale,tile,span
    shade_type="solid"  #horizontal-gradient, vertical-gradient    
    pcolor="#000000"
    scolor="#000000"


    if [ $# -ne 1 ]; then
       echo "*** need path to directory containing files to include."
       echo "*** for example:     /usr/share/backgrounds"
       exit 1
    else
       ScanDirectory=$1
    fi

    #------need to strip and trailing "/" or this writes incorrect file names.
    # not if [ "$lastchr" -eq "/" ]
    # lastchr=`expr substr $ScanDirectory ${#ScanDirectory} 1`  #--OR:
    lastchr=${ScanDirectory#${ScanDirectory%?}}
    if [ "${lastchr}" = "/" ]; then
       ScanDirectory=${ScanDirectory%?}
    fi
    #--operating in same directory as the script? set full path for the xml file
    if [ ${#ScanDirectory} -le 1 ]; then
            ScanDirectory=$OutDirectory
    fi

    # ---does directory exist
    if [ ! -d $ScanDirectory ]; then
        echo "**** The wallpaper directory \"$ScanDirectory\" does not exist. ****"
        echo "**** Precedure Terminated. ****"
        exit 1
    fi
    # ----can we write to it?
    # touch $OutDirectory/testfile >/dev/null 2>/dev/null
    # if [ $? -ne 0 ]; then
    if [ ! -w $OutDirectory ]; then
       echo "**** No permissions to the desktop share directory. ****"
       echo "**** $OutDirectory ****"
       echo "**** Procedure Terminated. ****"
       exit 1
    fi


    #### Count the number of jpg/jpeg/png/svg [tif(f)] images. ####
    numfiles=`ls -1 $ScanDirectory/*.jpg ScanDirectory/*.jpeg ScanDirectory/*.png ScanDirectory/*.svg 2>/dev/null | wc -l`

    #### If there are no image files there then exit. ####
    if [ $numfiles -eq 0 ]; then
        echo "**** The wallpaper directory \"$ScanDirectory\" has no images. ****"
        echo "**** Precedure Terminated. ****"
        exit 1
    fi

    #### Now we create the XML file containing the images for backgrounds. ####
    #### Start by creating the header in the XML file. ####
    cat <<EOF > $OutFile
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE wallpapers SYSTEM "gnome-wp-list.dtd">
    <wallpapers>
    EOF

    #### Add each file to the XML file. ####
    #### Doing it this way makes sure files with spaces in their names are ####
    #### handled properly.   (ls .... | while read fname; do)              ####
    ls -1 $ScanDirectory/*.jpg $ScanDirectory/*.png $ScanDirectory/*.jpeg $ScanDirectory/*.svg 2> /dev/null |
    while read image_name; do
       fname=`basename "$image_name"`
       echo "   Adding: $fname."

       echo "  <wallpaper deleted=\"false\">"          >> $OutFile
       echo "    <name>$fname</name>"                >> $OutFile
       echo "    <filename>$image_name</filename>"   >> $OutFile
       echo "      <options>$options</options>"       >> $OutFile
       echo "      <pcolor>$pcolor</pcolor>"           >> $OutFile
       echo "      <scolor>$scolor</scolor>"           >> $OutFile
       echo "      <shade_type>$shade_type</shade_type>"     >> $OutFile
       echo "  </wallpaper>"                         >> $OutFile
    done

    #### Create the footer for the XML file. ####
    echo "</wallpapers>"                             >> $OutFile
Alan Harcanon
fuente
¡Bienvenido a AskUbuntu! Si esta es una respuesta actualizada, es posible que desee agregarla a la de Fossfreedom como una edición mientras menciona a qué versión pertenece esta respuesta actualizada.
Oyibo
1

Me enfrenté al mismo problema y escribí un script de Python para editar un archivo xml personalizado que se puede colocar /usr/share/gnome-background-properties/my-backgrounds.xml. Está en GitHub .

Ejemplo de uso:

Para agregar space_galaxy.jpegy fuzz_dog.pngal archivo xml:

python my-backgrounds.py -a space_galaxy.jpeg fuzzy_dog.png -n "Cool Galaxy" "Cute Dog"

Tenga en cuenta que el archivo xml predeterminado está en /usr/share/gnome-background-properties/my-backgrounds.xml(aquí es donde GNOME observa los xml). Para especificar un archivo xml alternativo, use la -xopción:

python my-backgrounds.py -a space_galaxy.jpeg -x ~/my-backgrounds.xml

Para eliminar entradas del archivo xml, use la -ropción:

python my-backgrounds.py -r "Cool Galaxy" fuzzy_dog.png

Esto funciona con GNOME 3.6 y Python 3.3

jameh
fuente
0

Así es como lo hago.

  1. Haga clic derecho en el Escritorio> Cambiar fondo.

  2. Haga clic en Agregar en la pestaña Fondo.

  3. Vaya a la carpeta y seleccione todos los fondos de pantalla haciendo clic en uno y presionando Ctrl+ A.

Ahora deberían mostrarse en el selector. También estoy tratando de encontrar una pequeña aplicación que haya usado, para cambiar automáticamente el fondo de pantalla. Publicaré cuando lo encuentre.

Encontré uno llamado Wally, y es muy recomendable, pero recuerdo que no lo había usado. De todos modos, puedes instalarlo escribiendo

sudo apt-get install wally

en una terminal

Para mostrar los fondos de pantalla en el selector, sin tener que actualizar manualmente la carpeta, deberá agregarlos a /usr/share/backgrounds .

También pude enumerar los fondos de pantalla en el selector, creando un enlace simbólico en la carpeta.

$ cd /usr/share/backgrounds
$ ln -s /path/to/wallpapers

Eso puede ser útil, porque no siempre es conveniente agregar fondos de pantalla a una carpeta propiedad de root cada vez.

theTuxRacer
fuente
Sé que esto importa todos los fondos de pantalla en la carpeta, pero ¿cómo hago para que compruebe la carpeta, de modo que cuando agrego más a la carpeta, aparecen automáticamente en el selector, sin tener que importarlos nuevamente?
Slipstream
@Slipstream Editó mi respuesta.
theTuxRacer
He añadido el enlace simbólico, que pensé que podría ser una manera de hacerlo antes, pero todavía parece que no aparecen allí ...
Slipstream
@Slipstream Sí, de hecho. Mi respuesta es incorrecta Vi que se agregaba la imagen, pero podría haberlos agregado manualmente, hace mucho tiempo, lo que alteró los resultados. Estoy decepcionado Apuesto a que tú también lo eres. Lo sentimos :(
theTuxRacer