<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Thinking more...-Linux 及其相關</title>
<link>http://blog.roodo.com/thinkingmore/archives/cat_82806.html</link>
<description>Just thinking more...&amp;nbsp;訂閱 RSS

var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
document.write(unescape(&quot;%3Cscript src=&#039;&quot; + gaJsHost + &quot;google-analytics.com/ga.js&#039; type=&#039;text/javascript&#039;%3E%3C/script%3E&quot;));















  google.load(&quot;jquery&quot;, &quot;1.2&quot;);
  google.setOnLoadCallback( function() {
    try {
      var pageTracker = _gat._getTracker(&quot;UA-97150-7&quot;);
      pageTracker._trackPageview();
    }catch(err) {}
    $(&quot;pre &gt; br&quot;).each( function() { $(this).replaceWith( &quot;\n&quot; ); } );
    $(&quot;textarea &gt; br&quot;).each( function() { $(this).replaceWith( &quot;\n&quot; ); } );
    SyntaxHighlighter.config.ClipboardSwf = &#039;http://alexgorbatchev.com/pub/sh/2.0.296/scripts/clipboard.swf&#039;;
    SyntaxHighlighter.all();
    dp.SyntaxHighlighter.ClipboardSwf = &#039;http://alexgorbatchev.com/pub/sh/2.0.296/scripts/clipboard.swf&#039;;
    dp.SyntaxHighlighter.HighlightAll(&#039;code&#039;);
  } );

</description>
<language>zh-tw</language>
<generator>Roodo Blog System</generator>
<copyright>All Rights Reserved</copyright>
<atom:link href="http://blog.roodo.com/thinkingmore/archives/cat_82806.xml" rel="self" type="application/rss+xml" />
<item>
	<title>gwibber 的 spell 問題</title>
	<description><![CDATA[
			如果你用 gwibber 時，碰到下面錯誤的話，這是因為沒有中文的 aspell 資料檔的關係：File "/usr/lib/python2.6/dist-packages/gwibber/gwui.py", line 455, in __init__
    self.spell = gtkspell.Spell(self, None)
glib.GError: enchant error for language: zh_TW.UTF-8


解法很簡單，修改 /usr/lib/python2.6/dist-packages/gwibber/gwui.py 把 455 行的前後加上 exception handling 即可：
try:
  self.spell = gtkspell.Spell( self, None )
except:
  pass


修改時要注意縮排問題，python 對這點可是很講究的!

		]]>
	</description>
	<content:encoded><![CDATA[
			如果你用 gwibber 時，碰到下面錯誤的話，這是因為沒有中文的 aspell 資料檔的關係：<pre>File "/usr/lib/python2.6/dist-packages/gwibber/gwui.py", line 455, in __init__
    self.spell = gtkspell.Spell(self, None)
glib.GError: enchant error for language: zh_TW.UTF-8
</pre>

解法很簡單，修改 /usr/lib/python2.6/dist-packages/gwibber/gwui.py 把 455 行的前後加上 exception handling 即可：<pre name="code" class="python">
try:
  self.spell = gtkspell.Spell( self, None )
except:
  pass
</pre>

修改時要注意縮排問題，python 對這點可是很講究的!

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/10573467.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/10573467.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Thu, 05 Nov 2009 10:22:16 +0800</pubDate>
</item>
<item>
	<title>解決 opera 10 不能用 ibus 問題</title>
	<description><![CDATA[
			環境：
Ubuntu 9.10
Opera 10
輸入法：ibus

解決方法：
編輯 /usr/bin/opera，在 OPERA_BINARYDIR 之下加上export QT_IM_MODULE=XIM，然後重新啟動就行了。

		]]>
	</description>
	<content:encoded><![CDATA[
			環境：<br />
Ubuntu 9.10<br />
Opera 10<br />
輸入法：ibus<br />
<br />
解決方法：<br />
編輯 /usr/bin/opera，在 OPERA_BINARYDIR 之下加上<pre>export QT_IM_MODULE=XIM</pre>，然後重新啟動就行了。<br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/10327945.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/10327945.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Thu, 15 Oct 2009 10:59:29 +0800</pubDate>
</item>
<item>
	<title>grub 從不是第1個硬碟開機</title>
	<description><![CDATA[
			我承認，這標題下的很爛，但一時也想不到更好的。

情況是這樣的，我第一個硬碟已經裝了 Linux，這時候我卻想裝 Windows，是故，我只能裝在第二個硬碟上。Windows 非常機車，如果第一個硬碟沒有 NTFS 的 partition 是不給你裝的。這時候只能先拔第一個硬碟的電源，把 Windows 裝到第二個硬碟上之後，再重新把第一個硬碟的電源裝回去。

接下來，因為不想老是在 BIOS 裡切換開機順序，所以把腦筋動到 grub 上。根據 grub 的 manual，只要利用 map 就行了，但我還是試了好一陣子，後來才發現是順序的問題，我試的時候把 map 放到最前面去了。正確的順序是這樣的：
title		Windows XP
root		(hd1,0)
makeactive
map (hd0) (hd1)
map (hd1) (hd0)
chainloader	+1


這樣就可以不用在 BIOS 裡切換開機順序了。如果你不是用第二個硬碟，而是第3個或第四個硬碟，只要類推為 hd2、hd3 即可。

		]]>
	</description>
	<content:encoded><![CDATA[
			我承認，這標題下的很爛，但一時也想不到更好的。<br/>
<br/>
情況是這樣的，我第一個硬碟已經裝了 Linux，這時候我卻想裝 Windows，是故，我只能裝在第二個硬碟上。Windows 非常機車，如果第一個硬碟沒有 NTFS 的 partition 是不給你裝的。這時候只能先拔第一個硬碟的電源，把 Windows 裝到第二個硬碟上之後，再重新把第一個硬碟的電源裝回去。<br/>
<br/>
接下來，因為不想老是在 BIOS 裡切換開機順序，所以把腦筋動到 grub 上。根據 grub 的 manual，只要利用 map 就行了，但我還是試了好一陣子，後來才發現是順序的問題，我試的時候把 map 放到最前面去了。正確的順序是這樣的：<pre>
title		Windows XP
root		(hd1,0)
makeactive
map (hd0) (hd1)
map (hd1) (hd0)
chainloader	+1
</pre>
<br/>
這樣就可以不用在 BIOS 裡切換開機順序了。如果你不是用第二個硬碟，而是第3個或第四個硬碟，只要類推為 hd2、hd3 即可。<br/>

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/10313523.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/10313523.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Wed, 14 Oct 2009 00:05:25 +0800</pubDate>
</item>
<item>
	<title>wine 的選單</title>
	<description><![CDATA[
			我用的是 Ubuntu。

用 wine 安裝程式以後，Wine 選單裡會多出該程式的項目，但移除程式以後，這些項目還存在，即便你之前有備份 .wine，將備份檔案回存了，也不會有用。關鍵在於 wine 其實是把這些選單項目放在 $HOME/.config/menus/applications-merged 下，所以只要把該刪除的項目從這個資料夾下刪除即可。

2009/10/14 補充：$HOME/.local/share/applications/wine/Programs 下的也要記得刪掉，否則會出現在"其他"選單裡...

		]]>
	</description>
	<content:encoded><![CDATA[
			我用的是 Ubuntu。<br />
<br />
用 wine 安裝程式以後，Wine 選單裡會多出該程式的項目，但移除程式以後，這些項目還存在，即便你之前有備份 .wine，將備份檔案回存了，也不會有用。關鍵在於 wine 其實是把這些選單項目放在 $HOME/.config/menus/applications-merged 下，所以只要把該刪除的項目從這個資料夾下刪除即可。<br />
<br />
2009/10/14 補充：$HOME/.local/share/applications/wine/Programs 下的也要記得刪掉，否則會出現在"其他"選單裡...<br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/10304353.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/10304353.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Mon, 12 Oct 2009 16:56:48 +0800</pubDate>
</item>
<item>
	<title>Mustek Bearpaw 1200TA in Ubuntu</title>
	<description><![CDATA[
			如果你正好用的掃描器跟我一樣是 Mustek BearPaw 1200TA 或者是開啟 xsane 遇到 gt68xx:libusb 錯誤時，你可以試著到這裡：SANE GT68xx Backend Homepage 去下載適當的 .usb 檔案。下載以後，把它複製到 /usr/share/sane/gt68xx 目錄下，變更權限為 a+r，然後重新開啟 xsane，這樣就能正常使用掃描器了。

		]]>
	</description>
	<content:encoded><![CDATA[
			如果你正好用的掃描器跟我一樣是 Mustek BearPaw 1200TA 或者是開啟 xsane 遇到 gt68xx:libusb 錯誤時，你可以試著到這裡：<a href="http://meier-geinitz.de/sane/gt68xx-backend/">SANE GT68xx Backend Homepage</a> 去下載適當的 .usb 檔案。下載以後，把它複製到 /usr/share/sane/gt68xx 目錄下，變更權限為 a+r，然後重新開啟 xsane，這樣就能正常使用掃描器了。<br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/10164151.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/10164151.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Fri, 02 Oct 2009 11:35:26 +0800</pubDate>
</item>
<item>
	<title>在 Ubuntu 9.04 使用 svk 出現 Can&#039;t locate Time/Progress.pm</title>
	<description><![CDATA[
			在公司正想用 svk 把 monodevelop source code 拉回來時，發現有 Can't locate Time/Progress.pm 訊息，然後就停止運行了。
上 Launchpad 找了一下，發現已經有人回報了：Bug #317487 in svk (Ubuntu): “2.2.1 needs Time::Progress”，後續的回覆裡，也提供了好幾個 workaround，我選擇直接修改 Notify.pm，因為以後 apt-get upgrade 時，新檔案會把舊檔案覆蓋掉。

		]]>
	</description>
	<content:encoded><![CDATA[
			在公司正想用 svk 把 monodevelop source code 拉回來時，發現有 Can't locate Time/Progress.pm 訊息，然後就停止運行了。<br />
上 <a href="http://launchpad.net">Launchpad</a> 找了一下，發現已經有人回報了：<a href="https://bugs.launchpad.net/ubuntu/+source/svk/+bug/317487">Bug #317487 in svk (Ubuntu): “2.2.1 needs Time::Progress”</a>，後續的回覆裡，也提供了好幾個 workaround，我選擇直接修改 Notify.pm，因為以後 apt-get upgrade 時，新檔案會把舊檔案覆蓋掉。<br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/9560383.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/9560383.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Tue, 28 Jul 2009 16:48:03 +0800</pubDate>
</item>
<item>
	<title>kernel 怎麼執行 hotplug?</title>
	<description><![CDATA[
			因為只知道 hotplug 這關鍵字，直接以 hotplug 找，從 lib/kobject_uevent.c 裡可以看到放 "/sbin/hotplug" 的變數：uevent_helper。再往後找，可以看到 call_usermodehelper 使用了此變數。

call_usermodehelper 定義在 kmod.h 裡，是一個 static inline function。裡面則呼叫了 call_usermodehelper_setup 去設置環境，末了再呼叫 call_usermodehelper_exec 去執行。

p.s. 似乎不能在 IRQ 中斷處理常式裡去呼叫，會造成 kernel crash 掉，仔細想想，這樣有合理，因為 IRQ 中斷處理常式應該要盡早處理結束。如果是這樣，處理就比較麻煩了，可能就要利用 thread 跟 queue 來作。現階段，先不要作這個好了，雖然主動通知的功能很酷...

		]]>
	</description>
	<content:encoded><![CDATA[
			因為只知道 hotplug 這關鍵字，直接以 hotplug 找，從 lib/kobject_uevent.c 裡可以看到放 "/sbin/hotplug" 的變數：uevent_helper。再往後找，可以看到 call_usermodehelper 使用了此變數。<br />
<br />
call_usermodehelper 定義在 kmod.h 裡，是一個 static inline function。裡面則呼叫了 call_usermodehelper_setup 去設置環境，末了再呼叫 call_usermodehelper_exec 去執行。<br />
<br />
p.s. 似乎不能在 IRQ 中斷處理常式裡去呼叫，會造成 kernel crash 掉，仔細想想，這樣有合理，因為 IRQ 中斷處理常式應該要盡早處理結束。如果是這樣，處理就比較麻煩了，可能就要利用 thread 跟 queue 來作。現階段，先不要作這個好了，雖然主動通知的功能很酷...<br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/8954335.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/8954335.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Fri, 15 May 2009 17:13:34 +0800</pubDate>
</item>
<item>
	<title>ecryptfsd</title>
	<description><![CDATA[
			ecryptfs-utils 裡的 ecryptfsd 可以透過 netlink 或 misc 方式與 kernel 的 ecryptfs module 溝通，Ubuntu 有修改過 kernel 的 ecryptfs ，讓 ecryptfsd 以 misc 的方式溝通。

而我，就卡在這裡搞了好久，因為我始終用 kernel 的預設值，也就是 netlink 的方式。
照理來說，netlink 應該也是可以才對，只是在 ecryptfsd 裡有段 code(嚴格來說應該是 libecryptfs.so)，在以 sendto 送出封包以後，檢查回傳值，如果大於 0 ，就當作錯誤。你可以查一下 sendto 函式的說明，裡面清楚地寫了，當傳送成功，會回傳 sendto() 所送出的 byte 數。ecryptfsd 以 sendto 送出了 16 bytes，收也收到了 16 bytes，這樣應該是要當作成功，但程式裡卻視為失敗。
我不知道修正這裡以後還會遇到什麼問題，所以我決定很鴕鳥地去改用 ubuntu 的 kernel ...

		]]>
	</description>
	<content:encoded><![CDATA[
			ecryptfs-utils 裡的 ecryptfsd 可以透過 netlink 或 misc 方式與 kernel 的 ecryptfs module 溝通，Ubuntu 有修改過 kernel 的 ecryptfs ，讓 ecryptfsd 以 misc 的方式溝通。<br />
<br />
而我，就卡在這裡搞了好久，因為我始終用 kernel 的預設值，也就是 netlink 的方式。<br />
照理來說，netlink 應該也是可以才對，只是在 ecryptfsd 裡有段 code(嚴格來說應該是 libecryptfs.so)，在以 sendto 送出封包以後，檢查回傳值，如果大於 0 ，就當作錯誤。你可以查一下 sendto 函式的說明，裡面清楚地寫了，當傳送成功，會回傳 sendto() 所送出的 byte 數。ecryptfsd 以 sendto 送出了 16 bytes，收也收到了 16 bytes，這樣應該是要當作成功，但程式裡卻視為失敗。<br />
我不知道修正這裡以後還會遇到什麼問題，所以我決定很鴕鳥地去改用 ubuntu 的 kernel ...<br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/8769661.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/8769661.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Tue, 21 Apr 2009 20:34:04 +0800</pubDate>
</item>
<item>
	<title>直接設定密碼免提示輸入</title>
	<description><![CDATA[
			用 passwd 設定密碼是免不了要回答提示問題的，有方法可以省掉嗎？如果可以省掉，在大量設定密碼的情況下會很方便。

方法說穿了很簡單，先用 mkpasswd 產生密碼，再用 usermod 來變更使用者密碼。
以下節錄自 call useradd and passwd through no prompt script - LinuxQuestions.org

#!/bin/bash
## Set a default password and perform a password reset
l_user=$1
if [ "$l_user" != "" ]
then
   l_password="Reset"
   l_encrypted_pass=$(mkpasswd -s --hash=md5 ${l_password})
   echo "/usr/sbin/usermod -p ${l_encrypted_pass} ${l_user}"
fi


感恩啦！本來已經想用 sed/awk 去硬改 passwd/shadow 檔案了說...

		]]>
	</description>
	<content:encoded><![CDATA[
			用 passwd 設定密碼是免不了要回答提示問題的，有方法可以省掉嗎？<br/>如果可以省掉，在大量設定密碼的情況下會很方便。<br/>
<br/>
方法說穿了很簡單，先用 mkpasswd 產生密碼，再用 usermod 來變更使用者密碼。<br/>
以下節錄自 <a href="http://www.linuxquestions.org/questions/linux-server-73/call-useradd-and-passwd-through-no-prompt-script-695243/">call useradd and passwd through no prompt script - LinuxQuestions.org</a>
<pre name="code" class="bash">
#!/bin/bash
## Set a default password and perform a password reset
l_user=$1
if [ "$l_user" != "" ]
then
   l_password="Reset"
   l_encrypted_pass=$(mkpasswd -s --hash=md5 ${l_password})
   echo "/usr/sbin/usermod -p ${l_encrypted_pass} ${l_user}"
fi
</pre>
<br/>
感恩啦！本來已經想用 sed/awk 去硬改 passwd/shadow 檔案了說...

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/8736761.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/8736761.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Fri, 17 Apr 2009 15:08:52 +0800</pubDate>
</item>
<item>
	<title>TPM 與 ecryptfs</title>
	<description><![CDATA[
			基本都是參考：[Ecryptfs-users] Ecryptfs with TPM via Trousers on Centos 5.2Encrypting file systems using eCryptfsCreate an Encrypted Private Directory with eCryptfs | TombuntuHow to use a TPM with Linux - GrouNation

另外遇到問題可以參考 IBM 的 troubleshooting，最近 IBM 不知道是網站改版還怎樣，之前留的網址都失聯了，你可以用 ibm ecryptfs troubleshooting 去 google 找。

下面的步驟最好全部以 root 或 sudo 來執行：進 BIOS 把 TPM clear 掉我的環境正好是用 infineon 的，所以用 modprobe tpm_infineon，一般好像是用 tpm_tis 就行了。啟動 trousers：tcsd -f，不用 -f 的話，會掛...這個 daemon 提供 tspi 服務並且與 TPM device 溝通。取得 ownership：tpm_takeownership ，這個步驟裡，SRK password 跟其後的 Confirm password 不要輸入！！否則要回到步驟 0 重設。SRK 是 Storage Root Key 的縮寫，不使用密碼保護的原因是為了 ecryptfs 取用方便。掛載 ecryptfs：modprobe ecryptfs啟動 ecryptfsd產生 UUID：ecryptfs-generate-tpm-key -p 1 ，這個 UUID 是提領 key 用的，實際的 key 會透過 PCR 1 的 key 來取得(如果我沒理解錯的話)。

至此，準備工作已經完成，接下來就是操作，這裡我假設 private 是放置要加密的資料的地方：先建立：mkdir private進行掛載：mount -t ecryptfs private private依序回答問題，第一個先選 tspi，第二個問題(cipher)選 aes，第三個問題(key bytes)選 16 bytes，第四個問題(passthrough)選 n，最後問題照預設值。第一個問題是加密方式，你也可以使用其他方式，但這樣就用不到 TPM 了；cipher 跟 key bytes 可以視需要自行調整。這樣就能 mount 上，mount 以後，ecryptfs 會把 UUID 存到 keyring (用 keyctl show 可以看 keyring 內容)裡。

在 private 資料夾裡的操作，基本上不能複寫，只能複製、貼上，但 vim 可編輯。

umount 之前，最好先輸入 mount，把參數記下。
umount 之後，可以直接以參數來掛載，這樣就不用再次回答問題：mount -t ecryptfs -o sig=UUID,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_passthrough=n private private
參數裡，有個 sig，這個 sig 就是填 UUID，不過你輸入 mount 時，看到的卻不是 UUID，而是一個較短的字串。這字串其實是一個提領 UUID 的鑰匙，ecryptfs 會用這個鑰匙去 keyring 裡(用 keyctl show 可以看到)，取出 UUID，再以 UUID 去掛載。keyring 主要存放在 kernel 的某個地方，所以重開機以後就會消失，我還不知道怎麼把 keyring 內容存起來。

好吧，以上就是我這幾天跟 TPM 奮戰的紀錄...

		]]>
	</description>
	<content:encoded><![CDATA[
			基本都是參考：<ul><li><a href="http://www.mail-archive.com/ecryptfs-users@lists.sourceforge.net/msg00253.html">[Ecryptfs-users] Ecryptfs with TPM via Trousers on Centos 5.2</a></li><li><a href="http://publib.boulder.ibm.com/infocenter/systems/scope/linux/index.jsp?topic=/liaai/security/liaaisecureecryptfs.htm">Encrypting file systems using eCryptfs</a></li><li><a href="http://tombuntu.com/index.php/2008/08/07/create-an-encrypted-private-directory-with-ecryptfs/">Create an Encrypted Private Directory with eCryptfs | Tombuntu</a></li><li><a href="https://www.grounation.org/index.php?post/2008/07/04/8-how-to-use-a-tpm-with-linux">How to use a TPM with Linux - GrouNation</a></li></ul><br />
<br />
另外遇到問題可以參考 IBM 的 troubleshooting，最近 IBM 不知道是網站改版還怎樣，之前留的網址都失聯了，你可以用 ibm ecryptfs troubleshooting 去 google 找。<br />
<br />
下面的步驟最好全部以 root 或 sudo 來執行：<ol><li>進 BIOS 把 TPM clear 掉</li><li>我的環境正好是用 infineon 的，所以用 modprobe tpm_infineon，一般好像是用 tpm_tis 就行了。</li><li>啟動 trousers：tcsd -f，不用 -f 的話，會掛...這個 daemon 提供 tspi 服務並且與 TPM device 溝通。</li><li>取得 ownership：tpm_takeownership ，這個步驟裡，SRK password 跟其後的 Confirm password 不要輸入！！否則要回到步驟 0 重設。SRK 是 Storage Root Key 的縮寫，不使用密碼保護的原因是為了 ecryptfs 取用方便。</li><li>掛載 ecryptfs：modprobe ecryptfs</li><li>啟動 ecryptfsd</li><li>產生 UUID：ecryptfs-generate-tpm-key -p 1 ，這個 UUID 是提領 key 用的，實際的 key 會透過 PCR 1 的 key 來取得(如果我沒理解錯的話)。</li></ol><br />
<br />
至此，準備工作已經完成，接下來就是操作，這裡我假設 private 是放置要加密的資料的地方：<ol><li>先建立：mkdir private</li><li>進行掛載：mount -t ecryptfs private private</li><li>依序回答問題，第一個先選 tspi，第二個問題(cipher)選 aes，第三個問題(key bytes)選 16 bytes，第四個問題(passthrough)選 n，最後問題照預設值。第一個問題是加密方式，你也可以使用其他方式，但這樣就用不到 TPM 了；cipher 跟 key bytes 可以視需要自行調整。這樣就能 mount 上，mount 以後，ecryptfs 會把 UUID 存到 keyring (用 keyctl show 可以看 keyring 內容)裡。</li></ol><br />
<br />
在 private 資料夾裡的操作，基本上不能複寫，只能複製、貼上，但 vim 可編輯。<br />
<br />
umount 之前，最好先輸入 mount，把參數記下。<br />
umount 之後，可以直接以參數來掛載，這樣就不用再次回答問題：mount -t ecryptfs -o sig=UUID,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_passthrough=n private private<br />
參數裡，有個 sig，這個 sig 就是填 UUID，不過你輸入 mount 時，看到的卻不是 UUID，而是一個較短的字串。這字串其實是一個提領 UUID 的鑰匙，ecryptfs 會用這個鑰匙去 keyring 裡(用 keyctl show 可以看到)，取出 UUID，再以 UUID 去掛載。keyring 主要存放在 kernel 的某個地方，所以重開機以後就會消失，我還不知道怎麼把 keyring 內容存起來。<br />
<br />
好吧，以上就是我這幾天跟 TPM 奮戰的紀錄...<br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/8721955.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/8721955.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Wed, 15 Apr 2009 11:24:24 +0800</pubDate>
</item>
<item>
	<title>amr 轉 mp3</title>
	<description><![CDATA[
			環境：Ubuntu 8.10

安裝必要的套件：sudo apt-get install amrnb sox lame輸入以下指令：amrnb-decoder file.amr file.raw # 先轉成 raw 檔
sox -r 8000 -w -c 1 -s file.raw -r 16000 -w -c 1 file.wav # 再轉為 wav
lame babycry.wav babycry.mp3 # 最後轉為 mp3


整理一下，把它作成 script：#!/bin/bash
# amr2mp3.sh
FILE=`basename $1 .amr`  # remove .amr
amrnb-decoder $1 $FILE.raw
sox -r 8000 -w -c 1 -s $FILE.raw -r 16000 -w -c 1 $FILE.wav
lame $FILE.wav $FILE.mp3
rm -f $FILE.raw $FILE.wav
exit 0
收工。參考自Aquarionics 的 blog：How to convert AMR files to MP3

		]]>
	</description>
	<content:encoded><![CDATA[
			環境：Ubuntu 8.10

<ol><li>安裝必要的套件：<pre name="code" class="bash">sudo apt-get install amrnb sox lame</pre></li><li>輸入以下指令：<pre name="code" class="bash">amrnb-decoder file.amr file.raw # 先轉成 raw 檔
sox -r 8000 -w -c 1 -s file.raw -r 16000 -w -c 1 file.wav # 再轉為 wav
lame babycry.wav babycry.mp3 # 最後轉為 mp3
</pre></li></ol>

整理一下，把它作成 script：<pre name="code" class="bash">#!/bin/bash
# amr2mp3.sh
FILE=`basename $1 .amr`  # remove .amr
amrnb-decoder $1 $FILE.raw
sox -r 8000 -w -c 1 -s $FILE.raw -r 16000 -w -c 1 $FILE.wav
lame $FILE.wav $FILE.mp3
rm -f $FILE.raw $FILE.wav
exit 0
</pre>收工。<br/><br/>參考自<a href="http://www.aquarionics.com/article/name/How_to_convert_AMR_files_to_MP3">Aquarionics 的 blog：How to convert AMR files to MP3</a>

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/8432797.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/8432797.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Fri, 06 Mar 2009 14:39:34 +0800</pubDate>
</item>
<item>
	<title>pam_smbpass.so</title>
	<description><![CDATA[
			安裝 samba 以後，讓 samba 密碼跟 linux 密碼一致的好方法，先安裝 libpam-smbpass，然後執行 sudo pam-auth-update，把 SMB password synchronization 選起來即可。以後改密碼時，samba 密碼也會自動被更改。

對了，我的 linux 是 ubuntu 8.10，samba security level 是 user，安裝以後有先利用 smbpasswd -a 把必要的使用者加進去。

		]]>
	</description>
	<content:encoded><![CDATA[
			安裝 samba 以後，讓 samba 密碼跟 linux 密碼一致的好方法，先安裝 libpam-smbpass，然後執行 sudo pam-auth-update，把 SMB password synchronization 選起來即可。以後改密碼時，samba 密碼也會自動被更改。<br />
<br />
對了，我的 linux 是 ubuntu 8.10，samba security level 是 user，安裝以後有先利用 smbpasswd -a 把必要的使用者加進去。<br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/8427503.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/8427503.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Thu, 05 Mar 2009 15:34:54 +0800</pubDate>
</item>
<item>
	<title>Foxit Reader 1.0 Beta for Linux in Ubuntu</title>
	<description><![CDATA[
			一月底的時候，Foxit釋出了Foxit Reader 1.0 Beta for Desktop Linux，很可惜的是，官方沒有提供 .deb 的版本。
不過沒關係，我們有外星人(alien)。

先到Foxit下載網頁下載 rpm 版本安裝 alien：sudo apt-get install alien進行轉換：sudo alien --to-deb --scripts FoxitReader10_Linux_enu_i386.rpm進行安裝：sudo dpkg -i foxitreader_1.0-2_i386.deb完成！

		]]>
	</description>
	<content:encoded><![CDATA[
			一月底的時候，<a href="http://www.foxitsoftware.com/">Foxit</a>釋出了<a href="http://www.foxitsoftware.com/downloads/reader/reader1.0_linux.html">Foxit Reader 1.0 Beta for Desktop Linux</a>，很可惜的是，官方沒有提供 .deb 的版本。<br />
不過沒關係，我們有外星人(<a href="http://kitenet.net/programs/alien/">alien</a>)。<br />
<br />
<ol><li>先到<a href="http://www.foxitsoftware.com/downloads/reader/reader1.0_linux.html">Foxit下載網頁</a>下載 rpm 版本</li><li>安裝 alien：sudo apt-get install alien</li><li>進行轉換：sudo alien --to-deb --scripts FoxitReader10_Linux_enu_i386.rpm</li><li>進行安裝：sudo dpkg -i foxitreader_1.0-2_i386.deb</li><li>完成！</li></ol><br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/8219541.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/8219541.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Mon, 02 Feb 2009 14:17:21 +0800</pubDate>
</item>
<item>
	<title>javascript + gtk = seed</title>
	<description><![CDATA[
			昨天在這兒：Building desktop Linux applications with JavaScript看到的，現在可以用 JavaScript 來寫 GTK Application 了，如果以後再支援 DOM、selector與類似 XUL 語法(GLADE?)的話，應該會吸引一堆會 javascript + html 的人來用吧～
不過話說回來，XUL 好像也沒非常風行啊～

該專案的官方網站在：Seed

Anyway, 如果你想試試的話，已經有人打包了 for Ubuntu 的 package 了，位置在這裡：PPA for Orange Owners
詳細安裝方法，文章裡都寫的很清楚，這裡就不再贅述了。

		]]>
	</description>
	<content:encoded><![CDATA[
			昨天在這兒：<a href="http://arstechnica.com/articles/paedia/javascript-gtk-bindings.ars">Building desktop Linux applications with JavaScript</a>看到的，現在可以用 JavaScript 來寫 GTK Application 了，如果以後再支援 DOM、selector與類似 XUL 語法(GLADE?)的話，應該會吸引一堆會 javascript + html 的人來用吧～<br />
不過話說回來，<a href="http://zh.wikipedia.org/wiki/XUL">XUL</a> 好像也沒非常風行啊～<br />
<br />
該專案的官方網站在：<a href="http://live.gnome.org/Seed">Seed</a><br />
<br />
Anyway, 如果你想試試的話，已經有人打包了 for Ubuntu 的 package 了，位置在這裡：<a href="https://edge.launchpad.net/~orange-owners/+archive/ppa">PPA for Orange Owners</a><br />
詳細安裝方法，文章裡都寫的很清楚，這裡就不再贅述了。<br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/8141597.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/8141597.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Wed, 21 Jan 2009 17:20:39 +0800</pubDate>
</item>
<item>
	<title>less + source-highlight</title>
	<description><![CDATA[
			參考這篇：借我一双写轮眼──Less 语法高亮 — LinuxTOY

但 Ubuntu 下，需要作點修改：
# .bashrc
PAGER='less -X -M'
export LESSOPEN="| /usr/share/source-highlight/src-hilite-lesspipe.sh %s"
export LESS=' -R '


主要差異在 src-hilite-lesspipe.sh 的位置。


		]]>
	</description>
	<content:encoded><![CDATA[
			參考這篇：<a href="http://linuxtoy.org/archives/less-highlight.html">借我一双写轮眼──Less 语法高亮 — LinuxTOY</a><br/>
<br/>
但 <a href="http://www.ubuntulinux.com">Ubuntu</a> 下，需要作點修改：<pre name="code" class="bash">
# .bashrc
PAGER='less -X -M'
export LESSOPEN="| /usr/share/source-highlight/src-hilite-lesspipe.sh %s"
export LESS=' -R '
</pre>
<br/>
主要差異在 src-hilite-lesspipe.sh 的位置。


		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/8055577.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/8055577.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Fri, 09 Jan 2009 18:12:40 +0800</pubDate>
</item>
<item>
	<title>registry-tools</title>
	<description><![CDATA[
			由於太座的大意，使得 NB 中了 USB 病毒，而小紅傘解不掉。我知道進 Linux 以後就能把 USB 病毒埋的檔案砍掉，但砍了再砍，重開機進 Windows 以後，病毒還是繼續作怪，看來，病毒還是有埋我不知道的暗樁。
Registry 裡面有兩個機碼 Run 跟 RunOnce，在每次開機、登入時，都會去執行這裡有指定的程式。

本來不奢求 Linux 有工具可以存取 Windows Registry 的，沒想到用 apt-cache 一找，還真的有，這個套件叫做 registry-tools。
套件提供了 regshell、regpatch、regdiff、regtree 這幾個工具，可以讓你存取 Windows Registry。
但 Windows Registry 檔案在哪裡呢？Windows 2000 以後，HKEY_CURRENT_USER 改放到使用者的 Home 目錄下，也就是 c:\documents and settings\your_name\ntuser.dat
所以只要進 Linux，把 Windows 分割區掛載起來，用 regshell -f ntuser.dat 開啟以後就可以對 Registry 操作了。
regshell 的命令列介面也不難，基本上就是 cd、ls、rm 這幾個，用 help 可以看詳細的指令列表，這裡不多說了。
總之切到 Software\Microsoft\Windows\CurrentVersion\Run 跟 Software\Microsoft\Windows\CurrentVersion\RunOnce 下把一些奇怪的項目刪掉以後，就大功告成了。

		]]>
	</description>
	<content:encoded><![CDATA[
			由於太座的大意，使得 NB 中了 USB 病毒，而小紅傘解不掉。我知道進 Linux 以後就能把 USB 病毒埋的檔案砍掉，但砍了再砍，重開機進 Windows 以後，病毒還是繼續作怪，看來，病毒還是有埋我不知道的暗樁。<br />
Registry 裡面有兩個機碼 Run 跟 RunOnce，在每次開機、登入時，都會去執行這裡有指定的程式。<br />
<br />
本來不奢求 Linux 有工具可以存取 Windows Registry 的，沒想到用 apt-cache 一找，還真的有，這個套件叫做 registry-tools。<br />
套件提供了 regshell、regpatch、regdiff、regtree 這幾個工具，可以讓你存取 Windows Registry。<br />
但 Windows Registry 檔案在哪裡呢？Windows 2000 以後，HKEY_CURRENT_USER 改放到使用者的 Home 目錄下，也就是 c:\documents and settings\your_name\ntuser.dat<br />
所以只要進 Linux，把 Windows 分割區掛載起來，用 regshell -f ntuser.dat 開啟以後就可以對 Registry 操作了。<br />
regshell 的命令列介面也不難，基本上就是 cd、ls、rm 這幾個，用 help 可以看詳細的指令列表，這裡不多說了。<br />
總之切到 Software\Microsoft\Windows\CurrentVersion\Run 跟 Software\Microsoft\Windows\CurrentVersion\RunOnce 下把一些奇怪的項目刪掉以後，就大功告成了。<br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/8027565.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/8027565.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Tue, 06 Jan 2009 17:10:28 +0800</pubDate>
</item>
<item>
	<title>envyng</title>
	<description><![CDATA[
			如果你用 nVidia 或 ATi 的顯示卡的話，用 envyng 可以很快的搞定一切設定。
早知道有這麼好用的 script ，當初設定 ATi 顯卡時，就不用那麼累了。
我唯一踩到的地雷是把 LANG 設為 C，導致 envyng 執行時，出現錯誤，要記得使用 utf-8，例如：export LANG=en_US.utf-8


sudo /etc/init.d/gdm stop
sudo apt-get install envyng-core
sudo envyng -t
sudo nvidia-xconfig
sudo /etc/init.d/gdm start


參考來源：[ubuntu] [SOLVED] Intrepid Nvidia driver issue. Boots to text - Ubuntu Forums

		]]>
	</description>
	<content:encoded><![CDATA[
			如果你用 nVidia 或 ATi 的顯示卡的話，用 envyng 可以很快的搞定一切設定。<br/>
早知道有這麼好用的 script ，當初設定 ATi 顯卡時，就不用那麼累了。<br/>
我唯一踩到的地雷是把 LANG 設為 C，導致 envyng 執行時，出現錯誤，要記得使用 utf-8，例如：export LANG=en_US.utf-8<br/>
<br/>
<pre name="code" class="bash">
sudo /etc/init.d/gdm stop
sudo apt-get install envyng-core
sudo envyng -t
sudo nvidia-xconfig
sudo /etc/init.d/gdm start
</pre>
<br/>
參考來源：<a href="http://ubuntuforums.org/showthread.php?t=974473">[ubuntu] [SOLVED] Intrepid Nvidia driver issue. Boots to text - Ubuntu Forums</a>

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/7862733.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/7862733.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Mon, 15 Dec 2008 16:26:06 +0800</pubDate>
</item>
<item>
	<title>在 Banshee 1.0 裡使用 BooScript</title>
	<description><![CDATA[
			有兩種方法：執行 Banshee 時，加上 --run-scripts your_boo_scripts.boo 表示要執行指定的 boo script將 boo script 檔案放在 ~/.config/banshee-1/boo-scripts/

如果你會 Boo 的話，基本上就不難幫 Banshee 增加功能。不過難就難在你必須要對 Banshee 的原始碼有一定程度的了解...除了看原始碼以外，也可以看看官方提供的 extension 怎麼寫...

		]]>
	</description>
	<content:encoded><![CDATA[
			有兩種方法：<ol><li>執行 Banshee 時，加上 --run-scripts your_boo_scripts.boo 表示要執行指定的 boo script</li><li>將 boo script 檔案放在 ~/.config/banshee-1/boo-scripts/</li></ol><br />
<br />
如果你會 <a href="http://boo.codehaus.org/">Boo</a> 的話，基本上就不難幫 <a href="http://banshee-project.org/">Banshee</a> 增加功能。不過難就難在你必須要對 <a href="http://banshee-project.org/">Banshee</a> 的原始碼有一定程度的了解...除了看原始碼以外，也可以看看官方提供的 extension 怎麼寫...<br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/6293803.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/6293803.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Thu, 03 Jul 2008 14:06:22 +0800</pubDate>
</item>
<item>
	<title>幾個 launchpad 上的 apt repository</title>
	<description><![CDATA[
			要衝 banshee 1.0 版的話，可以試試這個：
deb http://ppa.launchpad.net/banshee-team/ubuntu hardy main multiverse restricted universe

上星期(2008/6/5)已經釋出了 1.0.0 版，跟 0.13 比起來，速度可說是兔子與烏龜，主要原因是 1.0 在資料庫上做了適當的索引與調整。

目前 ubuntu 上的 mono 是 1.2.6，要試最新版，除了下載官方網站的 installer 來安裝與 Mono for Debian(Mono - General - Mono 1.9.1 and MonoDevelop 1.0 Packages for Debian Etch) 之外，只能試這個了：
deb http://ppa.launchpad.net/mono-edge/ubuntu hardy main multiverse restricted universe

http://ppa.launchpad.net 上還蠻多 repository 可以試試看的，有遇到沒打包的軟體，就進去找找，或許已經有人在實驗了。

		]]>
	</description>
	<content:encoded><![CDATA[
			要衝 <a href="http://banshee-project.org">banshee</a> 1.0 版的話，可以試試這個：<br />
deb http://ppa.launchpad.net/banshee-team/ubuntu hardy main multiverse restricted universe<br />
<br />
上星期(2008/6/5)已經釋出了 1.0.0 版，跟 0.13 比起來，速度可說是兔子與烏龜，主要原因是 1.0 在資料庫上做了適當的索引與調整。<br />
<br />
目前 ubuntu 上的 <a href="http://www.mono-project.com">mono</a> 是 1.2.6，要試最新版，除了下載官方網站的 installer 來安裝與 <a href="http://pkg-mono.alioth.debian.org/">Mono for Debian</a>(<a href="http://go-mono.com/forums/#nabble-td16910740%7Ca17163057">Mono - General - Mono 1.9.1 and MonoDevelop 1.0 Packages for Debian Etch</a>) 之外，只能試這個了：<br />
deb http://ppa.launchpad.net/mono-edge/ubuntu hardy main multiverse restricted universe<br />
<br />
<a href="http://ppa.launchpad.net">http://ppa.launchpad.net</a> 上還蠻多 repository 可以試試看的，有遇到沒打包的軟體，就進去找找，或許已經有人在實驗了。<br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/6152751.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/6152751.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Mon, 09 Jun 2008 16:33:57 +0800</pubDate>
</item>
<item>
	<title>LXPanel Plugin in Managed code?</title>
	<description><![CDATA[
			看到 Fred 寫的Fred's blog: 讓我們輕鬆自在設計自己的 LXPanel Plugin，心想，應該也可以用 mono c#、boo 等來寫吧～
於是想到gimp-sharp，這個 library 讓你可以使用 c#、vb.net、boo 寫給 gimp 使用的 plugin，下載來看以後，真是令人驚訝～
原來 gimp 是使用外部執行的方式去呼叫這些 plugin，而這些 plugin 以收取參數與呼叫 gimp library 的方式來與 gimp 主體進行溝通。
那麼這樣，似乎就行不通了。一般 C/C++ plugin 的處理方式，都是以 dl_xxxx 系列函數來開啟 plugin(.so) 進行操作，對於 managed code 來說，assembly(.dll)並沒有開放這些介面。
從 C/C++ 呼叫 Managed code 是可行的，目前只適用於 Mono，請參閱這裡：Embedding Mono
這裡有幾個範例，應該是夠用了。
看起來如果要作 Plugin 給 lxpanel 用的話，還是得用 C 寫一個 Plugin，然後這個 Plugin 負責載入 mono 的 assembly，再把必要的資訊傳進去給 managed code。
有可能作成 chain-loader 的形式，由這個 Plugin 再去把其他用 Managed code 做的 Plugin 載入嗎??
恐怕還是得再看 lxpanel 內部如何用 plugin 才能決定。

		]]>
	</description>
	<content:encoded><![CDATA[
			看到 Fred 寫的<a href="http://fred-zone.blogspot.com/2008/05/lxpanel-plugin.html">Fred's blog: 讓我們輕鬆自在設計自己的 LXPanel Plugin</a>，心想，應該也可以用 mono c#、boo 等來寫吧～<br />
於是想到<a href="http://gimp-sharp.sourceforge.net/">gimp-sharp</a>，這個 library 讓你可以使用 c#、vb.net、boo 寫給 gimp 使用的 plugin，下載來看以後，真是令人驚訝～<br />
原來 <a href="http://www.gimp.org">gimp</a> 是使用外部執行的方式去呼叫這些 plugin，而這些 plugin 以收取參數與呼叫 gimp library 的方式來與 gimp 主體進行溝通。<br />
那麼這樣，似乎就行不通了。一般 C/C++ plugin 的處理方式，都是以 dl_xxxx 系列函數來開啟 plugin(.so) 進行操作，對於 managed code 來說，assembly(.dll)並沒有開放這些介面。<br />
從 C/C++ 呼叫 Managed code 是可行的，目前只適用於 Mono，請參閱這裡：<a href="http://www.mono-project.com/Embedding_Mono">Embedding Mono</a><br />
<a href="http://anonsvn.mono-project.com/viewcvs/trunk/mono/samples/embed/">這裡</a>有幾個範例，應該是夠用了。<br />
看起來如果要作 Plugin 給 lxpanel 用的話，還是得用 C 寫一個 Plugin，然後這個 Plugin 負責載入 mono 的 assembly，再把必要的資訊傳進去給 managed code。<br />
有可能作成 chain-loader 的形式，由這個 Plugin 再去把其他用 Managed code 做的 Plugin 載入嗎??<br />
恐怕還是得再看 lxpanel 內部如何用 plugin 才能決定。<br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/6099535.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/6099535.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Wed, 28 May 2008 09:40:22 +0800</pubDate>
</item>
<item>
	<title>LXDE in Ubuntu</title>
	<description><![CDATA[
			如果你想在 Ubuntu 裡試試 LXDE 的話，加入這個軟體來源：deb http://ppa.launchpad.net/lxde/ubuntu/ hardy main universe multiverse restricted，然後安裝 lxde、lxsession 即可 (sudo apt-get install lxde lxsession)。接下來登出，將作業階段選為 LXDE，再登入即可。

LXDE 的確速度蠻快的，不過，不能瀏覽網路上的芳鄰，這實在是讓我無法下定決心跳槽啊...

補充：啊，LXDE 的下載網頁也有提到一個來源：deb http://people.linux.org.tw/~pcman/ubuntu/ ./ 

		]]>
	</description>
	<content:encoded><![CDATA[
			如果你想在 <a href="http://www.ubuntulinux.com">Ubuntu</a> 裡試試 <a href="http://lxde.sourceforge.net">LXDE</a> 的話，加入這個軟體來源：<pre>deb http://ppa.launchpad.net/lxde/ubuntu/ hardy main universe multiverse restricted</pre>，然後安裝 lxde、lxsession 即可 (sudo apt-get install lxde lxsession)。接下來登出，將作業階段選為 <a href="http://lxde.sourceforge.net">LXDE</a>，再登入即可。<br />
<br />
<a href="http://lxde.sourceforge.net">LXDE</a> 的確速度蠻快的，不過，不能瀏覽網路上的芳鄰，這實在是讓我無法下定決心跳槽啊...<br />
<br />
補充：啊，<a href="http://lxde.sourceforge.net/download.html">LXDE 的下載網頁</a>也有提到一個來源：<pre>deb http://people.linux.org.tw/~pcman/ubuntu/ ./ </pre><br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/6096979.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/6096979.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Tue, 27 May 2008 17:40:41 +0800</pubDate>
</item>
<item>
	<title>gnome-settings-daemon 無法啟動</title>
	<description><![CDATA[
			由於很勇敢地衝了Ubuntu Hardy 的緣故，常常會有很多驚喜～
這幾天是遇到 gnome-settings-daemon 無法啟動的問題，開啟終端機試著以手動方式啟動會出現如下訊息：The program 'gnome-settings-daemon' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadRequest (invalid request code or no such operation)'.
  (Details: serial 107 error_code 1 request_code 151 minor_code 6)
  (Note to programmers: normally, X errors are reported asynchronously;
   that is, you will receive the error a while after causing it.
   To debug your program, run it with the --sync command line
   option to change this behavior. You can then get a meaningful
   backtrace from your debugger if you break on the gdk_x_error() function.)


爬文以後，發現已經有人回報，從 2.21.9 以後就是如此，但是都還沒有解。
依照訊息的建議，改以如下指令再試試：gnome-settings-daemon --debug --no-daemon --sync

這樣會丟出比較多的錯誤訊息，這邊只列出關鍵部份：** (gnome-settings-daemon:20265): DEBUG: Registering GsdXrandrPlugin
** (gnome-settings-daemon:20265): DEBUG: Creating object of type GsdXrandrPlugin
** (gnome-settings-daemon:20265): DEBUG: GsdXrandrPlugin initializing
** (gnome-settings-daemon:20265): DEBUG: Activating xrandr plugin
** (gnome-settings-daemon:20265): DEBUG: Starting xrandr manager
The program 'gnome-settings-daemon' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadRequest (invalid request code or no such operation)'.
  (Details: serial 107 error_code 1 request_code 151 minor_code 6)
  (Note to programmers: normally, X errors are reported asynchronously;
   that is, you will receive the error a while after causing it.
   To debug your program, run it with the --sync command line
   option to change this behavior. You can then get a meaningful
   backtrace from your debugger if you break on the gdk_x_error() function.)


喔～這樣看來應該是是 xrandr 的關係～
xrandr 是用來動態切換螢幕用的，舉例來說，接投影機或是額外螢幕時，就會用到～
不過，我現在用不到，那麼，要怎麼停用這個 plugin 呢?
這就得用 gconf-editor 了，使用 gconf-editor 去把 /apps/gnome_settings_daemon/plugins/xrandr/active 機碼改為 0，然後重新啟動 XServer 即可。

		]]>
	</description>
	<content:encoded><![CDATA[
			由於很勇敢地衝了<a href="http://www.ubuntulinux.com">Ubuntu</a> Hardy 的緣故，常常會有很多驚喜～<br />
這幾天是遇到 gnome-settings-daemon 無法啟動的問題，開啟終端機試著以手動方式啟動會出現如下訊息：<pre>The program 'gnome-settings-daemon' received an X Window System error.<br />
This probably reflects a bug in the program.<br />
The error was 'BadRequest (invalid request code or no such operation)'.<br />
  (Details: serial 107 error_code 1 request_code 151 minor_code 6)<br />
  (Note to programmers: normally, X errors are reported asynchronously;<br />
   that is, you will receive the error a while after causing it.<br />
   To debug your program, run it with the --sync command line<br />
   option to change this behavior. You can then get a meaningful<br />
   backtrace from your debugger if you break on the gdk_x_error() function.)<br />
</pre><br />
<br />
爬文以後，發現已經有人回報，從 2.21.9 以後就是如此，但是都還沒有解。<br />
依照訊息的建議，改以如下指令再試試：<pre>gnome-settings-daemon --debug --no-daemon --sync</pre><br />
<br />
這樣會丟出比較多的錯誤訊息，這邊只列出關鍵部份：<pre>** (gnome-settings-daemon:20265): DEBUG: Registering GsdXrandrPlugin<br />
** (gnome-settings-daemon:20265): DEBUG: Creating object of type GsdXrandrPlugin<br />
** (gnome-settings-daemon:20265): DEBUG: GsdXrandrPlugin initializing<br />
** (gnome-settings-daemon:20265): DEBUG: Activating xrandr plugin<br />
** (gnome-settings-daemon:20265): DEBUG: Starting xrandr manager<br />
The program 'gnome-settings-daemon' received an X Window System error.<br />
This probably reflects a bug in the program.<br />
The error was 'BadRequest (invalid request code or no such operation)'.<br />
  (Details: serial 107 error_code 1 request_code 151 minor_code 6)<br />
  (Note to programmers: normally, X errors are reported asynchronously;<br />
   that is, you will receive the error a while after causing it.<br />
   To debug your program, run it with the --sync command line<br />
   option to change this behavior. You can then get a meaningful<br />
   backtrace from your debugger if you break on the gdk_x_error() function.)<br />
</pre><br />
<br />
喔～這樣看來應該是是 <a href="http://en.wikipedia.org/wiki/XRandR">xrandr</a> 的關係～<br />
<a href="http://en.wikipedia.org/wiki/XRandR">xrandr</a> 是用來動態切換螢幕用的，舉例來說，接投影機或是額外螢幕時，就會用到～<br />
不過，我現在用不到，那麼，要怎麼停用這個 plugin 呢?<br />
這就得用 gconf-editor 了，使用 gconf-editor 去把 /apps/gnome_settings_daemon/plugins/xrandr/active 機碼改為 0，然後重新啟動 XServer 即可。<br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/5713023.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/5713023.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Mon, 17 Mar 2008 17:33:28 +0800</pubDate>
</item>
<item>
	<title>如何在 CentOS 安裝 Ruby on Rails</title>
	<description><![CDATA[
			如果你照著這篇：在 CentOS 安裝 Ruby on Rails，卻怎麼樣也裝不起來的話，我想你碰到跟我一樣的問題了。錯誤訊息可能會是這樣子的：
ERROR:  While executing gem ... (Gem::GemNotFoundException)
    Could not find rails (> 0) in any repository


研究了一下，發現應該是因為 RubyWorks 所提供的Source 沒有 rails gem 的關係，這也跟 RubyWorks 定位為 Production server 有關係。

總之如果你想把 CentOS 當作開發環境的話，不妨用$sudo gem sources -a http://gems.rubyforge.org把官方的 gem source 加進去，然後再輸入$sudo gem install rails -y 即可。

		]]>
	</description>
	<content:encoded><![CDATA[
			如果你照著這篇：<a href="http://lightyror.thegiive.net/2007/06/centos-ruby-on-rails.html" title="Lighty RoR: 在 CentOS 安裝 Ruby on Rails">在 CentOS 安裝 Ruby on Rails</a>，卻怎麼樣也裝不起來的話，我想你碰到跟我一樣的問題了。錯誤訊息可能會是這樣子的：<br />
<blockquote>ERROR:  While executing gem ... (Gem::GemNotFoundException)<br />
    Could not find rails (> 0) in any repository<br />
</blockquote><br />
<br />
研究了一下，發現應該是因為 <a href="http://rubyworks.rubyforge.org">RubyWorks</a> 所提供的<a href="http://rubyworks.rubyforge.org/redhat/GEMS/i386">Source</a> 沒有 rails gem 的關係，這也跟 <a href="http://rubyworks.rubyforge.org">RubyWorks</a> 定位為 Production server 有關係。<br />
<br />
總之如果你想把 CentOS 當作開發環境的話，不妨用<pre>$sudo gem sources -a http://gems.rubyforge.org</pre>把官方的 gem source 加進去，然後再輸入<pre>$sudo gem install rails -y</pre> 即可。<br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/4736895.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/4736895.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Fri, 28 Dec 2007 11:03:32 +0800</pubDate>
</item>
<item>
	<title>Show your bootchart</title>
	<description><![CDATA[
			之前安裝 bootchart 以後，就一直沒管他，沒有認真去研究該怎麼去把圖弄出來。
前幾天把圖弄出來了，這裡把步驟紀錄一下，我的環境是 Ubuntu 7.10(Gusty)：

安裝 bootchart，安裝完成以後，得重開機，讓 bootchart 能獲取必要的資訊。$sudo apt-get -y install bootchart重開機之後，bootchart 會把必要的資訊紀錄在 /var/log/bootchart.tgz。由於 bootchart 所提供的工具是用 Java 程式(/usr/share/bootchart/bootchart.jar)寫的，所以你還得確定有安裝 Java 或是 IKVM，我這邊是使用 ikvm。ikvm 是一個可以利用Mono(Linux 下的 .Net 執行環境)來執行 Java 程式的工具，一般來說，如果你有使用 Tomboy 或是 Beagle 的話，Mono就已經安裝了。$sudo apt-get -y install ikvm執行 bootchart.jar，這會解析 /var/log/bootchart.tgz，然後產生 bootchart.svgz 在當前目錄下。$ikvm -jar /usr/share/bootchart/bootchart.jar有了 bootchart.svgz，該怎麼去看這個圖呢？這邊提供兩種方法：利用 Firefox：把 bootchart.svgz 以 zcat 解開，再用 Firefox 打開即可。$zcat bootchart.svgz &gt; bootchart.svg用 Inkscape 開啟檔案。$sudo apt-get -y install inkscape

		]]>
	</description>
	<content:encoded><![CDATA[
			之前安裝 bootchart 以後，就一直沒管他，沒有認真去研究該怎麼去把圖弄出來。<br />
前幾天把圖弄出來了，這裡把步驟紀錄一下，我的環境是 Ubuntu 7.10(Gusty)：<br />
<br />
<ol><li>安裝 bootchart，安裝完成以後，得重開機，讓 bootchart 能獲取必要的資訊。<pre>$sudo apt-get -y install bootchart</pre></li><li>重開機之後，bootchart 會把必要的資訊紀錄在 /var/log/bootchart.tgz。由於 bootchart 所提供的工具是用 <a href="http://java.sun.com">Java</a> 程式(/usr/share/bootchart/bootchart.jar)寫的，所以你還得確定有安裝 <a href="http://java.sun.com">Java</a> 或是 <a href="http://www.ikvm.net/">IKVM</a>，我這邊是使用 ikvm。ikvm 是一個可以利用<a href="http://www.go-mono.com">Mono</a>(Linux 下的 .Net 執行環境)來執行 <a href="http://java.sun.com">Java</a> 程式的工具，一般來說，如果你有使用 Tomboy 或是 Beagle 的話，<a href="http://www.go-mono.com">Mono</a>就已經安裝了。<pre>$sudo apt-get -y install ikvm</pre></li><li>執行 bootchart.jar，這會解析 /var/log/bootchart.tgz，然後產生 bootchart.svgz 在當前目錄下。<pre>$ikvm -jar /usr/share/bootchart/bootchart.jar</pre></li><li>有了 bootchart.svgz，該怎麼去看這個圖呢？這邊提供兩種方法：<ul><li>利用 <a href="http://www.mozilla.com/en-US/firefox/">Firefox</a>：把 bootchart.svgz 以 zcat 解開，再用 <a href="http://www.mozilla.com/en-US/firefox/">Firefox</a> 打開即可。<pre>$zcat bootchart.svgz &gt; bootchart.svg</pre></li><li>用 Inkscape 開啟檔案。<pre>$sudo apt-get -y install inkscape</pre></li></ul></li></ol><br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/4510863.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/4510863.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Tue, 20 Nov 2007 12:25:48 +0800</pubDate>
</item>
<item>
	<title>How to purge at once in Debian/Ubuntu?</title>
	<description><![CDATA[
			經常性地安裝、移除套件，可是卻發現有些套件還留了一些設定沒刪掉？
試試這個指令，一次搞定：
sudo aptitude purge `dpkg -l | grep ^r | awk '{print $2}'`

		]]>
	</description>
	<content:encoded><![CDATA[
			經常性地安裝、移除套件，可是卻發現有些套件還留了一些設定沒刪掉？<br />
試試這個指令，一次搞定：<br />
<pre>sudo aptitude purge `dpkg -l | grep ^r | awk '{print $2}'`</pre><br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/4370065.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/4370065.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Fri, 26 Oct 2007 17:08:46 +0800</pubDate>
</item>
<item>
	<title>Ubuntu Gusty 播放影片不順 (如何關掉 Xgl)</title>
	<description><![CDATA[
			這幾天在更新 Gusty 以後，發現 SMPlayer 播放影片變得不順了。
傷腦筋，這下子影片不能看了，早知道就不要重開機。

不過問題還是要解決，我以為是 SMPlayer 的關係，但是在更新 SMPlayer 以後，仍然不行。
仔細再分析一下，我想應該是 xserver 設定的問題，所以就看了 xorg.conf
看來是沒什麼問題，於是加上 DRI 試試看，可是仍然沒用，甚至 xserver 還會無法啟動。
Google大神也沒什麼線索。

用 ps -ef 看了一下，發現 Xgl 有在執行，可是，這應該是在有支援 3D 加速繪圖晶片的環境下用的啊。我的 Intel i915G 似乎不需要這個，決定把Xgl關掉試試看。
參考 /etc/X11/Xsession.d/98xserver-xgl_start-server 以後，發現只要這樣作即可。
$mkdir ~/.config/xserver-xgl
$touch ~/.config/xserver-xgl/disable

果然重新啟動 xserver 以後，天下太平。
所以如果你的顯示晶片不夠力的話，不妨把 Xgl 關掉試試吧～

		]]>
	</description>
	<content:encoded><![CDATA[
			這幾天在更新 Gusty 以後，發現 <a href="http://smplayer.sourceforge.net">SMPlayer</a> 播放影片變得不順了。<br />
傷腦筋，這下子影片不能看了，早知道就不要重開機。<br />
<br />
不過問題還是要解決，我以為是 <a href="http://smplayer.sourceforge.net">SMPlayer</a> 的關係，但是在更新 <a href="http://smplayer.sourceforge.net">SMPlayer</a> 以後，仍然不行。<br />
仔細再分析一下，我想應該是 xserver 設定的問題，所以就看了 xorg.conf<br />
看來是沒什麼問題，於是加上 DRI 試試看，可是仍然沒用，甚至 xserver 還會無法啟動。<br />
<a href="http://www.google.com">Google</a>大神也沒什麼線索。<br />
<br />
用 ps -ef 看了一下，發現 <a href="http://zh.wikipedia.org/wiki/Xgl">Xgl</a> 有在執行，可是，這應該是在有支援 3D 加速繪圖晶片的環境下用的啊。我的 Intel i915G 似乎不需要這個，決定把<a href="http://zh.wikipedia.org/wiki/Xgl">Xgl</a>關掉試試看。<br />
參考 /etc/X11/Xsession.d/98xserver-xgl_start-server 以後，發現只要這樣作即可。<br />
<pre>$mkdir ~/.config/xserver-xgl<br />
$touch ~/.config/xserver-xgl/disable</pre><br />
<br />
果然重新啟動 xserver 以後，天下太平。<br />
所以如果你的顯示晶片不夠力的話，不妨把 <a href="http://zh.wikipedia.org/wiki/Xgl">Xgl</a> 關掉試試吧～<br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/4126911.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/4126911.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Wed, 12 Sep 2007 12:31:13 +0800</pubDate>
</item>
<item>
	<title>如何在 CentOS 安裝 mod_proxy_html</title>
	<description><![CDATA[
			先到官方網站下載源碼，或是利用 subversion 直接 checkout 最新的 code。這裡直接 checkout 最新的 3.0：#svn co http://apache.webthing.com/svn/apache/filters/proxy_html/ mod_proxy_html安裝必要的開發套件：#yum install httpd-devel libxml2-devel進行安裝：#apxs -I /usr/include/libxml2 -c -i mod_proxy_html.c在 httpd.conf 裡面加上 LoadFile /usr/lib/libxml2.soLoadModule proxy_html_module modules/mod_proxy_html.so重新啟動 httpd 之後，就大功告成。(當然還是要參考官方文件，自己加上必要的設定啦。)

參考資料：Tses Weblog: ntop και mod_proxy_html στο CentOS

備註：曾幾何時，我居然也看懂希臘文了～ =_=&quot;

		]]>
	</description>
	<content:encoded><![CDATA[
			<ol><li>先到<a href="http://apache.webthing.com/mod_proxy_html/">官方網站</a>下載源碼，或是利用 <a href="http://subversion.tigris.org/">subversion</a> 直接 checkout 最新的 code。這裡直接 checkout 最新的 3.0：<pre>#svn co http://apache.webthing.com/svn/apache/filters/proxy_html/ mod_proxy_html</pre></li><li>安裝必要的開發套件：<pre>#yum install httpd-devel libxml2-devel</pre></li><li>進行安裝：<pre>#apxs -I /usr/include/libxml2 -c -i mod_proxy_html.c</pre></li><li>在 httpd.conf 裡面加上 <pre>LoadFile /usr/lib/libxml2.so<br/>LoadModule proxy_html_module modules/mod_proxy_html.so</pre></li><li>重新啟動 httpd 之後，就大功告成。(當然還是要參考<a href="http://apache.webthing.com/mod_proxy_html/config.html">官方文件</a>，自己加上必要的設定啦。)</li></ol><br />
<br />
參考資料：<ul><li><a href="http://www.tses.gr/weblog/2007/03/ntop_mod_proxy_html_centos.html">Tses Weblog: ntop και mod_proxy_html στο CentOS</a></li></ul><br />
<br />
備註：曾幾何時，我居然也看懂希臘文了～ =_=&quot;<br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/3570269.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/3570269.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Tue, 03 Jul 2007 11:22:45 +0800</pubDate>
</item>
<item>
	<title>Wubuntu</title>
	<description><![CDATA[
			WebOS 因為 Javascript 越來越 powerful 的緣故，功能也越來越強大。
這一兩年也出了不少有名的專案，今天則是在Digg看到這個Wubuntu，畫面幾乎跟 Ubuntu 一樣啊～
只是目前裡面沒有什麼應用程式，也只有 FireFox 可用而已～
以後慢慢增加更多應用程式之後，或許就可以直接拿來當作 Ubuntu 的展示程式，不用 LiveCD 也可以馬上體驗 Ubuntu 的桌面。

		]]>
	</description>
	<content:encoded><![CDATA[
			WebOS 因為 Javascript 越來越 powerful 的緣故，功能也越來越強大。<br />
這一兩年也出了<a href="http://en.wikipedia.org/wiki/Web_operating_system#List_of_Web_operating_systems" title="List of Web operating systems">不少有名的專案</a>，今天則是在<a href="http://www.digg.com">Digg</a>看到這個<a href="http://wubuntu.weejewel.net/" title="Wubuntu ~ Web Ubuntu homepage">Wubuntu</a>，畫面幾乎跟 <a href="http://www.ubuntu.com/">Ubuntu</a> 一樣啊～<br />
只是目前裡面沒有什麼應用程式，也只有 <a href="http://getfirefox.com">FireFox</a> 可用而已～<br />
以後慢慢增加更多應用程式之後，或許就可以直接拿來當作 <a href="http://www.ubuntu.com/">Ubuntu</a> 的展示程式，不用 LiveCD 也可以馬上體驗 <a href="http://www.ubuntu.com/">Ubuntu</a> 的桌面。<br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/3450957.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/3450957.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Mon, 11 Jun 2007 17:17:28 +0800</pubDate>
</item>
<item>
	<title>OpenSuSE 的套件管理</title>
	<description><![CDATA[
			最近同事玩起 Linux，試完了許多套之後，他選擇了 OpenSUSE，介面看來不錯。
但我實在是對 OpenSUSE 的更新與介面不熟，所以就利用 VMware 建了個 Virtual Machine，裝上 OpenSUSE 試試看。

安裝並不順利，最後 Virtual machine 的 type 是改成了 Other Linux，而非預設提供的 SuSE Linux。
完成安裝以後，也開不起來，boot option 參考 Fail safe，修改為 apm=off acpi=off noresume nosmp noapic maxcpus=0 edd=off 才順利開機成功。

OpenSUSE 使用 Yast2 在管理套件，從網路上諸多文章看來，可以改用 smart / yum / zypper ...等等。
但我最後還是用 Yast2。

官方提供了Additional YaST Package Repositories，從這兒你可以找到許多其他的來源。
黑眼珠這兒也提供了他自己維護的來源：黑眼珠的套件庫-http://software.opensuse.org/download/home:/swyear/openSUSE_10.2/
那麼該怎麼加入這些來源呢？答案是用 installation_sources 指令，舉例來說，如果要加入黑眼珠的套件庫的話：
#installation_sources -a http://software.opensuse.org/download/home:/swyear/openSUSE_10.2/
這樣就行了。

最後，就利用 YaST 來進行線上更新即可。
如果你跟我一樣還是偏愛指令列的話，改用 zypper 吧～
#zypper search package_name
#zypper install package_name
#zypper update
以 zypper 替代 installation_sources 的話，可用
#zypper service-add repository_url
更多的用法可以看
#zypper --help

參考資料：黑眼珠 » 套件庫黑眼珠 » Blog Archive » 安裝軟體(3)RPM的整合工具Additional YaST Package Repositories - openSUSESuSE Linux 論壇


		]]>
	</description>
	<content:encoded><![CDATA[
			最近同事玩起 Linux，試完了許多套之後，他選擇了 <a href="http://en.opensuse.org/Welcome_to_openSUSE.org">OpenSUSE</a>，介面看來不錯。<br />
但我實在是對 <a href="http://en.opensuse.org/Welcome_to_openSUSE.org">OpenSUSE</a> 的更新與介面不熟，所以就利用 VMware 建了個 Virtual Machine，裝上 <a href="http://en.opensuse.org/Welcome_to_openSUSE.org">OpenSUSE</a> 試試看。<br />
<br />
安裝並不順利，最後 Virtual machine 的 type 是改成了 Other Linux，而非預設提供的 SuSE Linux。<br />
完成安裝以後，也開不起來，boot option 參考 Fail safe，修改為 apm=off acpi=off noresume nosmp noapic maxcpus=0 edd=off 才順利開機成功。<br />
<br />
<a href="http://en.opensuse.org/Welcome_to_openSUSE.org">OpenSUSE</a> 使用 Yast2 在管理套件，從網路上諸多文章看來，可以改用 smart / yum / zypper ...等等。<br />
但我最後還是用 Yast2。<br />
<br />
官方提供了<a href="http://en.opensuse.org/Additional_YaST_Package_Repositories">Additional YaST Package Repositories</a>，從這兒你可以找到許多其他的來源。<br />
<a href="http://swyear.no-ip.org/wp/">黑眼珠</a>這兒也提供了他自己維護的來源：<a href="http://swyear.no-ip.org/wp/?page_id=450">黑眼珠的套件庫</a>-<a href="http://software.opensuse.org/download/home:/swyear/openSUSE_10.2/">http://software.opensuse.org/download/home:/swyear/openSUSE_10.2/</a><br />
那麼該怎麼加入這些來源呢？答案是用 installation_sources 指令，舉例來說，如果要加入<a href="http://swyear.no-ip.org/wp/?page_id=450">黑眼珠的套件庫</a>的話：<br />
#installation_sources -a http://software.opensuse.org/download/home:/swyear/openSUSE_10.2/<br />
這樣就行了。<br />
<br />
最後，就利用 YaST 來進行線上更新即可。<br />
如果你跟我一樣還是偏愛指令列的話，改用 zypper 吧～<br />
#zypper search package_name<br />
#zypper install package_name<br />
#zypper update<br />
以 zypper 替代 installation_sources 的話，可用<br />
#zypper service-add repository_url<br />
更多的用法可以看<br />
#zypper --help<br />
<br />
參考資料：<ul><li><a href="http://swyear.no-ip.org/wp/?page_id=450">黑眼珠 » 套件庫</a></li><li><a href="http://swyear.no-ip.org/wp/?p=513">黑眼珠 » Blog Archive » 安裝軟體(3)RPM的整合工具</a></li><li><a href="http://en.opensuse.org/Additional_YaST_Package_Repositories">Additional YaST Package Repositories - openSUSE</a></li><a href="http://www.suse.idv.tw/index.php?sid=0c446cecac0dfa0377cf19bfbe2934af">SuSE Linux 論壇</a></ul><br />
<br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/2989535.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/2989535.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Wed, 11 Apr 2007 14:48:07 +0800</pubDate>
</item>
<item>
	<title>在 Ubuntu Linux 下製作 DVD</title>
	<description><![CDATA[
			首要之務，當然是先作功課，運氣很好，在Digg看到了不錯的文章：Making DVD in Linux。
文章裏面主要是介紹DVD styler這套軟體。

看到以後，當然是馬上來試試囉。很遺憾，在我的Ubuntu (Edgy)上裝不起來，官方也沒有對Ubuntu(Edgy)正式提供支援，他只支援到 Dapper 而已。

怎麼辦？就此打退堂鼓？

再次請Google大神出來幫忙，這時才發現，原來Ubuntu(Edgy)裏面已經有打包類似的軟體了，那就是DeVeDe。

安裝方法：sudo apt-get install devede vcdimager mencoder mplayer w32codecs dvdauthor gnomebaker

使用方法：點取選單：應用程式 &gt; 影音 ，執行 DeVeDe。選取 Video DVD右邊清單下有"新增"，會跳出另外一個對話盒，你可以從這邊去選取你要加入的影片，設置影片尺寸、縮放、輸出訊號(NTSC、PAL)等等。加入以後，畫面下方會顯示你使用了多少空間。不過據我的經驗，整個放滿以後製作出來的 DVD ISO 檔才約 2.1G。點取右下角的"下一頁"之後，DeVeDe就會開始進行轉檔與製作 DVD ISO 。最後再執行GnomeBaker來燒錄產生出來的 ISO檔案即可。

根據今天早上燒製出來的結果，確實可以拿到 DVD Player 上播放。實驗結果成功！

畫面：


		]]>
	</description>
	<content:encoded><![CDATA[
			首要之務，當然是先作功課，運氣很好，在<a href="http://www.digg.com" title="digg">Digg</a>看到了<a href="http://blogcritics.org/archives/2007/01/06/122323.php" title="Making DVD in Linux">不錯的文章：Making DVD in Linux</a>。<br />
文章裏面主要是介紹<a href="http://www.dvdstyler.de/" title="DVD styler">DVD styler</a>這套軟體。<br />
<br />
看到以後，當然是馬上來試試囉。很遺憾，在我的<a href="http://www.ubuntulinux.com" title="Ubuntu Linux">Ubuntu (Edgy)</a>上裝不起來，官方也沒有對<a href="http://www.ubuntulinux.com" title="Ubuntu Linux">Ubuntu(Edgy)</a>正式提供支援，他只支援到 Dapper 而已。<br />
<br />
怎麼辦？就此打退堂鼓？<br />
<br />
再次請<a href="http://www.google.com" title="Google">Google</a>大神出來幫忙，這時才發現，原來<a href="http://www.ubuntulinux.com" title="Ubuntu Linux">Ubuntu(Edgy)</a>裏面已經有打包類似的軟體了，那就是<a href="http://www.rastersoft.com/programas/devede.html" title="DeVeDe">DeVeDe</a>。<br />
<br />
安裝方法：<blockquote>sudo apt-get install devede vcdimager mencoder mplayer w32codecs dvdauthor gnomebaker</blockquote><br />
<br />
使用方法：<ol><li>點取選單：應用程式 &gt; 影音 ，執行 DeVeDe。</li><li>選取 Video DVD</li><li>右邊清單下有"新增"，會跳出另外一個對話盒，你可以從這邊去選取你要加入的影片，設置影片尺寸、縮放、輸出訊號(NTSC、PAL)等等。</li><li>加入以後，畫面下方會顯示你使用了多少空間。不過據我的經驗，整個放滿以後製作出來的 DVD ISO 檔才約 2.1G。點取右下角的"下一頁"之後，<a href="http://www.rastersoft.com/programas/devede.html" title="DeVeDe">DeVeDe</a>就會開始進行轉檔與製作 DVD ISO 。</li><li>最後再執行<a href="http://gnomebaker.sourceforge.net/" title="GnomeBaker">GnomeBaker</a>來燒錄產生出來的 ISO檔案即可。</li></ol><br />
<br />
根據今天早上燒製出來的結果，確實可以拿到 DVD Player 上播放。實驗結果成功！<br />
<br />
畫面：<br />
<a href="http://www.flickr.com/photos/elleryq/354344589/" title="Screenshot-DeVeDe (by elleryq)"><img src="http://static.flickr.com/132/354344589_e07f22123a.jpg" title="Screenshot-DeVeDe (by elleryq)" alt="Screenshot-DeVeDe (by elleryq)" width="500" height="344" /></a><a href="http://www.flickr.com/photos/elleryq/354344594/" title="Screenshot-DeVeDe-File properties (by elleryq)"><img src="http://static.flickr.com/129/354344594_94db1c5914.jpg" title="Screenshot-DeVeDe-File properties (by elleryq)" alt="Screenshot-DeVeDe-File properties (by elleryq)" width="408" height="500" /></a><br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/2639580.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/2639580.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Fri, 12 Jan 2007 09:20:28 +0800</pubDate>
</item>
<item>
	<title>How to install Kyocera Mita KM-3035 in your Ubuntu Linux</title>
	<description><![CDATA[
			公司用的印表機是Kyocera Mita KM-3035的四合一事務機，花了一點時間找到方法，讓它可以在 Linux 下使用。

請找到並下載 Kyocera_Mita_KM-3035_en.ppd. (用 Google 找！)執行系統 &gt; 管理 &gt; 列印選擇 "新增印表機"，選取"網路印表機"，然後再選取 HP JetDirect，填入 IP 位址，進入下一步選擇"安裝驅動程式"，然後選到剛剛步驟一所下載的Kyocera_Mita_KM-3035_en.ppd，下一步指定名稱、說明以後，選擇"套用"即可

接下來的操作其實很像 Windows，你可以用滑鼠右鍵選擇印表機，再選"屬性"去看印表機的各項設定，也可以列印測試頁。
如果覺得怪怪的，可以在終端機下執行 /etc/init.d/cupsys restart，讓 cups 重新載入設定。

我想其他類似 HP 的印表機應該也通用才對。

		]]>
	</description>
	<content:encoded><![CDATA[
			公司用的印表機是Kyocera Mita KM-3035的四合一事務機，花了一點時間找到方法，讓它可以在 Linux 下使用。<br />
<br />
<ol><li>請找到並下載 Kyocera_Mita_KM-3035_en.ppd. (<a href="http://www.google.com/search?q=Kyocera_Mita_KM-3035_en.ppd&ie=utf-8&oe=utf-8">用 Google 找！</a>)</li><li>執行<b>系統 &gt; 管理 &gt; 列印</b></li><li>選擇 "新增印表機"，選取"網路印表機"，然後再選取 HP JetDirect，填入 IP 位址，進入下一步</li><li>選擇"安裝驅動程式"，然後選到剛剛步驟一所下載的Kyocera_Mita_KM-3035_en.ppd，下一步</li><li>指定名稱、說明以後，選擇"套用"即可</li></ol><br />
<br />
接下來的操作其實很像 Windows，你可以用滑鼠右鍵選擇印表機，再選"屬性"去看印表機的各項設定，也可以列印測試頁。<br />
如果覺得怪怪的，可以在終端機下執行 /etc/init.d/cupsys restart，讓 cups 重新載入設定。<br />
<br />
我想其他類似 HP 的印表機應該也通用才對。<br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/2616927.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/2616927.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Wed, 03 Jan 2007 10:32:44 +0800</pubDate>
</item>
<item>
	<title>如何在Ubuntu Edgy上安裝Google toolbar for Firefox</title>
	<description><![CDATA[
			前幾天剛裝好 Ubuntu，想把 FireFox 的一些 Addon 都裝起來，可是卻發現 Google toolbar for Firefox 裝不起來，老是告訴我版本不合。

我："Google 大神啊～請告訴我為什麼？"
Google 大神啊："你既有求於我，我必賞賜於你～這就是你要的解答～How to install Google Toolbar for Firefox"

是的，國外有人將原來的 Addon 解開以後，修改了一下組態檔，重新包裝起來，再分享出來，安裝這個就可以啦～
		]]>
	</description>
	<content:encoded><![CDATA[
			前幾天剛裝好 <a href="http://www.ubuntulinux.com" title="Ubuntu Linux">Ubuntu</a>，想把 FireFox 的一些 Addon 都裝起來，可是卻發現 <a href="http://toolbar.google.com" title="Google toolbar for Firefox">Google toolbar for Firefox</a> 裝不起來，老是告訴我版本不合。<br />
<br />
我："<a href="http://www.google.com" title="Google">Google 大神啊</a>～請告訴我為什麼？"<br />
<a href="http://www.google.com" title="Google">Google 大神啊</a>："你既有求於我，我必賞賜於你～這就是你要的解答～<a href="http://ubuntuguide.org/wiki/Ubuntu_Edgy#How_to_install_Google_Toolbar_for_Firefox" title="How to install Google Toolbar for Firefox">How to install Google Toolbar for Firefox</a>"<br />
<br />
是的，國外有人將原來的 Addon 解開以後，修改了一下組態檔，重新包裝起來，再分享出來，安裝這個就可以啦～
		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/2512286.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/2512286.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Thu, 23 Nov 2006 09:05:22 +0800</pubDate>
</item>
<item>
	<title>聊 Linux 的安裝</title>
	<description><![CDATA[
			以前最熟悉的是 Fedora Core/Red Hat，這套不用說了，算是很簡單的了。

最近呢，則有幸裝了 Debian 3.x，發現跟以前 2.x 比起來，真的是方便很多。
不僅僅是安裝過程有中文，選擇上也很直覺簡單，下載也只要小小的 109M 就可搞定，其他東西大可等到 Base 安裝完成以後，再用 apt-get 來安裝。
基本上跟 Ubuntu 不遑多讓。

裝完以後，突然又興起裝 Linux 熱，於是又下載了 Gentoo 與 OpenSUSE 來玩。
Gentoo 本身網路安裝的話，只要下載 5xM 就搞定，可是安裝與設定上，肯定是讓你頭痛。我以前有裝起來過一次，這次是試到一半就放棄繼續了。不過裝完以後據說效能很好，因為所有套件幾乎都重新在你機器上編譯過。記得官方網站也有提供比較肥大的光碟可以讓你下載，對初學者來說，這應該會比較省事。
OpenSUSE 有提供網路安裝的版本，昨晚試了一下，真是很遜，也無法選擇安裝 Base system 就好，基本上是要下載完所有光碟，會比較好裝。

如果你是初學者，個人是推薦 Debian / Ubuntu / Fedora Core / OpenSUSE 這幾套。
		]]>
	</description>
	<content:encoded><![CDATA[
			以前最熟悉的是 Fedora Core/Red Hat，這套不用說了，算是很簡單的了。<br />
<br />
最近呢，則有幸裝了 Debian 3.x，發現跟以前 2.x 比起來，真的是方便很多。<br />
不僅僅是安裝過程有中文，選擇上也很直覺簡單，下載也只要小小的 109M 就可搞定，其他東西大可等到 Base 安裝完成以後，再用 apt-get 來安裝。<br />
基本上跟 Ubuntu 不遑多讓。<br />
<br />
裝完以後，突然又興起裝 Linux 熱，於是又下載了 Gentoo 與 OpenSUSE 來玩。<br />
Gentoo 本身網路安裝的話，只要下載 5xM 就搞定，可是安裝與設定上，肯定是讓你頭痛。我以前有裝起來過一次，這次是試到一半就放棄繼續了。不過裝完以後據說效能很好，因為所有套件幾乎都重新在你機器上編譯過。記得官方網站也有提供比較肥大的光碟可以讓你下載，對初學者來說，這應該會比較省事。<br />
OpenSUSE 有提供網路安裝的版本，昨晚試了一下，真是很遜，也無法選擇安裝 Base system 就好，基本上是要下載完所有光碟，會比較好裝。<br />
<br />
如果你是初學者，個人是推薦 Debian / Ubuntu / Fedora Core / OpenSUSE 這幾套。
		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/2115321.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/2115321.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Thu, 07 Sep 2006 12:39:41 +0800</pubDate>
</item>
<item>
	<title>Ubuntu 的 Flash Video 沒聲音？</title>
	<description><![CDATA[
			這幾天迷上Youtube，可是在我 Ubuntu 上的 Firefox 播放影片時，卻像啞巴一樣。

於是我丟 "ubuntu flash sound" 這幾個關鍵字給 Google，於是第一個結果就是我要的答案：
*macewan » Howto fix Firefox Flash Video Sound on Ubuntu Linux Dapper

方法很簡單，先安裝 alsa-oss，然後修改 /etc/firefox/firefoxrc，加上 FIREFOX_DSP="aoss"。
$sudo install alsa-oss
$sudo vim /etc/firefox/firefoxrc


		]]>
	</description>
	<content:encoded><![CDATA[
			這幾天迷上<a href="http://www.youtube.com" title="Youtube">Youtube</a>，可是在我 Ubuntu 上的 Firefox 播放影片時，卻像啞巴一樣。<br />
<br />
於是我丟 "ubuntu flash sound" 這幾個關鍵字給 Google，於是第一個結果就是我要的答案：<br />
*<a href="http://www.macewan.org/2006/06/01/howto-firefox-flash-video-sound-on-ubuntu-linux-dapper/" title="macewan » Howto fix Firefox Flash Video Sound on Ubuntu Linux Dapper">macewan » Howto fix Firefox Flash Video Sound on Ubuntu Linux Dapper</a><br />
<br />
方法很簡單，先安裝 alsa-oss，然後修改 /etc/firefox/firefoxrc，加上 FIREFOX_DSP="aoss"。<br />
<blockquote>$sudo install alsa-oss<br />
$sudo vim /etc/firefox/firefoxrc<br />
</blockquote><br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/2109011.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/2109011.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Tue, 05 Sep 2006 20:23:30 +0800</pubDate>
</item>
<item>
	<title>mencoder</title>
	<description><![CDATA[
			突然對作 DVD 有興趣，畢竟也是要好好利用 Notebook 送的 PowerProducer 軟體與 DVD 燒錄機啊。
以前都是把 mpeg 檔轉成 mpeg4，現在可要反過來了，讓 PowerProducer 可以順利轉成 DVD。

用VirtualDub是很方便，只是懶得裝 Codec，也懶得裝大堆頭的 Codec 套件。(自從用了可以通吃的VLC media player以後，就懶了...)
是故，在這方面 Linux 的 MPlayer 就顯得可愛多了。
不但能播放還可以轉檔，摸蜆兼洗褲，一舉兩得。

這裡就貼一下我用來轉 mpeg4 以及現在轉 mpeg 的指令用法：
轉 mpeg 為 mpeg4#!/bin/sh
# usage: mpg2mp4.sh your_mpg your_avi
VBITRATE=500

mencoder "$1" -ovc frameno -o frameno.avi -oac mp3lame -lameopts vbr=3
mencoder "$1" -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=$VBITRATE:vpass=1 -oac copy -o "$2"
mencoder "$1" -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=$VBITRATE:vpass=2 -oac copy -o "$2"

rm -f frameno.avi
rm -f *.log
從 mpeg4 轉 mpeg(可合成字幕)#!/bin/sh
# usage: mp42mpg.sh your_avi your_srt your_mpg
# msjh.ttf 是微軟提供的中黑體，此處你可改用別的字體。
# -subcp 是字幕檔所使用的編碼，如果字幕檔是 unicode，可以直接把 -subcp cp950 改為 -unicode，這邊設為 -subcp cp950 表示是 big5。
mencoder -ovc lavc -oac lavc -of mpeg -mpegopts format=dvd:telecine -vf scale=720:480,harddup -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:keyint=15:acodec=ac3:aspect=16/9 -ofps 24000/1001 -sub $2 -subcp cp950 -o $e -font ~/.fonts/msjh.ttf -subfont-text-scale 3 $1


官方的說明文件還蠻清楚的，有不知道怎麼轉的，不妨直接看說明文件。

參考資料：Using MEncoder to create VCD/SVCD/DVD-compliant files.
		]]>
	</description>
	<content:encoded><![CDATA[
			突然對作 DVD 有興趣，畢竟也是要好好利用 Notebook 送的 PowerProducer 軟體與 DVD 燒錄機啊。<br/>
以前都是把 mpeg 檔轉成 mpeg4，現在可要反過來了，讓 PowerProducer 可以順利轉成 DVD。<br/>
<br/>
用<a href="http://virtualdub.sourceforge.net" title="VirtualDub">VirtualDub</a>是很方便，只是懶得裝 Codec，也懶得裝大堆頭的 Codec 套件。(自從用了可以通吃的<a href="http://www.videolan.org/vlc/" title="VLC media player">VLC media player</a>以後，就懶了...)<br/>
是故，在這方面 Linux 的 <a href="http://www.mplayerhq.hu" title="MPlayer - The Movie Player">MPlayer</a> 就顯得可愛多了。<br/>
不但能播放還可以轉檔，摸蜆兼洗褲，一舉兩得。<br/>
<br/>
這裡就貼一下我用來轉 mpeg4 以及現在轉 mpeg 的指令用法：<br/>
<ul><li>轉 mpeg 為 mpeg4<pre>#!/bin/sh
# usage: mpg2mp4.sh your_mpg your_avi
VBITRATE=500

mencoder "$1" -ovc frameno -o frameno.avi -oac mp3lame -lameopts vbr=3
mencoder "$1" -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=$VBITRATE:vpass=1 -oac copy -o "$2"
mencoder "$1" -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=$VBITRATE:vpass=2 -oac copy -o "$2"

rm -f frameno.avi
rm -f *.log
</pre></li><li>從 mpeg4 轉 mpeg(可合成字幕)<pre>#!/bin/sh
# usage: mp42mpg.sh your_avi your_srt your_mpg
# msjh.ttf 是微軟提供的中黑體，此處你可改用別的字體。
# -subcp 是字幕檔所使用的編碼，如果字幕檔是 unicode，可以直接把 -subcp cp950 改為 -unicode，這邊設為 -subcp cp950 表示是 big5。
mencoder -ovc lavc -oac lavc -of mpeg -mpegopts format=dvd:telecine -vf scale=720:480,harddup -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:keyint=15:acodec=ac3:aspect=16/9 -ofps 24000/1001 -sub $2 -subcp cp950 -o $e -font ~/.fonts/msjh.ttf -subfont-text-scale 3 $1
</pre></li></ul>
<br/>
官方的說明文件還蠻清楚的，有不知道怎麼轉的，不妨直接看說明文件。<br/>
<br/>
參考資料：<ul><li><a href="http://www.mplayerhq.hu/DOCS/HTML/en/menc-feat-vcd-dvd.html" title="13.7. Using MEncoder to create VCD/SVCD/DVD-compliant files.">Using MEncoder to create VCD/SVCD/DVD-compliant files.</a></li></ul>
		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/1993913.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/1993913.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Wed, 09 Aug 2006 19:09:14 +0800</pubDate>
</item>
<item>
	<title>改變 bash 的按鍵行為</title>
	<description><![CDATA[
			詳情可以參考 /etc/inputrc 內的註解，如果改 /etc/inputrc，影響的是所有人。
如果只想改自己的，那就複製 /etc/inputrc 到 ~/.inputrc，然後編輯 ~/.inputrc 即可。

改完之後，記得要重新登入。

參考資料：
鳥哥的 Linux 私房菜 -- 學習 bash shellLearning Linux-第五章﹕Shell 和 Shell Script

		]]>
	</description>
	<content:encoded><![CDATA[
			詳情可以參考 /etc/inputrc 內的註解，如果改 /etc/inputrc，影響的是所有人。<br />
如果只想改自己的，那就複製 /etc/inputrc 到 ~/.inputrc，然後編輯 ~/.inputrc 即可。<br />
<br />
改完之後，記得要重新登入。<br />
<br />
參考資料：<br />
<ul><li><a href="http://linux.vbird.org/linux_basic/0320bash.php#settings_bashrc" title="鳥哥的 Linux 私房菜 -- 學習 bash shell">鳥哥的 Linux 私房菜 -- 學習 bash shell</a></li><li><a href="http://www.study-area.org/linux/system/linux_shell.htm" title="Learning Linux-第五章﹕Shell 和 Shell Script">Learning Linux-第五章﹕Shell 和 Shell Script</a></li></ul><br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/1958200.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/1958200.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Tue, 01 Aug 2006 12:22:28 +0800</pubDate>
</item>
<item>
	<title>以 script 產生 5000 首 mp3</title>
	<description><![CDATA[
			5000 首 mp3 ?!
去哪裡生啊，靈機一動，不如使用 script 來產生，快又有效。
最早的一個版本是拿一個樣板的 mp3 來複製，可是又怕內容有版權問題，所以後來改用 Text to Speech 的軟體來將文字轉成聲音...

我的環境：Fecora Core 5
會用到的套件：Festival (text2wave)、lame (轉 wave 為 mp3)、id3tag (為轉好的 mp3 上 id3 tag)。

程式碼如下：
#!/bin/sh
#
# run2.sh
# This script is used to generate short songs.
# You can decide how many songs should be generated by modify LIMITSONGS variable.
#
# Dependency:
#   festival (Text to speech by text2wave)
#   lame (convert wave to mp3)
#   id3tag (tag the generated mp3) 
#
# Tested environment:
#   Fedora Core 5
#
ITER=1
LIMITSONGS=5002
((TOTAL=LIMITEDSONGS - 1))

while (($ITER < $LIMITSONGS))
do
    NEWFILENAME=`printf "./%04d.mp3" $ITER`
    WAVEFILE=`printf "%d.wav" $ITER`
    ((ALBUMNUM=ITER / 20))
    ((ARTISTNUM=ITER / 20))
    ALBUM=`printf "Album%04d" $ALBUMNUM`
    ARTIST=`printf "Artist%04d" $ARTISTNUM`
    TITLE=`printf "Song%04d" $ITER`
    TEXT=`printf "Hello world! This is song %d which is generated by text2wave.  Here are %d songs, enjoy them.  See you later, baby." $ITER $TOTAL`
    
    echo Processing $NEWFILENAME
    echo $TEXT > text.txt
    text2wave -F 19200 -o $WAVEFILE text.txt
    lame $WAVEFILE $NEWFILENAME
    id3tag --artist=$ARTIST --album=$ALBUM --song=$TITLE --genre=classic --track=$ITER --desc="generated by script." --total=$TOTAL $NEWFILENAME
    ((ITER = ITER + 1 ))

    rm -f $WAVEFILE
done

rm -f text.txt
echo "done."


LIMITESONGS 用來控制要產生的數量。
TEXT 則是要說的文字，目前 festival 還不支援中文，所以只能放一些英文字串。
托福，也因此我學到 bash script 裡面可以運算變數內容，作加減乘除，以前我以為只能運算文字內容而已，真的是不經一事不長一智。

		]]>
	</description>
	<content:encoded><![CDATA[
			5000 首 mp3 ?!<br />
去哪裡生啊，靈機一動，不如使用 script 來產生，快又有效。<br />
最早的一個版本是拿一個樣板的 mp3 來複製，可是又怕內容有版權問題，所以後來改用 Text to Speech 的軟體來將文字轉成聲音...<br />
<br />
我的環境：Fecora Core 5<br />
會用到的套件：Festival (text2wave)、lame (轉 wave 為 mp3)、id3tag (為轉好的 mp3 上 id3 tag)。<br />
<br />
程式碼如下：<br />
<blockquote>#!/bin/sh<br />
#<br />
# run2.sh<br />
# This script is used to generate short songs.<br />
# You can decide how many songs should be generated by modify LIMITSONGS variable.<br />
#<br />
# Dependency:<br />
#   festival (Text to speech by text2wave)<br />
#   lame (convert wave to mp3)<br />
#   id3tag (tag the generated mp3) <br />
#<br />
# Tested environment:<br />
#   Fedora Core 5<br />
#<br />
ITER=1<br />
LIMITSONGS=5002<br />
((TOTAL=LIMITEDSONGS - 1))<br />
<br />
while (($ITER < $LIMITSONGS))<br />
do<br />
    NEWFILENAME=`printf "./%04d.mp3" $ITER`<br />
    WAVEFILE=`printf "%d.wav" $ITER`<br />
    ((ALBUMNUM=ITER / 20))<br />
    ((ARTISTNUM=ITER / 20))<br />
    ALBUM=`printf "Album%04d" $ALBUMNUM`<br />
    ARTIST=`printf "Artist%04d" $ARTISTNUM`<br />
    TITLE=`printf "Song%04d" $ITER`<br />
    TEXT=`printf "Hello world! This is song %d which is generated by text2wave.  Here are %d songs, enjoy them.  See you later, baby." $ITER $TOTAL`<br />
    <br />
    echo Processing $NEWFILENAME<br />
    echo $TEXT > text.txt<br />
    text2wave -F 19200 -o $WAVEFILE text.txt<br />
    lame $WAVEFILE $NEWFILENAME<br />
    id3tag --artist=$ARTIST --album=$ALBUM --song=$TITLE --genre=classic --track=$ITER --desc="generated by script." --total=$TOTAL $NEWFILENAME<br />
    ((ITER = ITER + 1 ))<br />
<br />
    rm -f $WAVEFILE<br />
done<br />
<br />
rm -f text.txt<br />
echo "done."<br />
</blockquote><br />
<br />
LIMITESONGS 用來控制要產生的數量。<br />
TEXT 則是要說的文字，目前 festival 還不支援中文，所以只能放一些英文字串。<br />
托福，也因此我學到 bash script 裡面可以運算變數內容，作加減乘除，以前我以為只能運算文字內容而已，真的是不經一事不長一智。<br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/1749819.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/1749819.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Tue, 13 Jun 2006 15:58:09 +0800</pubDate>
</item>
<item>
	<title>SELinux tip</title>
	<description><![CDATA[
			今天要用到時，才驚覺以前的筆記居然不見了...，努力回想了好一陣子，才想起來。
一般來說，如果不熟的話，最好是關掉 SELinux 選項。
那我為甚麼要用？.....別問了吧....

SELinux 的 policy 真的是複雜，複雜到我實在是不太想看下去。
這裡有個簡單的方法可以幫你產生 policy，首先，先去執行被 SELinux 阻擋的程式，然後執行
#audit2allow -d -o xxx.policy
這會產生 xxx.policy

接著把這個檔案複製到 /etc/selinux/targeted/src/policy/domains/misc/local.te
切到 /etc/selinux/targeted/src/policy/
執行 make reload
這樣就大功告成了。

p.s. 我的環境是CentOS 4.3，RHEL、WHEL、Fedora應該都差不多。

		]]>
	</description>
	<content:encoded><![CDATA[
			今天要用到時，才驚覺以前的筆記居然不見了...，努力回想了好一陣子，才想起來。<br />
一般來說，如果不熟的話，最好是關掉 SELinux 選項。<br />
那我為甚麼要用？.....別問了吧....<br />
<br />
SELinux 的 policy 真的是複雜，複雜到我實在是不太想看下去。<br />
這裡有個簡單的方法可以幫你產生 policy，首先，先去執行被 SELinux 阻擋的程式，然後執行<br />
#audit2allow -d -o xxx.policy<br />
這會產生 xxx.policy<br />
<br />
接著把這個檔案複製到 /etc/selinux/targeted/src/policy/domains/misc/local.te<br />
切到 /etc/selinux/targeted/src/policy/<br />
執行 make reload<br />
這樣就大功告成了。<br />
<br />
p.s. 我的環境是CentOS 4.3，RHEL、WHEL、Fedora應該都差不多。<br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/1707993.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/1707993.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Sun, 04 Jun 2006 19:27:55 +0800</pubDate>
</item>
<item>
	<title>Firewall: lokkit 的設定</title>
	<description><![CDATA[
			進入 console mode 之後，輸入 setup
選到 Firewall configuration (或直接輸入 lokkit)
再選 customize，至此即可設定允許哪些協定進入你 linux 防火牆。

到 Allow incoming 那邊，將協定勾選(按空白鍵勾選，Tab鍵切換)。
如果沒有列出來的，你可能要在 Other Ports 那欄自行輸入。
格式大致是這樣：
protocol_name:[tcp|udp]

拿我家裏的 server 來說，除了勾選 HTTP、SSH 之外，我還自行輸入了
pop3:tcp https:tcp netbios-ssn:tcp microsoft-ds:tcp netbios-ns:udp netbios-dgm:udp

不知道有哪些 protocol 的話，可以用 netstat -a 自己去看。
我也是嘗試之後，才發現 Other ports 那欄的輸入格式可以參考 netstat -a 的結果。


		]]>
	</description>
	<content:encoded><![CDATA[
			進入 console mode 之後，輸入 setup<br />
選到 Firewall configuration (或直接輸入 lokkit)<br />
再選 customize，至此即可設定允許哪些協定進入你 linux 防火牆。<br />
<br />
到 Allow incoming 那邊，將協定勾選(按空白鍵勾選，Tab鍵切換)。<br />
如果沒有列出來的，你可能要在 Other Ports 那欄自行輸入。<br />
格式大致是這樣：<br />
protocol_name:[tcp|udp]<br />
<br />
拿我家裏的 server 來說，除了勾選 HTTP、SSH 之外，我還自行輸入了<br />
pop3:tcp https:tcp netbios-ssn:tcp microsoft-ds:tcp netbios-ns:udp netbios-dgm:udp<br />
<br />
不知道有哪些 protocol 的話，可以用 netstat -a 自己去看。<br />
我也是嘗試之後，才發現 Other ports 那欄的輸入格式可以參考 netstat -a 的結果。<br />
<br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/1398286.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/1398286.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Tue, 11 Apr 2006 16:16:17 +0800</pubDate>
</item>
<item>
	<title>XWindows bootstrap</title>
	<description><![CDATA[
			這是我的環境: Fedora Core 5, GNOME
簡單紀錄一下這幾天 Trace 的結果.

當你開機後預設模式是圖形(怎麼知道預設模式是甚麼??請參考 /etc/inittab.)的時候,順序大致是這樣子的:
1. Kernel
2. /etc/rc.d/rc.sysinit
3. /etc/rc.d/rc, /etc/rc5.d/ 下的 script
4. /etc/rc.local (其實是在 /etc/rc.d/rc.local)
5. prefdm, 這會把預設的 desktop manager 叫起來 (怎麼知道預設 desktop manager 是甚麼?請參考 /etc/sysconfig/desktop)
6. 登入以後,會執行 /etc/X11/xinit/Xsession
7. /etc/X11/xinit/xinitrc
8. /etc/X11/xinit/xinitrc-common
9. /etc/X11/xinit/xinitrc.d/* 下的 script, 這裡面的 xinput.sh 會把輸入法叫起來.
10. 完成.

為甚麼我沒事要去 Trace? 因為前一陣子我升級 Fedora Core 4 到 5 之後,GNOME 就爛掉了,無法登入.
搞了幾天,都不知道為甚麼,只能以克難的方式,先在 $HOME 佈置 .Xsession, .Xclients 來應急.
今天 Trace 之後,終於發現問題所在.
原因是 /etc/gdm/custom.conf 裡 BaseXsession 預設為 /etc/X11/xdm/Xsession.
gdm 登入後會去執行這個 script, 而 xdm/Xsession 只會跑 xdm 的一些東西,所以就只會登入到很簡陋的 xdm 畫面.
呼~~終於解決了.

參考資料:GDM/Configuration/The Script DirectoriesGDM

		]]>
	</description>
	<content:encoded><![CDATA[
			這是我的環境: Fedora Core 5, GNOME<br />
簡單紀錄一下這幾天 Trace 的結果.<br />
<br />
當你開機後預設模式是圖形(怎麼知道預設模式是甚麼??請參考 /etc/inittab.)的時候,順序大致是這樣子的:<br />
1. Kernel<br />
2. /etc/rc.d/rc.sysinit<br />
3. /etc/rc.d/rc, /etc/rc5.d/ 下的 script<br />
4. /etc/rc.local (其實是在 /etc/rc.d/rc.local)<br />
5. prefdm, 這會把預設的 desktop manager 叫起來 (怎麼知道預設 desktop manager 是甚麼?請參考 /etc/sysconfig/desktop)<br />
6. 登入以後,會執行 /etc/X11/xinit/Xsession<br />
7. /etc/X11/xinit/xinitrc<br />
8. /etc/X11/xinit/xinitrc-common<br />
9. /etc/X11/xinit/xinitrc.d/* 下的 script, 這裡面的 xinput.sh 會把輸入法叫起來.<br />
10. 完成.<br />
<br />
為甚麼我沒事要去 Trace? 因為前一陣子我升級 Fedora Core 4 到 5 之後,GNOME 就爛掉了,無法登入.<br />
搞了幾天,都不知道為甚麼,只能以克難的方式,先在 $HOME 佈置 .Xsession, .Xclients 來應急.<br />
今天 Trace 之後,終於發現問題所在.<br />
原因是 /etc/gdm/custom.conf 裡 BaseXsession 預設為 /etc/X11/xdm/Xsession.<br />
gdm 登入後會去執行這個 script, 而 xdm/Xsession 只會跑 xdm 的一些東西,所以就只會登入到很簡陋的 xdm 畫面.<br />
呼~~終於解決了.<br />
<br />
參考資料:<ul><li><a href="http://wiki.gentoo.tw/mediawiki/index.php/GDM/Configuration/The_Script_Directories" title="GDM/Configuration/The Script Directories - 維基百科">GDM/Configuration/The Script Directories</a></li><li><a href="http://wiki.gentoo.tw/mediawiki/index.php/GDM" title="GDM - 維基百科">GDM</a></li></ul><br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/1344820.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/1344820.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Fri, 31 Mar 2006 16:14:49 +0800</pubDate>
</item>
<item>
	<title>Upgrade FC4 to FC5</title>
	<description><![CDATA[
			公司用的 distribution 是 Fedora Core 4, 最近 Fedora Core 5 release 了,就想來升級看看.
世界上真的有很多人想法跟我一樣,用 yum 來升級就好了.

這篇寫的很詳細:How to upgrade from FC4 to FC5 via yum?

主要步驟:下載 fedora-release-5-5.noarch.rpm,然後安裝先更新 yum: yum update yum接著 upgrade: yum upgrade

比較麻煩的是步驟 2與步驟 3,這邊你可能會遇到蠻多麻煩,說有 dependency 問題,這時候就得參考這篇,他有提供一個perl script來解決這種鳥問題.
我自己的方法是,紀錄這些套件,把他們移除掉,等升級完再安裝回去.

現在我已經升級完啦,接下來就是調校了~

參考資料:YumUpgradeFaqUpgrading Red Hat Linux/Fedora Core with yumHow to upgrade from FC4 to FC5 via yum?

		]]>
	</description>
	<content:encoded><![CDATA[
			公司用的 distribution 是 Fedora Core 4, 最近 Fedora Core 5 release 了,就想來升級看看.<br />
世界上真的有很多人想法跟我一樣,用 yum 來升級就好了.<br />
<br />
這篇寫的很詳細:<a href="http://www.makuchaku.info/blog/how-to-upgrade-from-fc4-to-fc5-via-yum" title="MakuChaku's Blog: How to upgrade from FC4 to FC5 via yum?">How to upgrade from FC4 to FC5 via yum?</a><br />
<br />
主要步驟:<ol><li>下載 fedora-release-5-5.noarch.rpm,然後安裝</li><li>先更新 yum: yum update yum</li><li>接著 upgrade: yum upgrade</li></ol><br />
<br />
比較麻煩的是步驟 2與步驟 3,這邊你可能會遇到蠻多麻煩,說有 dependency 問題,這時候就得參考<a href="http://www.brandonhutchinson.com/Upgrading_Red_Hat_Linux_with_yum.html" title="Upgrading Red Hat Linux/Fedora Core with yum">這篇</a>,他有提供一個perl script來解決這種鳥問題.<br />
我自己的方法是,紀錄這些套件,把他們移除掉,等升級完再安裝回去.<br />
<br />
現在我已經升級完啦,接下來就是調校了~<br />
<br />
參考資料:<ul><li><a href="http://www.fedoraproject.org/wiki/YumUpgradeFaq" title="YumUpgradeFaq - Fedora Project Wiki">YumUpgradeFaq</a></li><li><a href="http://www.brandonhutchinson.com/Upgrading_Red_Hat_Linux_with_yum.html" title="Upgrading Red Hat Linux/Fedora Core with yum">Upgrading Red Hat Linux/Fedora Core with yum</a></li><li><a href="http://www.makuchaku.info/blog/how-to-upgrade-from-fc4-to-fc5-via-yum" title="MakuChaku's Blog: How to upgrade from FC4 to FC5 via yum?">How to upgrade from FC4 to FC5 via yum?</a></li></ul><br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/1330488.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/1330488.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Tue, 28 Mar 2006 16:38:43 +0800</pubDate>
</item>
<item>
	<title>Ubuntu live cd on Averatec 6200</title>
	<description><![CDATA[
			前一陣子有想把 Linux 裝到我的 notebook - Averatec 6200 (其實是 MSI M630)上.
正巧Ubuntu Linux又挺紅的,就決定用他.所以就下載了Ubuntu Linux的 Live CD,先行嚐鮮.
可是,怎麼弄都無法從 Live CD 開機,這是一個警訊,表示 Notebook 可能有些麻煩需要克服.

這時候想到,之前有看過一個網站,有提供很多 Notebook 與 Linux 相容問題的網站.利用Google找了一下,很輕易就找到了,就是這裡 Linux on Laptops. 遺憾的是,裡面並沒有 Averatec 6200 的資訊.

時光荏苒,匆匆數周又過去.

今天晚上,再次用 Live CD 開機,並仔細看了一下開機選項 (按 F2, F3, F4, F5, F6, F7 都可以看到不同的選項), 然後輸入這行指令進行開機:live vga=771 noapic nolapic gdth=disable:y

這次很順利就開起來囉~ :)

接下來就是無線網路問題啦~
Ubuntu Linux可以辨認到我的無線網路Driver, 所以接下來就是軟體設定問題.
摸索了一陣(會這麼久,其實有一部分也是因為我忘記我自己的 key index 與 key, :p ),最後在 /etc/network/interfaces 裡面作下列設定
iface ra0 inet dhcp
# 
wireless-essid your_essid

# keys
wireless-key1 your_key_1
wireless-key2 your_key_2
wireless-key3 your_key_3
wireless-key4 your_key_4

# 請根據你的 key 索引值來調整
# adjust the value according your key index.
wireless-defaultkey 1

# 我用的是restricted(受限制的),如果沒用的話,把這行註解掉吧
# I use restricted, you can comment this line.
wireless-keymode restricted

auto ra0


再重新啟動 networking service 就可以了.
sudo /etc/init.d/networking restart

參考資料:WiFiHowtoLinux on Laptops

		]]>
	</description>
	<content:encoded><![CDATA[
			前一陣子有想把 Linux 裝到我的 notebook - Averatec 6200 (其實是 MSI M630)上.<br />
正巧<a href="http://www.ubuntu.com/" title="Ubuntu Linux">Ubuntu Linux</a>又挺紅的,就決定用他.所以就下載了<a href="http://www.ubuntu.com/" title="Ubuntu Linux">Ubuntu Linux</a>的 Live CD,先行嚐鮮.<br />
可是,怎麼弄都無法從 Live CD 開機,這是一個警訊,表示 Notebook 可能有些麻煩需要克服.<br />
<br />
這時候想到,之前有看過一個網站,有提供很多 Notebook 與 Linux 相容問題的網站.利用<a href="http://www.google.com" title="Google">Google</a>找了一下,很輕易就找到了,就是這裡 <a href="http://www.linux-laptop.net/" title="Linux on Laptops">Linux on Laptops</a>. 遺憾的是,裡面並沒有 Averatec 6200 的資訊.<br />
<br />
時光荏苒,匆匆數周又過去.<br />
<br />
今天晚上,再次用 Live CD 開機,並仔細看了一下開機選項 (按 F2, F3, F4, F5, F6, F7 都可以看到不同的選項), 然後輸入這行指令進行開機:<blockquote>live vga=771 noapic nolapic gdth=disable:y</blockquote><br />
<br />
這次很順利就開起來囉~ :)<br />
<br />
接下來就是無線網路問題啦~<br />
<a href="http://www.ubuntu.com/" title="Ubuntu Linux">Ubuntu Linux</a>可以辨認到我的無線網路Driver, 所以接下來就是軟體設定問題.<br />
摸索了一陣(會這麼久,其實有一部分也是因為我忘記我自己的 key index 與 key, :p ),最後在 /etc/network/interfaces 裡面作下列設定<br />
<blockquote>iface ra0 inet dhcp<br />
# <br />
wireless-essid your_essid<br />
<br />
# keys<br />
wireless-key1 your_key_1<br />
wireless-key2 your_key_2<br />
wireless-key3 your_key_3<br />
wireless-key4 your_key_4<br />
<br />
# 請根據你的 key 索引值來調整<br />
# adjust the value according your key index.<br />
wireless-defaultkey 1<br />
<br />
# 我用的是restricted(受限制的),如果沒用的話,把這行註解掉吧<br />
# I use restricted, you can comment this line.<br />
wireless-keymode restricted<br />
<br />
auto ra0<br />
</blockquote><br />
<br />
再重新啟動 networking service 就可以了.<br />
<blockquote>sudo /etc/init.d/networking restart</blockquote><br />
<br />
參考資料:<ul><li><a href="https://wiki.ubuntu.com/WiFiHowto" title="WiFiHowto - Ubuntu Wiki">WiFiHowto</a></li><li><a href="http://www.linux-laptop.net/" title="Linux on Laptops">Linux on Laptops</a></li></ul><br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/1226209.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/1226209.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Wed, 08 Mar 2006 22:27:11 +0800</pubDate>
</item>
<item>
	<title>freenx on Fedora Core 4</title>
	<description><![CDATA[
			
以前裝過,可是忘記了
現在又想用,結果搞了半天,好不容易設定成功了,把方法記起來.

$su root
#yum install freenx

由於這一版的 freenx 使用的目錄有點改變
所以到 /var/lib/nxserver/ 下,多增加一個軟連結
#cd /var/lib/nxserver
#ln -s nxhome home

接著改一下設定
#cd /etc/nxserver
#cp node.conf.sample node.conf

打開 node.conf
把 SERVER_NAME 與 SSHD_PORT 這兩行前面的註解拿掉.
重新啟動 nxserver
#nxserver --restart

確定 user 是否已經自動幫你加入了,看有沒有自己的 linux 帳號
#nxserver --listuser
如果沒有的話,那麼就得新增 user
#nxserver --adduser your_name
#nxserver --passwd your_name

安裝 Windows 版的 nxclient, 這可以到NoMachine網站下載.
下載完成以後就進行安裝,基本上都是 step by step, 沒啥困難的.
主要的幾個設定就是 ip, port, 還有 key

接著回到 server, 處理 key 的部份
這邊我不清楚是否要重新產生,不過我還是做了.
#nxkeygen
產生完畢後,切換到 /var/lib/nxserver/home/.ssh,將 client.id_dsa.key 檔案的內容複製出來,這邊就不仔細描述複製的方法了,總之你自己看著辦.
#cd /var/lib/nxserver/home/.ssh
#cat client.id_dsa.key

把這內容貼到 nxclient for Windows 的 key 裡面 (在 configuration 的時候會有個按鈕叫做 "key",點下後可以貼東西 )
保存設定以後,輸入你的帳號與密碼,再進行連結,這樣就大功告成了.

參考資料:
*HOWTO FreeNX Server - Gentoo Linux Wiki
*NX/FreeNX HOWTO
*Linux-Tip.net - Remote access with FreeNX in 5 steps
*FedoraNEWS.ORG - HOWTO setup Freenx on Fedora

		]]>
	</description>
	<content:encoded><![CDATA[
			<br />
以前裝過,可是忘記了<br />
現在又想用,結果搞了半天,好不容易設定成功了,把方法記起來.<br />
<br />
$su root<br />
#yum install freenx<br />
<br />
由於這一版的 freenx 使用的目錄有點改變<br />
所以到 /var/lib/nxserver/ 下,多增加一個軟連結<br />
#cd /var/lib/nxserver<br />
#ln -s nxhome home<br />
<br />
接著改一下設定<br />
#cd /etc/nxserver<br />
#cp node.conf.sample node.conf<br />
<br />
打開 node.conf<br />
把 SERVER_NAME 與 SSHD_PORT 這兩行前面的註解拿掉.<br />
重新啟動 nxserver<br />
#nxserver --restart<br />
<br />
確定 user 是否已經自動幫你加入了,看有沒有自己的 linux 帳號<br />
#nxserver --listuser<br />
如果沒有的話,那麼就得新增 user<br />
#nxserver --adduser your_name<br />
#nxserver --passwd your_name<br />
<br />
安裝 Windows 版的 nxclient, 這可以到<a href="http://nomachine.com/" title="NoMachine">NoMachine</a>網站下載.<br />
下載完成以後就進行安裝,基本上都是 step by step, 沒啥困難的.<br />
主要的幾個設定就是 ip, port, 還有 key<br />
<br />
接著回到 server, 處理 key 的部份<br />
這邊我不清楚是否要重新產生,不過我還是做了.<br />
#nxkeygen<br />
產生完畢後,切換到 /var/lib/nxserver/home/.ssh,將 client.id_dsa.key 檔案的內容複製出來,這邊就不仔細描述複製的方法了,總之你自己看著辦.<br />
#cd /var/lib/nxserver/home/.ssh<br />
#cat client.id_dsa.key<br />
<br />
把這內容貼到 nxclient for Windows 的 key 裡面 (在 configuration 的時候會有個按鈕叫做 "key",點下後可以貼東西 )<br />
保存設定以後,輸入你的帳號與密碼,再進行連結,這樣就大功告成了.<br />
<br />
參考資料:<br />
*<a href="http://gentoo-wiki.com/HOWTO_FreeNX_Server" title="HOWTO FreeNX Server - Gentoo Linux Wiki">HOWTO FreeNX Server - Gentoo Linux Wiki</a><br />
*<a href="http://www.gnomeuser.org/documents/howto/nx.html" title="NX/FreeNX HOWTO">NX/FreeNX HOWTO</a><br />
*<a href="http://www.linux-tip.net/cms/index.php?option=content&task=view&id=158&Itemid=" title="Linux-Tip.net - Remote access with FreeNX in 5 steps">Linux-Tip.net - Remote access with FreeNX in 5 steps</a><br />
*<a href="http://fedoranews.org/contributors/rick_stout/freenx/" title="FedoraNEWS.ORG - HOWTO setup Freenx on Fedora">FedoraNEWS.ORG - HOWTO setup Freenx on Fedora</a><br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/858266.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/858266.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Tue, 13 Dec 2005 13:10:10 +0800</pubDate>
</item>
<item>
	<title>升級到CentOS 4.2</title>
	<description><![CDATA[
			今天把家裏的server 由 CentOS 3.6 升級到 CentOS 4.2 了.

方法很簡單,下載 CentOS 4.2 的 iso 檔案, 燒成光碟.
將 server 重新開機,並且改由光碟開機.
開機以後,輸入
linux upgradeany
接著進行安裝即可.

安裝完成以後,還有一些需要調整的,例如把一些沒更新到的 el3 rpm 移除掉,調整設定等等的.
這些應該就不必多提了吧. :)

		]]>
	</description>
	<content:encoded><![CDATA[
			今天把家裏的server 由 <a href="http://www.centos.org" title="CentOS">CentOS</a> 3.6 升級到 <a href="http://www.centos.org" title="CentOS">CentOS</a> 4.2 了.<br />
<br />
方法很簡單,下載 <a href="http://www.centos.org" title="CentOS">CentOS</a> 4.2 的 iso 檔案, 燒成光碟.<br />
將 server 重新開機,並且改由光碟開機.<br />
開機以後,輸入<br />
<blockquote>linux upgradeany</blockquote><br />
接著進行安裝即可.<br />
<br />
安裝完成以後,還有一些需要調整的,例如把一些沒更新到的 el3 rpm 移除掉,調整設定等等的.<br />
這些應該就不必多提了吧. :)<br />

		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/802032.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/802032.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Wed, 30 Nov 2005 21:18:41 +0800</pubDate>
</item>
<item>
	<title>gpdf 無法顯示帶有中文的 pdf 文檔</title>
	<description><![CDATA[
			在網路上搜索了一下，找到這篇文章。
想不到真是超簡單的，只要安裝 xpdf 就好了。
如果需要更詳盡的設定，就把 /etc/xpdfrc 複製到 ~/.xpdfrc，然後修改 ~/.xpdfrc 即可。
		]]>
	</description>
	<content:encoded><![CDATA[
			在網路上搜索了一下，找到<a href="http://linuxfans.dazahui.com/html/2/89464.htm" title="使gpdf顯示中文,你要做的僅僅是這樣">這篇文章</a>。<br />
想不到真是超簡單的，只要安裝 xpdf 就好了。<br />
如果需要更詳盡的設定，就把 /etc/xpdfrc 複製到 ~/.xpdfrc，然後修改 ~/.xpdfrc 即可。
		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/554227.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/554227.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Wed, 09 Mar 2005 12:42:55 +0800</pubDate>
</item>
<item>
	<title>mono xsp</title>
	<description><![CDATA[
			今天搞了一天...把心得記述一下...
其實安裝步驟很簡單:
1.因為我是用 rpm base 的 WhiteBox Enterprise Linux,所以先到 DAG:Apt/Yum RPM repository去安裝 mono / xsp / mod_mono 套件.懶得自己挑的話,就用 mono-complete / xsp / mod_mono.
2.到了這裡,其實已經裝好一半. 設定 MONO_PATH

export MONO_PATH=/usr/lib/mono/1.0/

3.在 /etc/httpd/conf.d/ 下,新增一個 mono.conf, 內容如下:

AddType application/x-asp-net .aspx .ashx .asmx .ascx .asax .config .ascx
LoadModule mono_module modules/mod_mono.so
MonoUnixSocket /tmp/mod_mono_server
Alias /mono "/usr/share/doc/xsp-0.9/xsp/test/"
&lt;Directory "/usr/share/doc/xsp-0.9/xsp/test"&gt;
    Options Indexes FollowSymLinks
    AllowOverride FileInfo
    Order allow,deny
    Allow from all
    AddHandler mono .aspx .ascx .asax .ashx .config .cs .asmx
&lt;/Directory&gt;
DirectoryIndex index.aspx Default.aspx


4.重新啟動 httpd
5.修改 /usr/share/doc/xsp-0.9/xsp/test/mod-mono-server.exe.config, 找到 MonoApplications, 將 value 改為 /mono:.
6.切換到 /usr/share/doc/xsp-0.9/xsp/test 下,執行:

#mono /usr/bin/mod-mono-server.exe --root . --applications /mono:.

7. 將 /tmp/mod_mono_server 的 owner 改為 apache :

#chown apache:apache /tmp/mod_mono_server


大功告成,接著你可以利用瀏覽器輸入 http://your_server/mono/ 來看結果了...

這邊其實 apache 的 mod_mono module 是利用 Unix Socket 與 mod-mono-server 溝通的,所以並不會去 listen 任何一個 port...
我之前以為他會與 xsp 一樣,會 listen 8080 port, 猜錯 @_@
		]]>
	</description>
	<content:encoded><![CDATA[
			今天搞了一天...把心得記述一下...<br />
其實安裝步驟很簡單:<br />
1.因為我是用 rpm base 的 <a href="http://www.whiteboxlinux.org" title="WhiteBox Enterprise linux">WhiteBox Enterprise Linux</a>,所以先到 <a href="http://dag.wieers.com/home-made/apt/" title="DAG:Apt/Yum RPM repository">DAG:Apt/Yum RPM repository</a>去安裝 mono / xsp / mod_mono 套件.懶得自己挑的話,就用 mono-complete / xsp / mod_mono.<br />
2.到了這裡,其實已經裝好一半. 設定 MONO_PATH<br />
<blockquote><br />
export MONO_PATH=/usr/lib/mono/1.0/<br />
</blockquote><br />
3.在 /etc/httpd/conf.d/ 下,新增一個 mono.conf, 內容如下:<br />
<blockquote><br />
AddType application/x-asp-net .aspx .ashx .asmx .ascx .asax .config .ascx<br />
LoadModule mono_module modules/mod_mono.so<br />
MonoUnixSocket /tmp/mod_mono_server<br />
Alias /mono "/usr/share/doc/xsp-0.9/xsp/test/"<br />
&lt;Directory "/usr/share/doc/xsp-0.9/xsp/test"&gt;<br />
    Options Indexes FollowSymLinks<br />
    AllowOverride FileInfo<br />
    Order allow,deny<br />
    Allow from all<br />
    AddHandler mono .aspx .ascx .asax .ashx .config .cs .asmx<br />
&lt;/Directory&gt;<br />
DirectoryIndex index.aspx Default.aspx<br />
</blockquote><br />
<br />
4.重新啟動 httpd<br />
5.修改 /usr/share/doc/xsp-0.9/xsp/test/mod-mono-server.exe.config, 找到 MonoApplications, 將 value 改為 /mono:.<br />
6.切換到 /usr/share/doc/xsp-0.9/xsp/test 下,執行:<br />
<blockquote><br />
#mono /usr/bin/mod-mono-server.exe --root . --applications /mono:.<br />
</blockquote><br />
7. 將 /tmp/mod_mono_server 的 owner 改為 apache :<br />
<blockquote><br />
#chown apache:apache /tmp/mod_mono_server<br />
</blockquote><br />
<br />
大功告成,接著你可以利用瀏覽器輸入 http://your_server/mono/ 來看結果了...<br />
<br />
這邊其實 apache 的 mod_mono module 是利用 Unix Socket 與 mod-mono-server 溝通的,所以並不會去 listen 任何一個 port...<br />
我之前以為他會與 xsp 一樣,會 listen 8080 port, 猜錯 @_@
		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/554216.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/554216.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Sat, 12 Feb 2005 22:07:16 +0800</pubDate>
</item>
<item>
	<title>NTLM Authorization Proxy Server (APS)</title>
	<description><![CDATA[
			在這邊看到的, NTLM Authorization Proxy Server (APS).
架設這個以後,一些不知道怎麼用 NTLM 去跟 Microsoft Proxy Server 做認證的軟體,就可以知道怎麼跟 Microsoft Proxy server 溝通了.
簡單的說,他就是跟 Microsoft Proxy server 溝通的 Proxy server...
官方網址:http://ntlmaps.sourceforge.net/
晚點要來架設一個.....要不然很多軟體都會被公司的 proxy 綁死而無法更新 =_= ...
		]]>
	</description>
	<content:encoded><![CDATA[
			在<a href="http://toastytech.com/evil/msproxy.html">這邊</a>看到的, NTLM Authorization Proxy Server (APS).<br />
架設這個以後,一些不知道怎麼用 NTLM 去跟 Microsoft Proxy Server 做認證的軟體,就可以知道怎麼跟 Microsoft Proxy server 溝通了.<br />
簡單的說,他就是跟 Microsoft Proxy server 溝通的 Proxy server...<br />
官方網址:<a href="http://ntlmaps.sourceforge.net/">http://ntlmaps.sourceforge.net/</a><br />
晚點要來架設一個.....要不然很多軟體都會被公司的 proxy 綁死而無法更新 =_= ...
		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/554198.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/554198.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Wed, 05 Jan 2005 22:35:19 +0800</pubDate>
</item>
<item>
	<title>coLinux (續)</title>
	<description><![CDATA[
			前一陣子終於把 coLinux 架起來了~
主要的目的是為了能用 lex 與 yacc ~

雖說自己也有 linux server, 不過並不想在 server 上搞 lex 與 yacc .....

架設 coLinux 的步驟蠻簡單的.
官方網站有Tutorial可供參考....
今天又看到PukiWiki@Taiwan上的這篇文章...
圖文並茂,蠻不錯的~~

這邊則是以前的介紹:coLinux
		]]>
	</description>
	<content:encoded><![CDATA[
			前一陣子終於把 coLinux 架起來了~<br />
主要的目的是為了能用 lex 與 yacc ~<br />
<br />
雖說自己也有 linux server, 不過並不想在 server 上搞 lex 與 yacc .....<br />
<br />
架設 coLinux 的步驟蠻簡單的.<br />
官方網站有<a href="http://www.colinux.org/wiki/index.php">Tutorial</a>可供參考....<br />
今天又看到<a href="http://pukiwiki.idv.tw/">PukiWiki@Taiwan</a>上的<a href="http://pukiwiki.idv.tw/index.php?Windows%2FcoLinux">這篇文章...</a><br />
圖文並茂,蠻不錯的~~<br />
<br />
這邊則是以前的介紹:<a href="000299.html">coLinux</a>
		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/554174.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/554174.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Sat, 06 Nov 2004 22:16:28 +0800</pubDate>
</item>
<item>
	<title>Apache::Gallery</title>
	<description><![CDATA[
			官方網站:http://apachegallery.dk
這裡用的環境: WhiteBox Enterprise Linux 3.0

安裝:
以管理者權限登入 Linux, 確定有安裝 perl-CPAN, 一般預設都會裝進去.
接著,確定 mod_perl, imlib2, xfree86-devel 都有裝進去.

執行 cpan, 依序輸入
install URI::Escape
install Image::Info
install Image::Size
install Text::Template
install CGI
install Image::Imlib2
install Apache::Gallery

都安裝完以後,其實已經快要大功告成.
接著:
1. 到 /etc/httpd/conf.d/ 下新增一個 gallery.conf, 似乎只能以 virtual host 的方式存在,我試了其他方式,試不出來~~ =_=
&lt;VirtualHost *&gt;
&nbsp;&nbsp;ServerName   gallery.yourdomain.org
&nbsp;&nbsp;DocumentRoot /data/pictures/
&nbsp;&nbsp;ErrorLog     logs/gallery-error_log
&nbsp;&nbsp;TransferLog  logs/gallery-access_log
&nbsp;&nbsp;PerlSetVar   GalleryTemplateDir '/usr/local/apache/gallery/templates'
&nbsp;&nbsp;PerlSetVar   GalleryInfo 'Picture Taken => DateTimeOriginal, Flash => Flash'
&nbsp;&nbsp;PerlSetVar   GallerySizes '640 1024 1600 2272'
&nbsp;&nbsp;PerlSetVar   GalleryThumbnailSize '100x75'
&nbsp;&nbsp;PerlSetVar   GalleryCopyrightImage 'htdocs/c.png'
&nbsp;&nbsp;PerlOptions +GlobalRequest
&nbsp;&nbsp;&lt;Location /&gt;
&nbsp;&nbsp;&nbsp;&nbsp;SetHandler        modperl
&nbsp;&nbsp;&nbsp;&nbsp;PerlResponseHandler       Apache::Gallery
&nbsp;&nbsp;&lt;/Location&gt;
&lt;/VirtualHost&gt;


2. 切換到 ~/.cpan/build/Apache-Gallery-0.8
把 templates/default 下的東西複製到 /usr/local/apache/gallery/templates
把 templates/default/gallery.css 複製到 /data/pictures/
把 htdoc 複製到 /var/www/icons 下,並更名為 gallery

3.更新 /etc/httpd/conf/httpd.conf, 把有關 autoindex 模組的部分都註解掉
LoadModule autoindex_module /usr/lib/apache/1.3/mod_autoindex.so
....這裡蠻多的....慢慢試~~

4.把你的照片複製到 /data/pictures/

5.重新啟動 httpd, 然後在你的瀏覽器上輸入 http://gallery.yourdomain.org, 應該就可以看到相簿了~~

不過很可惜....我沒有成功....我一直遇到
Image::Imlib2 load error: No loader for file format

這個錯誤~~

~_~, 可能是 imlib2 有問題吧~~
決定還是另覓相簿軟體~~
		]]>
	</description>
	<content:encoded><![CDATA[
			官方網站:<a href="http://apachegallery.dk">http://apachegallery.dk</a><br />
這裡用的環境: <a href="http://whiteboxlinux.org">WhiteBox Enterprise Linux 3.0</a><br />
<br />
安裝:<br />
以管理者權限登入 Linux, 確定有安裝 perl-CPAN, 一般預設都會裝進去.<br />
接著,確定 mod_perl, imlib2, xfree86-devel 都有裝進去.<br />
<br />
執行 cpan, 依序輸入<br />
install URI::Escape<br />
install Image::Info<br />
install Image::Size<br />
install Text::Template<br />
install CGI<br />
install Image::Imlib2<br />
install Apache::Gallery<br />
<br />
都安裝完以後,其實已經快要大功告成.<br />
接著:<br />
1. 到 /etc/httpd/conf.d/ 下新增一個 gallery.conf, 似乎只能以 virtual host 的方式存在,我試了其他方式,試不出來~~ =_=<br />
<blockquote>&lt;VirtualHost *&gt;<br />
&nbsp;&nbsp;ServerName   gallery.yourdomain.org<br />
&nbsp;&nbsp;DocumentRoot /data/pictures/<br />
&nbsp;&nbsp;ErrorLog     logs/gallery-error_log<br />
&nbsp;&nbsp;TransferLog  logs/gallery-access_log<br />
&nbsp;&nbsp;PerlSetVar   GalleryTemplateDir '/usr/local/apache/gallery/templates'<br />
&nbsp;&nbsp;PerlSetVar   GalleryInfo 'Picture Taken => DateTimeOriginal, Flash => Flash'<br />
&nbsp;&nbsp;PerlSetVar   GallerySizes '640 1024 1600 2272'<br />
&nbsp;&nbsp;PerlSetVar   GalleryThumbnailSize '100x75'<br />
&nbsp;&nbsp;PerlSetVar   GalleryCopyrightImage 'htdocs/c.png'<br />
&nbsp;&nbsp;PerlOptions +GlobalRequest<br />
&nbsp;&nbsp;&lt;Location /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;SetHandler        modperl<br />
&nbsp;&nbsp;&nbsp;&nbsp;PerlResponseHandler       Apache::Gallery<br />
&nbsp;&nbsp;&lt;/Location&gt;<br />
&lt;/VirtualHost&gt;<br />
</blockquote><br />
<br />
2. 切換到 ~/.cpan/build/Apache-Gallery-0.8<br />
把 templates/default 下的東西複製到 /usr/local/apache/gallery/templates<br />
把 templates/default/gallery.css 複製到 /data/pictures/<br />
把 htdoc 複製到 /var/www/icons 下,並更名為 gallery<br />
<br />
3.更新 /etc/httpd/conf/httpd.conf, 把有關 autoindex 模組的部分都註解掉<br />
LoadModule autoindex_module /usr/lib/apache/1.3/mod_autoindex.so<br />
....這裡蠻多的....慢慢試~~<br />
<br />
4.把你的照片複製到 /data/pictures/<br />
<br />
5.重新啟動 httpd, 然後在你的瀏覽器上輸入 http://gallery.yourdomain.org, 應該就可以看到相簿了~~<br />
<br />
不過很可惜....我沒有成功....我一直遇到<br />
<blockquote>Image::Imlib2 load error: No loader for file format<br />
</blockquote><br />
這個錯誤~~<br />
<br />
~_~, 可能是 imlib2 有問題吧~~<br />
決定還是另覓相簿軟體~~
		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/554095.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/554095.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Wed, 25 Aug 2004 21:30:34 +0800</pubDate>
</item>
<item>
	<title>監看網路封包程式設計概說</title>
	<description><![CDATA[
			以前同事寫的文章.

作者: 邵文琳

前一個禮拜花了不少時間在看網路封包方面的程式設計 ..覺得十分有興趣.
感謝charles 和 ellery 的幫助 . 讓我觀念比較清楚 ...
在這裡我把我這一個星期的學習心得寫下來.
讓大家以後若有機會寫到類似程式時, 可是事半功倍 ..
網路程式設計方面相關資料很多 . 但是都是對比較上層的tcp,或udp的應用在做介紹.
對於網路層和datalink層面則著墨較少 .
所以"對我而言" 學習起來比較困難. 希望寫下這個對大家會有幫助.

一個網路封包監看程式 . 說穿了 只有四個重點:

第一 . 開啟一個可接收raw packet 的socket .
一般我們開始socket接收tcp或udp的packet 時, 我們收到的內容就直接是資料內容 .
kernel 己經幫我們把ethernet header 和 ip 或 arp header 都拿掉了.
但是在寫網路封包程式時, 我們需要header . 因此我們在開啟socket 的時候,就可以針對我們要收集的封包總類做過濾. 要求接收到的資料裡要包涵完整的封包標頭檔...

第二 . 有條件的接收封包和無條件的接收封包.
網路卡只會接收到ethernet header 的target mac 是自己的mac 時, 或接收到TARGET MAC 為 ff:ff:ff:ff:ff 的封包, 或是multicasting 的封包(也就是target ip是224開頭的封包 . 這種情況叫做 nonPromiscuous . 當我們要監看網路封包時,希望收到的不只是broadcast 或是 multicasting 或是自己的封包時, 我就要把網路卡設定成 Promiscuous . 如此一來我們就可以接到實體網路上的所有封包了...

第三 . filter 的設定.
當我們把網路卡設成 Promiscuous , 而且看到了所有封包header 時, 我們就可以依照我們自己的意思去過濾出我們想要的封包 . 可是一個問題來了 .. 網路上的封包那麼多.我們全都要一個個的去把它的標頭打開, 看看是不是自己要看的封包. 這樣做花的時間太長.以致於後面進來的封包都塞在buffer 裡, 等你一個個的檢查..我們需要一個filter 建立在硬體層和聯結層中建立一個filter , 先過濾出我們要的封包,再交由程式處理 . 這就是filter的功用．這種filter 是由bpf code 寫出來的! 不會寫bpf code ? 沒關係. 我們還是有別的方法把它變出來 ,,,,,

第四 .  multiplexing I/O   (blocking VS noblocking)
就如我們所知道的當我們在receving packet 時. 如果沒有資料進來, 程式就會等在那裡 ,這種情況叫做blocking , 但是有時候我們不想要無止限的等在那裡時, 郤又沒法把break 出來時,怎麼辦呢?使用signal 嗎? 另一種解決方式就是把資料流做unblocking.但unblocking 郤不能完成解決我的需求, 於是我利用到了 multiplexing I/O.接下來我在對以上四項做詳細解釋和範例:

第一 socket .
要如何開一個可以接收raw_data 的socket呢 ?

         int sock;

         // 開一個接收所有走ip protocol 封包的完整封包
         sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP));

         // 開一個接收所有走arp protocol 封包的完整封包
         sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ARP));

         // 開一個接收所有 protocol 封包的完整封包
         sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_All));

        // 在linux 下接收datalink 層的網路封包
         sock = socket(PF_INET, SOCK_PACKET, htons(ETH+P_ALL));


PF_PACKET 支援兩個socket type:SOCK_RAW 和 SOCK_DGRAM, SOCK_RAW 會留下完整的 ethernet 標頭.SOCK_DGRAM 會去掉ETHERNET 標頭.但在linux 下使用PF_SOCK , SOCK_RAW 會有問題.最好是使用 PF_INET, SOCKET_PACKET 也可以留下完整的實體層的標頭.

第二 Promiscuous.
網路卡預設當然都是nonPromiscuous , 要變成 Promiscuous 必須對網卡做設定.在socket 己經open 下

         #include &lt;linux/in.h&gt;
         #include &lt;linux/if_ether.h&gt;
          struct ifreq ifrq;

         strncpy(ethreq.ifr_name,"eth0",IFNAMSIZ);
         ioctl(sock,SIOCGIFFLAGS,&ifrq);
         ifrq.ifr_flags|=IFF_PROMISC;
         ioctl(sock,SIOCSIFFLAGS,&ifrq);

        若在打開之後,沒有在程式結束前關閉. 它就會一直打開哦 . 所以記得要關閉它.


         strncpy(ethreq.ifr_name,"eth0",IFNAMSIZ);
         ioctl(sock,SIOCGIFFLAGS,&ifrq);
         ifrq.ifr_flags&=~IFF_PROMISC;
         ioctl(sock,SIOCSIFFLAGS,&ifrq);


第三. 設filter
filter 的設定主要是使用在實體層和連接層中間 . 用一種近似組語的bpf code 組成.寫起來挺麻煩的 . 所以我們直接使用tcpdump -dd 來產生的binary code 來用 .

        for example:
         tcpdump -dd ip dst 172.16.0.3
         { 0x28, 0, 0, 0x0000000c },
         { 0x15, 0, 3, 0x00000800 },
         { 0x20, 0, 0, 0x0000001e },
         { 0x15, 0, 1, 0xac100003 },
         { 0x6, 0, 0, 0x00000044 },
         { 0x6, 0, 0, 0x00000000 },
         tcpdump -dd ip src 172.16.0.3
         { 0x28, 0, 0, 0x0000000c },
         { 0x15, 0, 3, 0x00000800 },
         { 0x20, 0, 0, 0x0000001a },
         { 0x15, 0, 1, 0xac100003 },
         { 0x6, 0, 0, 0x00000044 },
         { 0x6, 0, 0, 0x00000000 },
         tcpdump -dd arp dst 172.16.0.3
         { 0x28, 0, 0, 0x0000000c },
         { 0x15, 0, 3, 0x00000806 },
         { 0x2    0, 0, 0, 0x00000026 },
         { 0x15, 0, 1, 0xac100003 },
         { 0x6, 0, 0, 0x00000044 },
         { 0x6, 0, 0, 0x00000000 },

其實這些code 的產生是有跡可找的..我就把下面程式碼的binary code 原始bpf pesude code 列出來,可以相對應比較看看

          /*
            udp and host 192.168.9.10 and src port 5000
            (000) ldh      [12]
            (001) jeq      #0x800           jt 2        jf 14
            (002) ldb      [23]
            (003) jeq      #0x11            jt 4        jf 14
            (004) ld       [26]
            (005) jeq      #0xc0a8090a      jt 8        jf 6
            (006) ld       [30]
            (007) jeq      #0xc0a8090a      jt 8        jf 14
            (008) ldh      [20]
            (009) jset     #0x1fff          jt 14       jf 10
            (010) ldxb     4*([14]&0xf)
            (011) ldh      [x + 14]
            (012) jeq      #0x1388          jt 13       jf 14
            (013) ret      #68
            (014) ret      #0
          */


我們可以依我們的需要去下command 給tcpdump -dd 幫我們產生binary code. tcpdump, 不但區分不同的protocol. 來源,目的地, even 標頭的第幾個byte,和要接收封包的大小, 都可以變化. 實在是太神奇了.

接下來我們要把code 整合到程式裡去 ...

第四 . blocking VS noblocking multiplexing I/O
unblocking 最重要的意思是當有資料流進來時立刻就傳回. 當沒有資料流進來時, 也傳回0.於是我們就可以利用unblocking 和loop 來控制我們要的時間.
以下是程式的寫法:

          (fcntl(fd ,F_GETFL) & O_NONBLOCKING) // 1 成功 0 失敗


但是把資料一點一滴的傳進來也並不是我們要的 . 我們還是希望傳進來的資料是一個個block 過的資料,只是當沒有資料進來時, 能夠不要永遠的等在那而己.這就是multiplexing I/O 的概念.當我們read 和recvfrom 一個 file handle 時, 我們可以設定如何沒有資料進來時我要等多久,就能回到程式繼續執行我們要做的動作.
以下是程式的寫法:

          #include "sys/time.h"
          #include "sys/select.h"

          int sock;
          struct timeval tv;
          fd_set readfds;

          sock = socket(...);
          tv.tv_sec=1;
          tv.tv_usec=0;
          FD_ZERO(&readfds);    //  清空file handle set.
          FD_SET(sock,&readfds);  // 加入一個file handle 到file handle set
          FD_SET(xxx,&readfds);    // 如果還有別的file handle 也要加入同一個
set做控制的話 ..
          select(sock+1,&readfds,NULL,NULL,&tv);  //  對 file handle set 設
定時間控制
          if(FD_ISSET(sock,&readfds)){        // 依readfds的設定來看是否為
true , 依我們的
               例出來說,程式會在這裡等上一秒鐘. 如果在這一秒裡有data流進來,
               傳回true, 再交給recvfrom把data 接下來, 否則一秒鐘後傳回false
!
              // recvfrom(....)
          }


基本上把握這幾個主要的重點, 要變化出自己的sniffer 不是問題..剩下來比較討厭的就是把ip 轉成network address to host address..大小印地安,和 inetaddr, inet_addr, inet_aton, inet_ntoa ...這些變來變去的死東西了.
		]]>
	</description>
	<content:encoded><![CDATA[
			以前同事寫的文章.<br />
<br />
作者: 邵文琳<br />
<br />
前一個禮拜花了不少時間在看網路封包方面的程式設計 ..覺得十分有興趣.<br />
感謝charles 和 ellery 的幫助 . 讓我觀念比較清楚 ...<br />
在這裡我把我這一個星期的學習心得寫下來.<br />
讓大家以後若有機會寫到類似程式時, 可是事半功倍 ..<br />
網路程式設計方面相關資料很多 . 但是都是對比較上層的tcp,或udp的應用在做介紹.<br />
對於網路層和datalink層面則著墨較少 .<br />
所以"對我而言" 學習起來比較困難. 希望寫下這個對大家會有幫助.<br />
<br />
一個網路封包監看程式 . 說穿了 只有四個重點:<br />
<br />
第一 . 開啟一個可接收raw packet 的socket .<br />
一般我們開始socket接收tcp或udp的packet 時, 我們收到的內容就直接是資料內容 .<br />
kernel 己經幫我們把ethernet header 和 ip 或 arp header 都拿掉了.<br />
但是在寫網路封包程式時, 我們需要header . 因此我們在開啟socket 的時候,就可以針對我們要收集的封包總類做過濾. 要求接收到的資料裡要包涵完整的封包標頭檔...<br />
<br />
第二 . 有條件的接收封包和無條件的接收封包.<br />
網路卡只會接收到ethernet header 的target mac 是自己的mac 時, 或接收到TARGET MAC 為 ff:ff:ff:ff:ff 的封包, 或是multicasting 的封包(也就是target ip是224開頭的封包 . 這種情況叫做 nonPromiscuous . 當我們要監看網路封包時,希望收到的不只是broadcast 或是 multicasting 或是自己的封包時, 我就要把網路卡設定成 Promiscuous . 如此一來我們就可以接到實體網路上的所有封包了...<br />
<br />
第三 . filter 的設定.<br />
當我們把網路卡設成 Promiscuous , 而且看到了所有封包header 時, 我們就可以依照我們自己的意思去過濾出我們想要的封包 . 可是一個問題來了 .. 網路上的封包那麼多.我們全都要一個個的去把它的標頭打開, 看看是不是自己要看的封包. 這樣做花的時間太長.以致於後面進來的封包都塞在buffer 裡, 等你一個個的檢查..我們需要一個filter 建立在硬體層和聯結層中建立一個filter , 先過濾出我們要的封包,再交由程式處理 . 這就是filter的功用．這種filter 是由bpf code 寫出來的! 不會寫bpf code ? 沒關係. 我們還是有別的方法把它變出來 ,,,,,<br />
<br />
第四 .  multiplexing I/O   (blocking VS noblocking)<br />
就如我們所知道的當我們在receving packet 時. 如果沒有資料進來, 程式就會等在那裡 ,這種情況叫做blocking , 但是有時候我們不想要無止限的等在那裡時, 郤又沒法把break 出來時,怎麼辦呢?使用signal 嗎? 另一種解決方式就是把資料流做unblocking.但unblocking 郤不能完成解決我的需求, 於是我利用到了 multiplexing I/O.接下來我在對以上四項做詳細解釋和範例:<br />
<br />
第一 socket .<br />
要如何開一個可以接收raw_data 的socket呢 ?<br />
<blockquote><br />
         int sock;<br />
<br />
         // 開一個接收所有走ip protocol 封包的完整封包<br />
         sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP));<br />
<br />
         // 開一個接收所有走arp protocol 封包的完整封包<br />
         sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ARP));<br />
<br />
         // 開一個接收所有 protocol 封包的完整封包<br />
         sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_All));<br />
<br />
        // 在linux 下接收datalink 層的網路封包<br />
         sock = socket(PF_INET, SOCK_PACKET, htons(ETH+P_ALL));<br />
</blockquote><br />
<br />
PF_PACKET 支援兩個socket type:SOCK_RAW 和 SOCK_DGRAM, SOCK_RAW 會留下完整的 ethernet 標頭.SOCK_DGRAM 會去掉ETHERNET 標頭.但在linux 下使用PF_SOCK , SOCK_RAW 會有問題.最好是使用 PF_INET, SOCKET_PACKET 也可以留下完整的實體層的標頭.<br />
<br />
第二 Promiscuous.<br />
網路卡預設當然都是nonPromiscuous , 要變成 Promiscuous 必須對網卡做設定.在socket 己經open 下<br />
<blockquote><br />
         #include &lt;linux/in.h&gt;<br />
         #include &lt;linux/if_ether.h&gt;<br />
          struct ifreq ifrq;<br />
<br />
         strncpy(ethreq.ifr_name,"eth0",IFNAMSIZ);<br />
         ioctl(sock,SIOCGIFFLAGS,&ifrq);<br />
         ifrq.ifr_flags|=IFF_PROMISC;<br />
         ioctl(sock,SIOCSIFFLAGS,&ifrq);<br />
</blockquote><br />
        若在打開之後,沒有在程式結束前關閉. 它就會一直打開哦 . 所以記得要關閉它.<br />
<br />
<blockquote><br />
         strncpy(ethreq.ifr_name,"eth0",IFNAMSIZ);<br />
         ioctl(sock,SIOCGIFFLAGS,&ifrq);<br />
         ifrq.ifr_flags&=~IFF_PROMISC;<br />
         ioctl(sock,SIOCSIFFLAGS,&ifrq);<br />
</blockquote><br />
<br />
第三. 設filter<br />
filter 的設定主要是使用在實體層和連接層中間 . 用一種近似組語的bpf code 組成.寫起來挺麻煩的 . 所以我們直接使用tcpdump -dd 來產生的binary code 來用 .<br />
<blockquote><br />
        for example:<br />
         tcpdump -dd ip dst 172.16.0.3<br />
         { 0x28, 0, 0, 0x0000000c },<br />
         { 0x15, 0, 3, 0x00000800 },<br />
         { 0x20, 0, 0, 0x0000001e },<br />
         { 0x15, 0, 1, 0xac100003 },<br />
         { 0x6, 0, 0, 0x00000044 },<br />
         { 0x6, 0, 0, 0x00000000 },<br />
         tcpdump -dd ip src 172.16.0.3<br />
         { 0x28, 0, 0, 0x0000000c },<br />
         { 0x15, 0, 3, 0x00000800 },<br />
         { 0x20, 0, 0, 0x0000001a },<br />
         { 0x15, 0, 1, 0xac100003 },<br />
         { 0x6, 0, 0, 0x00000044 },<br />
         { 0x6, 0, 0, 0x00000000 },<br />
         tcpdump -dd arp dst 172.16.0.3<br />
         { 0x28, 0, 0, 0x0000000c },<br />
         { 0x15, 0, 3, 0x00000806 },<br />
         { 0x2    0, 0, 0, 0x00000026 },<br />
         { 0x15, 0, 1, 0xac100003 },<br />
         { 0x6, 0, 0, 0x00000044 },<br />
         { 0x6, 0, 0, 0x00000000 },<br />
</blockquote><br />
其實這些code 的產生是有跡可找的..我就把下面程式碼的binary code 原始bpf pesude code 列出來,可以相對應比較看看<br />
<blockquote><br />
          /*<br />
            udp and host 192.168.9.10 and src port 5000<br />
            (000) ldh      [12]<br />
            (001) jeq      #0x800           jt 2        jf 14<br />
            (002) ldb      [23]<br />
            (003) jeq      #0x11            jt 4        jf 14<br />
            (004) ld       [26]<br />
            (005) jeq      #0xc0a8090a      jt 8        jf 6<br />
            (006) ld       [30]<br />
            (007) jeq      #0xc0a8090a      jt 8        jf 14<br />
            (008) ldh      [20]<br />
            (009) jset     #0x1fff          jt 14       jf 10<br />
            (010) ldxb     4*([14]&0xf)<br />
            (011) ldh      [x + 14]<br />
            (012) jeq      #0x1388          jt 13       jf 14<br />
            (013) ret      #68<br />
            (014) ret      #0<br />
          */<br />
</blockquote><br />
<br />
我們可以依我們的需要去下command 給tcpdump -dd 幫我們產生binary code. tcpdump, 不但區分不同的protocol. 來源,目的地, even 標頭的第幾個byte,和要接收封包的大小, 都可以變化. 實在是太神奇了.<br />
<br />
接下來我們要把code 整合到程式裡去 ...<br />
<br />
第四 . blocking VS noblocking multiplexing I/O<br />
unblocking 最重要的意思是當有資料流進來時立刻就傳回. 當沒有資料流進來時, 也傳回0.於是我們就可以利用unblocking 和loop 來控制我們要的時間.<br />
以下是程式的寫法:<br />
<blockquote><br />
          (fcntl(fd ,F_GETFL) & O_NONBLOCKING) // 1 成功 0 失敗<br />
</blockquote><br />
<br />
但是把資料一點一滴的傳進來也並不是我們要的 . 我們還是希望傳進來的資料是一個個block 過的資料,只是當沒有資料進來時, 能夠不要永遠的等在那而己.這就是multiplexing I/O 的概念.當我們read 和recvfrom 一個 file handle 時, 我們可以設定如何沒有資料進來時我要等多久,就能回到程式繼續執行我們要做的動作.<br />
以下是程式的寫法:<br />
<blockquote><br />
          #include "sys/time.h"<br />
          #include "sys/select.h"<br />
<br />
          int sock;<br />
          struct timeval tv;<br />
          fd_set readfds;<br />
<br />
          sock = socket(...);<br />
          tv.tv_sec=1;<br />
          tv.tv_usec=0;<br />
          FD_ZERO(&readfds);    //  清空file handle set.<br />
          FD_SET(sock,&readfds);  // 加入一個file handle 到file handle set<br />
          FD_SET(xxx,&readfds);    // 如果還有別的file handle 也要加入同一個<br />
set做控制的話 ..<br />
          select(sock+1,&readfds,NULL,NULL,&tv);  //  對 file handle set 設<br />
定時間控制<br />
          if(FD_ISSET(sock,&readfds)){        // 依readfds的設定來看是否為<br />
true , 依我們的<br />
               例出來說,程式會在這裡等上一秒鐘. 如果在這一秒裡有data流進來,<br />
               傳回true, 再交給recvfrom把data 接下來, 否則一秒鐘後傳回false<br />
!<br />
              // recvfrom(....)<br />
          }<br />
</blockquote><br />
<br />
基本上把握這幾個主要的重點, 要變化出自己的sniffer 不是問題..剩下來比較討厭的就是把ip 轉成network address to host address..大小印地安,和 inetaddr, inet_addr, inet_aton, inet_ntoa ...這些變來變去的死東西了.
		
		]]>
	</content:encoded>
	<link>http://blog.roodo.com/thinkingmore/archives/554037.html</link>
	<guid>http://blog.roodo.com/thinkingmore/archives/554037.html</guid>
	<category>Linux 及其相關</category>
	<pubDate>Fri, 21 May 2004 11:38:04 +0800</pubDate>
</item>
</channel>
</rss>