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))
Надеюсь, это поможет кому-то с моей же проблемой!