2011-04-05 81 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