你能写出最简单的 shell 脚本来定期(例如 1 分钟)更改桌面墙纸(在 Ubuntu 中)吗?
壁纸将保存在特定目录中(例如 $HOME/wallpapers)。 我只需要基本功能。
1)从
$HOME/wallpapers
#!/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
我知道这个答案有点晚了,但是因为它可以帮助某些人,所以我发布了它。
根据 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
这只是我在这件事上的做法。我不认为这是理想的。
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
在较新的 Ubuntu 中尝试这个:
gsettings set org.gnome.desktop.background picture-uri file:///path/to/img.jpg
(来自here的提示)
对于 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))
希望对遇到同样问题的人有所帮助!
这在 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"
不幸的是,仅凭
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
}
我刚刚推出了一个免费的随机壁纸应用程序就是这样做的。