Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 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))

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