[分享]讓你的icewm能隨意更改桌面

歡迎提問 debian desktop 相關問題,何謂 desktop ? 舉凡您日常生活會用到的部份,如上網 ( www 、 bbs ..) 、程式設計、繪圖...等等。 通常以 X Window 環境底下問題為主。

[分享]讓你的icewm能隨意更改桌面

文章huki » 週日 12月 14, 2003 8:41 am

這兩天看書看到累時
就無聊有個想法
就是我希望我的icewm能做到像是阿里巴巴包的knoppix一樣,
可以隨意更改桌佈,但是卻可以在以後開機之後,
就載入我最後選擇的圖檔當桌面,省去每次要修改設定檔的
所以就寫了一個簡易的shell script

首先先安裝chbg這個套件讓你能在執行icewm期間就可以動態修改桌面
再來就是自動取代的shellscript啦!
名字叫chWallpaper.sh,內容如下
代碼: 選擇全部
#!/bin/sh
#換成指定的圖檔
chbg -bg "#8aff6b" -mode center /usr/share/wallpaper/$1
#先去判斷是用那個theme
t=`perl -ne 'print "$1" if /Theme="([\S]*)"/' < ~/.icewm/theme`
#再判斷default.theme裡是不是有設定DesktopBackgroundImage
test=`perl -ne 'print "$1" if /(DesktopBackgroundImage)[\S]*/' < .icewm/themes/$t`
#若沒有設定,就在default.theme裡加一行,若有就去取代成我們要的圖檔
if test -z $test
then
  echo 'DesktopBackgroundImage="/usr/share/wallpaper/'$1'"' >> .icewm/themes/$t
else
  perl -pe 's#(DesktopBackgroundImage="/usr/share/wallpaper/)\S*"#$1'$1'"#g' < .icewm/themes/$t > ./tochange
  cp ./tochange .icewm/themes/$t
  rm ./tochange
fi


然後在自己的.icewm/toolbar裡加入你要的圖檔的程式
代碼: 選擇全部
menu "更換桌佈" wallpaper {
   prog "sword1.jpg" theme chWallpaper.sh sword1.jpg
   prog "fondo1.jpg" theme chWallpaper.sh fondo1.jpg
   prog "debian.jpg" theme chWallpaper.sh debian.jpg
   prog "SuckWin.jpg" theme chWallpaper.sh SuckWin.jpg
   prog "debian1.jpg" theme chWallpaper.sh debian1.jpg
   prog "dsc00828.jpg" theme chWallpaper.sh OurPicture/dsc00828.jpg
   prog "dsc00836.jpg" theme chWallpaper.sh OurPicture/dsc00836.jpg
   prog "dsc00842.jpg" theme chWallpaper.sh OurPicture/dsc00842.jpg
   prog "Our_Img09.JPG" theme chWallpaper.sh OurPicture/Our_Img09.JPG
}


如此就完成了,不過因為我的桌佈都是放在同一個目錄之下才能這樣做喔!
大家稍做修改就能變成自己適合的囉!
若有興趣修改小弟很差的程式
歡迎歡迎~~~不過寄的寄一份給小弟我
讓我也學學^^,謝謝
希望能帶給大家便利

ps.感謝朝貴老師的perl講義,和evillon的提示^^ :ooops:
Linux給我的感覺就是自由自在,沒有壓力
希望大家都能參與linux
變成linux世界的一份子
HuKi
頭像
huki
快樂的大學生
快樂的大學生
 
文章: 783
註冊時間: 週四 11月 28, 2002 7:27 am
來自: 家:中壢/公:桃園

re:[分享]讓你的icewm能隨意更改桌面

文章Tetralet » 週日 12月 14, 2003 1:51 pm

謝謝您的分享!


我還有一個想法...

既然 chbg 可以變換 IceWM 的底圖,
那麼我們可以寫一個小小的 Script 來每 10 分鐘就變換一次底圖呀!
這樣子應該蠻有趣的...
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm

re:[分享]讓你的icewm能隨意更改桌面

文章huki » 週日 12月 14, 2003 2:47 pm

Tetralet大大,加油~~~~
寫好記得通知一下喔! :-P
Linux給我的感覺就是自由自在,沒有壓力
希望大家都能參與linux
變成linux世界的一份子
HuKi
頭像
huki
快樂的大學生
快樂的大學生
 
文章: 783
註冊時間: 週四 11月 28, 2002 7:27 am
來自: 家:中壢/公:桃園

re:[分享]讓你的icewm能隨意更改桌面

文章louie » 週日 12月 14, 2003 2:57 pm

對啊, 我都是放在 crontab 中去換桌布的
另外再介紹幾個也滿好用的換桌布軟體
qiv 及 wallp。

P.S. wallp 所換的背景可用配合 Eterm 或 Mlterm 來做透明(transparency),
但 qiv 則不行。

另外請教各位大大一個問題, 目前小弟由於是放在 cron 中, 在切換桌布之前, 都會去判斷是否目前有開 X, 才不會發現 can't open display 類的錯誤訊息, 我的方式為:


也分享一個 script
亂數換桌布的 script

