Bagaimana cara mengatur direktori pencarian lain untuk wallpaper?

12

Saya menyimpan semua dokumen saya di drive terpisah dari instalasi ubuntu saya, dan saya memiliki folder yang penuh dengan wallpaper bagus di drive itu. Bagaimana saya bisa membuat ubuntu mencari direktori ini secara otomatis sehingga wallpaper muncul dalam dialog changer wallpaper, dicapai dari mengklik kanan pada desktop dan memilih Ubah Wallpaper Desktop ?

Sunting: Saya sudah mencoba meletakkan symlink di folder / usr / share / latar belakang ke drive lain dan itu tidak berhasil.

Slipstream
sumber
Catatan untuk semua jawaban di bawah ini: Anda dapat membuat $HOME/.local/share/gnome-background-properties/my-wallpapers.xmldan menggunakannya, alih-alih mengedit file latar belakang sistem.
Zan Lynx

Jawaban:

9

* EDIT - Percobaan kedua - dan segera minta maaf untuk semua pekerjaan terminal - semoga ini hanya menyalin dan menempelkan entri yang disorot *

folder yang menyimpan detail wallpaper gnome disebut /usr/share/gnome-background-properties/ubuntu-wallpapers.xml

Anda dapat mengedit file tersebut untuk memiliki sub-bagian wallpaper ... / wallpaper yang menunjuk ke folder & file wallpaper baru Anda

Di bawah ini adalah skrip yang diubah dari entri forum ini yang akan membuat ulang file ubuntu-wallpapers.xml secara otomatis untuk folder yang berisi file .png dan .jpg.

salin dan tempel konten ke file teks baru yang disebut "ubuntu-wallpaper-generator"

Kemudian jalankan file dengan sintaks

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

Ini akan menghasilkan file bernama ubuntu-wallpapers.xml di folder yang sama dengan tempat Anda menjalankan skrip ini.

Dengan aman membuat cadangan file xml Anda saat ini yaitu

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

salinan di file yang baru dibuat

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

Ini adalah file skrip yang saya maksud:

#!/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
kebebasan fosil
sumber
1
Ini hanya akan mengatur folder ke folder Anda sendiri. Anda masih harus mengimpor wallpaper ke changer.
bdr529
Mungkin saya belum jelas - maaf tentang itu. Misalnya, jika folder wallpaper baru Anda berada di / media / <somedrive> / <somefolder> maka sudo ln -s / media / <somedrive> / <somefolder> latar belakang akan mencantumkan semua wallpaper baru Anda. Jika Anda ingin juga wallpaper standar, maka saya hanya akan menyalin konten folder latar belakang saat ini ke folder wallpaper baru Anda. Saya baru saja menguji ini pada Natty - ketika saya memilih "latar belakang baru" dari mengklik kanan desktop, itu ditampilkan isi wallpaper folder baru tanpa "mengimpor"
fossfreedom
oops - baru saja melihat apa yang salah ...
fossfreedom
berfungsi dengan baik, membuat wallpaper changer berjalan sedikit lambat karena gambar tambahannya. Terima kasih!
Slipstream
Aku juga terima kasih. Saya meletakkan skrip dan cp di skrip lain dan menambahkan "gnome-appearance-properties --show-page = background" untuk menampilkan dialog perubahan. Saya memulai skrip baru dari menu saya.
bdr529
1

Inilah pembaruan:

    #!/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
sumber
Selamat datang di AskUbuntu! Jika ini adalah jawaban yang diperbarui, Anda mungkin ingin menambahkannya ke jawaban Fossfreedom sebagai pengeditan sambil menyebutkan versi yang terkait dengan jawaban yang diperbarui ini.
Oyibo
1

Saya menghadapi masalah yang sama, dan saya menulis skrip python untuk mengedit file xml khusus yang dapat ditempatkan /usr/share/gnome-background-properties/my-backgrounds.xml. Ada di GitHub .

Contoh penggunaan:

Untuk menambah space_galaxy.jpegdan fuzz_dog.pngke file xml:

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

Perhatikan bahwa file xml default berada di /usr/share/gnome-background-properties/my-backgrounds.xml(ini adalah tempat GNOME mengawasi xml's). Untuk menentukan file xml alternatif, gunakan -xopsi:

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

Untuk menghapus entri dari file xml gunakan -ropsi:

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

Ini berfungsi dengan GNOME 3.6 dan Python 3.3

jameh
sumber
0

Beginilah cara saya melakukannya.

  1. Klik kanan pada Desktop> Ubah Latar Belakang.

  2. Klik Tambah pada Tab Latar Belakang.

  3. Pergi ke folder, dan pilih semua wallpaper, dengan mengklik salah satu, dan menekan Ctrl+ A.

Mereka sekarang harus ditampilkan di pemilih. Saya juga mencoba menemukan aplikasi kecil yang saya gunakan, untuk mengubah wallpaper secara otomatis. Posting buruk ketika saya menemukannya.

Saya menemukan satu yang disebut Wally, dan itu sangat dianjurkan, tetapi saya ingat saya belum pernah menggunakannya. Bagaimanapun, Anda dapat menginstalnya dengan mengetik

sudo apt-get install wally

di terminal.

Untuk menampilkan wallpaper di pemilih, tanpa harus memperbarui folder secara manual, Anda harus menambahkannya /usr/share/backgrounds.

Saya juga dapat membuat daftar wallpaper di pemilih, dengan membuat symlink di folder.

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

Itu mungkin membantu, karena mungkin tidak selalu nyaman untuk menambahkan wallpaper ke folder yang dimiliki oleh root setiap saat.

theTuxRacer
sumber
Saya tahu ini mengimpor semua wallpaper di folder, tetapi bagaimana cara mendapatkannya untuk memeriksa folder, jadi ketika saya menambahkan lebih banyak ke folder, secara otomatis akan muncul di pemilih, tanpa harus mengimpor lagi?
Slipstream
@ Slstream Mengedit jawaban saya.
theTuxRacer
Saya menambahkan symlink, yang saya pikir mungkin menjadi salah satu cara untuk melakukannya sebelumnya tetapi mereka tampaknya tidak muncul di sana ...
Slipstream
@ Slstream Ya, memang. Jawaban saya salah. Saya melihat gambar itu ditambahkan, tetapi saya mungkin telah menambahkannya secara manual, dulu sekali, yang mengacaukan hasilnya. Saya kecewa. Taruhan juga. Maaf :(
theTuxRacer