2015-01-11 25 views
1

我試圖在Kali Linux中使用Debian 7.6 x86_64和GNOME 3.4.2編寫shell腳本,每次系統啓動時都會從後臺桌面壁紙中獲取文件一個目錄並隨機選擇它們,並在一個時間間隔內,如服務或守護進程。我不想在每次啓動時都通過終端手動執行它,這就是原因,因爲我打開的問題與本網站中其他人非常相似,但不一樣。我所做的就是在退出0行之前將下一行放在rc.local中:sh/etc/my_scripts/wallpaper,壁紙腳本內容我寫下的代碼。 但它並不是什麼。我認爲問題在於操作系統無法識別用戶有效和真實的UID和GID,因爲我沒有通過終端執行腳本,也無法訪問環境變量,因此它不會訪問環境變量,不知道誰創建了這個過程,並且沒有改變壁紙。我做了一個使用函數seteuid(),setuid(),setegid(),setgid()和運行在rc.local中的同一行的system()函數的C程序,它不起作用。我也嘗試過LSBize腳本,並將其複製到/etc/init.d目錄中,並使用update-rc.d命令創建指向/etc/rcX.d目錄的符號鏈接,以及desktop-nova或cortina等程序這不起作用。 那麼,我能做些什麼來達到我的目標?感謝和抱歉我的英文和廣泛的文本。shell腳本每次系統啓動時更換壁紙

#!/bin/sh 

wallpaper_changer() 
{ 
    wallpapers=/home/linuxsoldier/Pictures/Favorites2/* 
    while true 
    do 
     wallpaper=`ls $wallpapers | shuf -n1 ` 
     gsettings set org.gnome.desktop.background picture-uri file://"$wallpaper" 
     sleep 15m 
    done 
} 

wallpaper_changer & #To run it in background. 

回答

0

您正在使用的腳本似乎有錯誤。您必須在使用gsetting命令設置背景圖像時提供文件的完整絕對路徑。

正確的功能將如圖6-8所示:

wallpaper_changer() 
{ 
    wallpapers=/home/linuxsoldier/Pictures/Favorites2/* 
    while true 
    do 
     wallpaper=`ls -d -1 $wallpapers | shuf -n1 ` 
     gsettings set org.gnome.desktop.background picture-uri file://"$wallpaper" 
     sleep 15m 
    done 
} 

希望它能幫助。

+0

在我的代碼中,ls命令輸出文件的絕對路徑並將其保存在壁紙變量中。所有這些壁紙變量的內容字符串都是這樣的:/home/linuxsoldier/Pictures/Favorites2/landscape.jpg。當我在gsettings命令中替換它時,文件圖像保持如下所示:gsettings set org.gnome.desktop.background picture-uri file:///home/linuxsoldier/Pictures/Favorites2/landscape.jpg這是正確的格式將文件傳遞給命令。我不認爲這可能是問題。 – linuxsoldier