Shell脚本换桌面墙纸

问题描述 投票:0回答:7

你能写出最简单的 shell 脚本来定期(例如 1 分钟)更改桌面墙纸(在 Ubuntu 中)吗?

壁纸将保存在特定目录中(例如 $HOME/wallpapers)。 我只需要基本功能。

1)从

$HOME/wallpapers

中选择随机壁纸 2) 设置为桌面墙纸
3)设置cron每分钟运行一次脚本(不是问题的一部分)。

bash shell gnome wallpaper
7个回答
14
投票
#!/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"

保存此脚本并使用命令“crontab -e”进行编辑(它会启动一个编辑器,您可以将此行放在文件末尾):

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

编辑:我假设你使用的是 gnome。如果不是,您需要编辑最后一行,因为我的示例使用了 Gnome Conftool。 ;)

要在 XFCE 中更改背景,您应该将带有 gconftool-2 的行更改为:

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

4
投票

我知道这个答案有点晚了,但是因为它可以帮助某些人,所以我发布了它。

根据 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 版)上测试过了,它似乎运行得很好。

希望有帮助。 =)

编辑:我忘了提到您必须在 crontab 中的命令之前添加 DISPLAY=:0.0。这给

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

3
投票

这只是我在这件事上的做法。我不认为这是理想的。

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

2
投票

在较新的 Ubuntu 中尝试这个:

gsettings set org.gnome.desktop.background picture-uri file:///path/to/img.jpg
(来自here的提示)


2
投票

对于 gnome3,您需要使用 gsettings 而不是 gconftool。

但是,如果您要通过 cron 执行脚本,它将无法工作。

我尝试了很多 .sh 脚本,但没有一个适合我。

最后,我使用这个从文件夹加载随机壁纸的 python 脚本修复了它:

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

希望对遇到同样问题的人有所帮助!


1
投票

这在 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"

0
投票

不幸的是,仅凭

random
功能并不能解决问题。

可以再次选择相同的文件。这很烦人。

你需要这样的东西

  shuffle(items: string[]) {
    console.log('shuffling...')
    this.items = items.reduce(
      ([original, shuffled]) =>
        [original, [...shuffled, ...original.splice(Math.random() * original.length | 0, 1)]],
      [[...items], []]
    )[1]
    this.cursor = undefined
    return this.items
  }

我刚刚推出了一个免费的随机壁纸应用程序就是这样做的。

© www.soinside.com 2019 - 2024. All rights reserved.