2008年8月31日

NX Server 3.x 的新功能 (Linux上的遠端桌面)

這篇算是繼NX使用心得新NX使用心得後,的小小新介紹。

NX細節就不說了,在目前 Linux 環境中,它算是相當優異的 遠端控制 軟體。

NX Server 2.x 甚至 1.x 有個功能,我們一直希望能提供,那就是類似 XP遠端桌面,或者 VNC 那樣(像 x11vnc那樣),可以直接操作目前 Linux 本機的畫面(在GNOME環境下,就是vino這套VNC Server提供的能力)。
這樣的功能其實在 NX Server 3.x 就已經支援了,算起來也提供了有半年以上了,不過本來一直沒注意,最近心血來潮才發現(這裡要抱怨一下,NX 的說明文件寫的真的是...,設定的部份帶個圖片就很清楚了,硬是讓我看了半天才看懂)。

那就直接進入主題了。

首先我們要先確定 NX Server 是 3.x 版,如下:


接下來我們要確定 NX Client 也是 3.x 版,如下:


NX Server 3.x 預設的設定,就能夠支援遠端桌面這樣的功能了。

接下來很容易,直接在設定部份設定如下:


使用時的連線則會顯示如下:


連線後畫面如下,而本機的螢幕畫面會更著變動:


完成。

相關設定的細節可以參考:
NX Server Administrator's Guide

2008年8月27日

EeePC 901在Ubuntu上得wireless、wired支援

正如前兩篇寫的,ITE後來送了我一台EeePC,意外的是,ITE是直接在PCHOME訂購的,所以直接就是PCHOME送來,當時送來的是EeePC 701(含webcam、白色)版本,後來經過了一番努力之後,它終於找到新主人,本來還擔心它新主人知不知道它的習性,後來面交時有詢問過,我也因此放心了,不然還擔心它會不會被遺棄或再換主人。

後來經過一番考慮後,我決定購買EeePC 901,考量因素有幾個:
1. Aspire One的SSD只有8G,而且是MLC,買SD是必要的,可是SD一張差不多就要1000,2000元
2. 除了SSD外,Aspire One的wireless只有802.11 b/g,沒有藍牙、802.11 n的支援
3. Aspire One的webcam是30萬像素,901是130萬像素
4. Aspire One的電池容量和901容量差很多

這些差異,價格差距卻在3000元,因此就決定買901了。

以上介紹完畢,正式進入這次的主題。
本篇文章同步po在mobile01的回覆中。
=================================
EeePC 在安裝 Ubuntu 時常見的問題主要是目前 Ubuntu 8.04 中的 Kernel 還不支援 EeePC 上有線、無線的網路卡,需要另外編譯 Kernel,不過.....

針對 Eee PC 的 Ubuntu Linux Kernel 已經有了,現在已經不需要辛苦的自己編譯 ralink module。

Kernel 的下載網址在Array.org EeePC Ubuntu Repository - Custom Linux Kernel,作者針對 Eee PC(包括901/1000/1000H) 製作了 Ubuntu 客制化的 Kernel Image 和 Module,並且持續提供更新。

目前它提供的 Kernel 包括下列部份:
1. Wired ethernet support (via atl1e module from Asus) (提供 EeePC 有線網路卡的 module 支援)
2. Wireless ethernet support (via rt2860sta module from Ralink) (提供 EeePC 無線網路卡的 module 支援)
3. Complete WEP and WPA wireless encryption support (via unreleased Ralink patch) (無線網路卡的 module 已經 patch 過,可以直接支援 WEP 和 WPA 無線網路模式)
4. Complete sound card support (via unreleased AlsaProject code) (完整音效卡支援)
5. ACPI with Bluetooth support (via patched eeepc-acpi module) (EeePC 內的 ACPI 能夠支援藍牙)
6. SMP enabled (for hyperthreading your Intel Atom CPU) (能支援 EeePC 中 ATOM CPU 的 HT 功能)
7. Simplified Persistent USB support (via an "always-on" patch) (USB 不知道什麼碗糕的 patch )

此外,根據網頁介紹,這個針對 EeePC 客制化的 Kernel,能讓開機時間快上 20~30 秒。
原文:Along with routine upstream updates, additional benefits include faster boot times (20-23 seconds), and pre-compiled eeepc & madwifi modules.

我的經驗是,使用它的 kernel 之後,有線網路直接就能看到,wireless 的部份還不太會開,需要 patch 讓 wireless 的功能鍵能夠動作。

設定 wireless 功能鍵,我是參考EeeUser ASUS Eee PC Forum / [HELP NEEDED] Ubuntu-Support-Script for EeePC 901/1000/1000H這個設定

設定方法就按照它作法即可。

這時候也許會問,我 EeePC 現在裝好 Ubuntu 8.04 就是沒網路,那這些要怎麼搞?

可以準備一個 SD,容量不拘,大概只需要 128MB 就夠了。