if [ ! -s /tmp/wallpaper.lst ];
then
count=`find /home/louie/wallpaper/ -name "*" -type f -print | tee /tmp/wallpaper.lst | wc -l`
else
count=`cat /tmp/wallpaper.lst|wc -l`
fi
random=$RANDOM
while [ $random -lt $count ]; do
random=$RANDOM
done
line=`/usr/bin/expr $random % $count`

filename=`/usr/bin/head -n $line /tmp/wallpaper.lst | /usr/bin/tail -n 1`
echo "filename = "$filename > /tmp/wallpaper.lst.current

if [ -e /tmp/.X0-lock ] ;
then
export DISPLAY=:0
# qiv --root --random --scale_down --display :$DISPLAY --recursive ~/wallpaper/
wallp -style center -quit $filename
exit
done
fi


可是總覺得用 /tmp/.X0-lock 去判斷不是很好的方法, 請問有更好的方式嗎 ?

P.S.2 在 /tmp 下會產生二個檔案
wallpaper.lst 為全部圖檔的列表
wallpaper.lst.current 則是目前在螢幕上那張圖的檔名(以方便其他用途)
louie
快樂的大學生
快樂的大學生
 
文章: 593
註冊時間: 週一 9月 09, 2002 7:58 pm

re:[分享]讓你的icewm能隨意更改桌面

文章Tetralet » 週日 12月 14, 2003 4:37 pm

huki 寫:Tetralet大大,加油~~~~
寫好記得通知一下喔! :-P


我只是做個小小的建議而已,
沒有說要寫呀呀呀呀呀呀呀呀呀呀!!!
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm

re:[分享]讓你的icewm能隨意更改桌面

文章Tetralet » 週日 12月 14, 2003 4:39 pm

louie 寫:可是總覺得用 /tmp/.X0-lock 去判斷不是很好的方法, 請問有更好的方式嗎 ?


用 $DISPLAY 來判斷呢?
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm

re:[分享]讓你的icewm能隨意更改桌面

文章evillon » 週日 12月 14, 2003 5:13 pm

huki 越來越有朝貴老師ㄉ影子囉 :-D

小弟是一直有個疑問
會 perl 要不要學 sed & awk 呢?
因為我只上過朝貴老師ㄉ perl :ooops:
頭像
evillon
可愛的小學生
可愛的小學生
 
文章: 38
註冊時間: 週日 9月 07, 2003 3:42 pm
來自: CYUT

re:[分享]讓你的icewm能隨意更改桌面

文章Tetralet » 週日 12月 14, 2003 5:22 pm

huki 寫:Tetralet大大,加油~~~~
寫好記得通知一下喔! :-P


好吧,那只好獻醜了...

代碼: 選擇全部
#!/bin/bash

# 參數設定...
WallPaperPath="/usr/share/wallpapers/"
ImageType="*.png *.jpg *.gif *.bmp *.tif"
SleepTime=600


# 去掉 $WallPaperPath 後面的 "/" (如果有的話... )
WallPaperPath=$(echo $WallPaperPath | sed s/"\/$"/""/ -)

if [ $DISPLAY ]; then
   while [ /bin/true ];
   do
      CountImage=0
      cd $WallPaperPath
      for WallPapers in $ImageType
      do
         if [ -f $WallPaperPath/$WallPapers ]; then
            echo "Change Wall Paper To [ $WallPaperPath/$WallPapers ]..."
            wallp -style center -quit $WallPaperPath/$WallPapers
            CountImage=1
            sleep $SleepTime
         fi
      done
      
      if [ $CountImage -eq 0 ]; then
         echo "Sorry, Can NOT Find Any Image!!!"
         break
      fi
   done
else
   echo 'Sorry, Can NOT Open $DISPLAY!!!'
fi


注:可以判斷 $DISPLAY
  如果找不到任何圖片會自我結束
  在設定之前會再確認圖片是否存在
  參數設定位於最前面
  請將本 Script 檔放在 /etc/X11/xinit/xinitrc 裡

敬請多多批評指教!
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm

re:[分享]讓你的icewm能隨意更改桌面

文章Tetralet » 週一 12月 15, 2003 12:11 am

以您的 Script 中的一小段為例,

louie 寫:find /home/louie/wallpaper/ -name "*" -type f -print | tee /tmp/wallpaper.lst


如果檔案名稱包含了空白 " " 或是負號 "-" 時,
後面指令就會出問題。

例:檔案名稱:"ABC DEF.jpg",要把它給刪掉...

代碼: 選擇全部
find ./ -name "ABC DEF.jpg" -print | xargs rm
rm: cannot remove ‘./ABC’: 沒有此一檔案或目錄
rm: cannot remove ‘DEF.jpg’: 沒有此一檔案或目錄


請教一下有什麼比較好的解決方法呢?
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm

re:[分享]讓你的icewm能隨意更改桌面

文章damon » 週一 12月 15, 2003 9:52 am

:finger1:
huki大大果然是有洪教授在的學校的高材生
damon
活潑的高中生
活潑的高中生
 
文章: 358
註冊時間: 週二 9月 10, 2002 5:42 pm


回到 debian desktop

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客