2011-04-05 55 views
10

您能编写最简单的shell脚本,它会定期更改桌面墙纸(在Ubuntu中)(例如1分钟)。Shell脚本更换桌面壁纸

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

1)选择$HOME/wallpapers
2随机墙纸)将其设置为墙纸在桌面上
3)设定cron来运行每分钟(的问题不属于脚本)。

+0

也许这应该askubuntu.com问? – Kaivosukeltaja 2011-04-05 11:15:45

+6

这里有5259个问答,标签bash。在askubuntu上只有144.问题是关于编程。 Ubuntu更多的是关于桌面环境。 – xralf 2011-04-05 12:21:54

+0

基本上这个答案取决于你的**桌面环境** /窗口管理器。这个问题中的每个人,包括OP似乎使用Gnome,所以使用gnome工具的答案很有效。对于使用KDE/XFCE/LXDE/MATE /其他浏览器的未来访问者,请问您的DE如何以编程方式设置其壁纸。 – 2017-07-16 21:45:43

回答

7
#!/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 
+0

谢谢。我正在使用gnome和xfce。你知道如何在XFCE中改变它吗? – xralf 2011-04-05 12:11:08

+0

我用过 '#!/ bin/bash
files =(/ home/xralf/wallpapers/*)
randompic ='printf“%s \ n”“$ {files [RANDOM%$ {#files [ ]}]}“'
CP ”$ randompic“ desktop_picture.jpg
CP desktop_picture.jpg在/ usr /共享/ XFCE4 /背景
killall xfdesktop在
xfdesktop' 但预计它不工作。 – xralf 2011-04-05 12:17:41

+0

我编辑了我的第一个答案,因为评论功能对于发布代码并不是非常有用;-) – tamasgal 2011-04-05 12:21:34

0

试试这个在新Ubuntus:)我知道这gsettings set org.gnome.desktop.background picture-uri file:///path/to/img.jpg(尖从here

1

答案有点晚了,但因为它可以帮助一些人,所以我发布了它。

从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)上测试过它,并且它看起来很完美。

希望它有帮助。 =)

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

*/1 * * * * DISPLAY=:0.0 wallpaper.sh 
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 
-1

对于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)) 

希望它可以帮助的人与我同样的问题!

0

这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

一个简短的说明:不要依赖/解析'ls'结果,'find'更适合。 – 2017-10-12 08:17:10