把前面提到的 Kernel、Module 和 wireless 功能鍵 的 patch 檔案放進 SD,連結分別是:
ACPI_scripts-EeePC_901_1000.tar.gz
Linux Kernel(linux-image-2.6.24-21-eeepc_2.6.24-21.39eeepc1_i386.deb)
Linux Module(linux-ubuntu-modules-2.6.24-21-eeepc_2.6.24-21.30eeepc3_i386.deb)

把 SD 插入 EeePC 當中,Ubuntu 就能自動找到並掛載了。

接著打開終端機,並按照下列動作操作:
1. 切換到 SD 的路徑
cd /media/disk

2. 安裝 Linux Kernel 和 Module
sudo dpkg -i linux-image*.deb linux-ubuntu-modules*.deb

3. 切換到 暫存區 路徑
cd /tmp

4. 將 wireless 功能鍵 patch 壓縮檔解開
tar zxvf /media/disk/Ubuntu_ACPI_scripts-EeePC_901_1000.tar.gz

5. 安裝 wireless 功能鍵 patch
cd Ubuntu_ACPI_scripts-EeePC_901_1000/
chmod +x install.sh
sudo ./install.sh

6. 重新開機,並享用 EeePC 上的 Ubuntu
reboot


目前我所感覺到還需要 patch 的部份,大概就是 wireless 功能鍵,上述的 patch 似乎只有 wireless 的開關,沒有 wireless開 / 藍牙開 / wireless+藍牙 開 / 全關 這樣的切換,看起來需要在翻些資料來修改它的內容,不過目前我都還沒用到 藍牙,因此這對我還不是個問題。

最後一點,以上動作我都操作過沒問題,我的環境是 EeePC 901。

2008年8月26日

Linux的RAM Disk(資料不消失版)

RAM Disk是一個非常方便的東西,尤其現在DDR2的RAM很便宜時,善用RAM Disk可以有很大的效能改善。
雖然RAM Disk已經不是什麼新鮮的東西了,但是這次我針對Linux上的RAM Disk Script加入了開/關機備份/還原的功能,應該就很少見了。

我個人認為Linux上的RAM Disk比Windows和FreeBSD來得方便好用,Linux的shm(Share Memory)實在太強大了。
在Windows上,RAM Disk的軟體不少,但多半都是切割一塊RAM當磁碟,舊版的FreeBSD上也是(FreeBSD的tmpfs實做在FreeBSD 7.0開始提供~),在Linux上,因為tmpfs技術的關係,能夠直接使用Share Memory當成檔案系統來使用,因此能讓檔案系統上的資料能複製到Share Memory當中,和其他process共用Memory。這樣的優點是,系統記憶體和RAM Disk是共用的,RAM Disk不需要額外割一塊出來,舉個例子:
假設RAM有1024MB(1G),我要512MB的RAM Disk
在Windows、FreeBSD上,系統記憶體就只剩下512MB,另外512MB變成一個RAM Disk。
而在Linux上,系統記憶體還是1024MB(1G),假如我在RAM Disk上吃掉了100MB的空間,則系統記憶體會變成924MB,而RAM Disk(Share Memory)的上限是多少?1024MB嗎?
這可以自己設定,系統預設是RAM的一半,以這例子來說,Linux預設的RAM Disk(Share Memory)就是512MB。

RAM Disk速度很快,尤其是拿來compile kernel時特別明顯,可以明顯感受到,花費的時間比較短,這要歸功於Linux Kernel Source Code很大,所以感受得出來。

另一個重要的場合大概就是Eee PC這類輕巧筆電了,輕巧筆電因為「輕巧」、「價格」...等因素,往往硬碟很小,而且硬碟經常速度很慢(EeePC 900、901的第二顆Flash,Aspire one 110的8G Flash),在無法擴充或是擴充價格很誇張時,加大RAM並善用它變得很重要,因此在輕巧筆電上設定RAM Disk,幾乎是「必要的設定」(不論是XP或Linux)。

RAM Disk的致命傷就是重開機資料就消失,稍微搜尋後可以發現,Windows上已經有不少人提供備份、還原的script,搭配XP Pro的系統原則就可以在關機時備份RAM Disk的資料,那Linux呢?就在這裡啦~~

首先,我RAM Disk的建立,是使用[閒聊]有趣的 tmpfs最後的script版本,並不是寫在/etc/fstab當中。
RAM Disk(tmpfs)的詳細介紹可以參考Tsung's Blog的拿 RAM 當硬碟來用(RAM Disk),作者把所有的tmpfs建立方法全部敘述了,內容清楚明確,非常值得參考,我使用的屬於方法一。

簡單敘述建立RAM Disk的方法:

