Shell script изменить обои для рабочего стола

Не могли бы вы написать простейшую возможную оболочку script, которая будет менять обои рабочего стола (в Ubuntu) через регулярные промежутки времени (например, 1 минута).

Обои будут сохранены в определенном каталоге (например, $HOME/wallpapers). Мне нужны только базовые функции.

1) выберите случайные обои из $HOME/wallpapers
2) установите его как обои на рабочий стол
3) установите cron для запуска script каждую минуту (не часть вопроса).

Ответ 1

#!/bin/bash
wallpaperdir='$HOME/wallpaper'

files=($wallpaperdir/*)
randompic=`printf "%s\n" "${files[RANDOM % ${#files[@]}]}"`

gconftool-2 -t str --set /desktop/gnome/background/picture_filename "$randompic"

Сохраните этот script и отредактируйте его с помощью команды "crontab -e" (он запускает редактор, в который вы помещаете эту строку в конец файла):

*/1     *     *     *     *         /bin/bash /path/to/script.sh

edit: Я предположил, что вы используете gnome. Если нет, вам нужно отредактировать последнюю строку, потому что в моем примере используется Gnome Conftool.;)

Чтобы изменить фон в XFCE, вы должны изменить строку с gconftool-2 на:

echo -e "# xfce backdrop list\n$randompic">$HOME/.config/xfce4/desktop/backdrops.list    
killall -USR1 xfdesktop

Ответ 2

Это только мой подход по этому вопросу. Я не утверждаю, что это идеальный вариант.

WALLS_PATH=/path/to/images
cd $WALLS_PATH

while [ 1 ]; do
    for NEW_WALL in "$WALLS_PATH"/*; do
        gsettings set org.gnome.desktop.background picture-uri "file://${NEW_WALL}"
        sleep 1800
    done
done

Ответ 3

Я знаю, что этот ответ немного поздний, но поскольку он может помочь некоторым людям, я публикую его.

Из кода septi плюс некоторые изменения, вот мое решение:

#!/bin/bash
wallpaperdir="$HOME/wallpaper"

files=($wallpaperdir/*)
randompic=`printf "%s\n" "${files[RANDOM % ${#files[@]}]}"`

echo -e "# xfce backdrop list\n$randompic">$HOME/.config/xfce4/desktop/backdrop.list
xfdesktop --reload

Одиночные кавычки должны быть заменены двойными кавычками, чтобы компьютер правильно интерпретировал $HOME. Кроме того, файл, который вы хотите изменить, - это backdrop.list, а не backdrops.list. И, наконец, я считаю, что использование killall в этом случае является чрезмерным, поскольку вы можете просто перезагрузить xfdesktop.

Я тестировал его на своем компьютере (Linux Mint Debian Edition) и, похоже, работает отлично.

Надеюсь, это поможет. =)

EDIT: Я забыл упомянуть, что вам нужно добавить DISPLAY =: 0.0 перед вашей командой, в crontab. Это дает

*/1 * * * * DISPLAY=:0.0 wallpaper.sh

Ответ 4

Это работало для меня в Gnome:

#!/bin/bash

DIR="/home/user/Pictures/wallpapers"
PIC=$(find $DIR -type f -maxdepth 1 | shuf -n1)
gsettings set org.gnome.desktop.background picture-uri "file://$PIC"

Ответ 5

Попробуйте это в новом Ubuntus: gsettings set org.gnome.desktop.background picture-uri file:///path/to/img.jpg (подсказка от здесь)

Ответ 6

Для gnome3 вам нужно использовать gsettings вместо gconftool.

Но если вы собираетесь выполнить script throught cron, это не сработает.

Я пробовал много скриптов .sh, но никто не работает для меня.

В конце я исправил его с помощью этого python script, который загружает случайные обои из папки:

#!/usr/bin/env python
#coding: utf8 

import os,random
setup = "/path_to_folder/" + random.choice(os.listdir("/path_to_folder/"))
os.system("DISPLAY=:0 GSETTINGS_BACKEND=dconf gsettings set org.gnome.desktop.background picture-uri  'file://%s'" %(setup))

Надеюсь, это поможет кому-то с моей же проблемой!