Come posso impostare un'altra directory di ricerca per gli sfondi?


12

Conservo tutti i miei documenti su un'unità separata dalla mia installazione di Ubuntu e ho una cartella piena di sfondi carini su quell'unità. Come posso fare in modo che Ubuntu cerchi automaticamente questa directory in modo che gli sfondi vengano visualizzati nella finestra di dialogo del cambia-sfondi, raggiungibile facendo clic con il tasto destro sul desktop e selezionando Cambia sfondo del desktop ?

Modifica: ho provato a mettere un link simbolico nella cartella / usr / share / backgrounds sull'altra unità e non ha funzionato.


Una nota per tutte le risposte di seguito: è possibile creare $HOME/.local/share/gnome-background-properties/my-wallpapers.xmle utilizzare quello, invece di modificare i file di sfondo del sistema.
Zan Lynx,

Risposte:


9

* MODIFICA - Secondo tentativo - e si scusa immediatamente per tutto il lavoro del terminale - si spera che questo debba semplicemente copiare e incollare le voci evidenziate *

la cartella che contiene i dettagli degli sfondi di gnome si chiama /usr/share/gnome-background-properties/ubuntu-wallpapers.xml

È possibile modificare quel file per avere sottosezioni di sfondo ... / wallpaper che puntano alla nuova cartella e ai file di sfondo

Di seguito è riportato uno script modificato da questa voce del forum che rigenera automaticamente il file ubuntu-wallpapers.xml per una cartella contenente file .png e .jpg.

copia e incolla il contenuto in un nuovo file di testo chiamato "ubuntu-wallpaper-generator"

Quindi eseguire il file con la sintassi

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

Questo genererà un file chiamato ubuntu-wallpapers.xml nella stessa cartella in cui si sta eseguendo questo script.

Esegui il backup sicuro del tuo file XML corrente, ad es

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

la copia nel file appena generato

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

Ecco quel file di script a cui ho fatto riferimento:

#!/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

1
Questo imposterà la cartella solo sulla tua cartella. Devi ancora importare gli sfondi nel cambiavalute.
bdr529,

Forse non sono stato chiaro - mi dispiace per quello. Ad esempio, se la nuova cartella dello sfondo fosse in / media / <somedrive> / <somefolder>, sudo ln -s / media / <somedrive> / <somefolder> elencherebbe tutti i nuovi sfondi. Se volessi anche gli sfondi standard, copierei il contenuto della cartella degli sfondi correnti nella nuova cartella degli sfondi. Ho appena provato questo su Natty - quando ho scelto "nuovi sfondi" facendo clic con il tasto destro del mouse sul desktop, ha visualizzato il contenuto dello sfondo della nuova cartella senza "importare"
Fossfreedom

oops - ho appena visto cosa non va ...
Fossfreedom

funziona alla grande, rende il cambio carta da parati un po 'lento a causa delle immagini extra però. Grazie!
Slipstream,

Anch'io grazie. Ho inserito il tuo script e cp in un altro script e ho aggiunto "gnome-aspect-properties --show-page = background" per mostrare la finestra di dialogo di modifica. Inizio la nuova sceneggiatura dal mio menu.
bdr529,


1

ecco un aggiornamento:

    #!/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

Benvenuto in AskUbuntu! Se questa è una risposta aggiornata, potresti volerla aggiungere a quella di Fossfreedom come modifica menzionando a quale versione appartiene questa risposta aggiornata.
Oyibo,

1

Ho riscontrato lo stesso problema e ho scritto uno script Python per modificare un file XML personalizzato che può essere inserito /usr/share/gnome-background-properties/my-backgrounds.xml. È su GitHub .

Esempio di utilizzo:

Per aggiungere space_galaxy.jpege fuzz_dog.pngal file xml:

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

Si noti che il file XML predefinito è all'indirizzo /usr/share/gnome-background-properties/my-backgrounds.xml(qui GNOME controlla i file XML). Per specificare un file XML alternativo, utilizzare l' -xopzione:

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

Per rimuovere le voci dal file XML utilizzare l' -ropzione:

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

Funziona con GNOME 3.6 e Python 3.3


0

Questo è come lo faccio.

  1. Fare clic con il tasto destro sul desktop> Cambia sfondo.

  2. Fai clic su Aggiungi nella scheda Sfondo.

  3. Vai nella cartella e seleziona tutti gli sfondi, facendo clic su uno e premendo Ctrl+ A.

Ora dovrebbero essere visualizzati nel selettore. Sto anche cercando di trovare una piccola app che avevo usato per cambiare automaticamente lo sfondo. Posta male quando la trovo.

Ne ho trovato uno chiamato Wally, ed è altamente raccomandato, ma ricordo di non averlo usato. Ad ogni modo, puoi installarlo digitando

sudo apt-get install wally

in un terminale.

Per mostrare gli sfondi nel selettore, senza dover aggiornare manualmente la cartella, dovrai aggiungerli /usr/share/backgrounds.

Sono stato anche in grado di elencare gli sfondi nel selettore, creando un collegamento simbolico nella cartella.

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

Questo potrebbe essere utile, perché potrebbe non essere sempre conveniente aggiungere sfondi a una cartella di proprietà di root ogni volta.


So che importa tutti gli sfondi nella cartella, ma come ottengo che controlli la cartella, quindi quando aggiungo più alla cartella, appaiono automaticamente nel selettore, senza doverli importare di nuovo?
Slipstream,

@Slipstream Modificato la mia risposta.
theTuxRacer,

Ho aggiunto il collegamento simbolico, che pensavo potesse essere un modo per farlo prima, ma non sembrano ancora mostrarsi lì ...
Slipstream,

@Slipstream Sì, davvero. La mia risposta non è corretta Ho visto l'illustrazione aggiunta, ma avrei potuto aggiungerli manualmente, molto tempo fa, che ha incasinato i risultati. Sono deluso. Scommetto che lo sei anche tu. Siamo spiacenti :(
theTuxRacer,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.