1. 把下列script內容編輯,並存檔為/etc/init.d/mounttmpfs.sh
#!/bin/sh
#
# mounttmpdir Mount /tmp after mounvirtfs exec-ed
#
# Version: @(#)mounttmpdir 0.01 24-Dec-2004 antony shen
# 參考網址:http://moto.debian.org.tw/viewtopic.php?t=4100&highlight=shm
# 執行指令:update-rc.d mounttmpfs.sh start 37 S .
#

# Script needs to be robust and continue when parts fail,
# so we're not setting the "-e" flag.
#set -e

PATH=/lib/init:/bin:/sbin

if [ -d /dev/shm ]
then
if [ ! -d /dev/shm/tmp ]
then
echo -n "Mounting tmpfs(/tmp,/var/tmp) under /dev/shm..."

mkdir /dev/shm/tmp
mkdir /dev/shm/vtmp
chmod 1777 /dev/shm/tmp
chmod 1777 /dev/shm/vtmp
mount --bind /dev/shm/tmp /tmp
mount --bind /dev/shm/vtmp /var/tmp

echo "OK."
fi
else
echo "Failed to find /dev/shm, unable to link /tmp under it!"
fi


2. 執行
update-rc.d mounttmpfs.sh start 37 S .

3. 重新開機

4. 複製個檔案 (cp /boot/* /tmp/) 到 /tmp 執行 df,查看 /dev/shm 的使用空間有沒有變化,有變化就是成功了。

接下來,我們進一步來玩Backup/Restore的部份,如下:

1. 把下列script存檔為/etc/init.d/backuptmpfs.sh
#!/bin/sh
#
# 參考 mounttmpfs.sh 修改而成
#
# Version: @(#)backuptmpfs.sh 0.01 2008-08-26 YCFu
# 執行指令:update-rc.d backuptmpfs.sh stop 1 0 6 .
#

# Script needs to be robust and continue when parts fail,
# so we're not setting the "-e" flag.
#set -e

PATH=/lib/init:/bin:/sbin

if [ -d /dev/shm ]
then
if [ -d /dev/shm/tmp ]
then
echo -n "Backup tmpfs(/tmp) to /RAMDISK_bak.tar..."

tar -X /etc/non-list -C /tmp -cf /RAMDISK_bak.tar .
chmod 600 /RAMDISK_bak.tar

echo "OK."
fi
else
echo "Backup Fail!"
fi


2. 把下列script存檔為/etc/init.d/restoretmpfs.sh
#!/bin/sh
#
# 參考 backuptmpfs.sh 修改而成
#
# Version: @(#)backuptmpfs.sh 0.01 2008-08-26 YCFu
# 執行指令:update-rc.d restoretmpfs.sh start 38 S .
#

# Script needs to be robust and continue when parts fail,
# so we're not setting the "-e" flag.
#set -e

PATH=/lib/init:/bin:/sbin

if [ -f /RAMDISK_bak.tar ]
then
echo -n "Restore tmpfs(/tmp) from /RAMDISK_bak.tar..."

tar -C /tmp -xf /RAMDISK_bak.tar
rm /RAMDISK_bak.tar

echo "OK."
fi

3. 執行下列指令:
update-rc.d restoretmpfs.sh start 38 S .
update-rc.d backuptmpfs.sh stop 1 0 6 .


4. 執行下列指令建立排除檔案列表
touch /etc/non-list

5.完成

上述程式說明:
簡單的說,我改了2個script,一個用在關機時備份RAM Disk,一個用在開機時還原RAM Disk。

關機時備份RAM Disk的叫做backuptmpfs.sh,它會在inittab狀態為0和6時執行(放到rc0.d和rc6.d),0和6分別是關機狀態和重新開機狀態。

開機時還原RAM Disk的叫做restoretmpfs.sh,「它必須在 mounttmpfs.sh 之後執行」,它會在開機時,建立RAM Disk之後,將RAM Disk資料還原回去。
為什麼不整合到mounttmpfs.sh之中呢?
我試過了,它似乎會和mount --bind衝突,可能需要delay一點時間吧。

由於RAM Disk中,通常會放置Firefox的暫存目錄,我們不希望所有東西都備份,因此我們要設定個排除檔案名單,將特定的目錄或檔案排除。
排除名單放在/etc/non-list,只需要把不要備份的名稱加入即可
以Firefox的暫存目錄來說,Firefox會自動建立暫存目錄/tmp/Cache,我們只需要在/etc/non-list中寫上:
Cache

如果我們希望排除多個檔案或目錄,例如檔案「EEE」和目錄「Cache」,則在/etc/non-list中寫上:
Cache
EEE


備份的檔案會存在哪裡?檔名是什麼呢?
備份的檔案會存為/RAMDISK_bak.tar會在還原後自動刪除
此外,為了安全性的考量,/RAMDISK_bak.tar的權限會設為600

最後,因為這是第一版,所以我並沒有將上面提到的參數設為變數,不過這幾個script並不複雜,相信稍微看一下,就能夠看懂並修改,歡迎大家修改使用,改過後記得再貼出來造福更多人。