2008年9月30日 星期二

Tips mount utf8 vfat

最近把blogger左邊文章列表改為每週列表,激勵自己灌水的天性。同時順便把之前小小linux box的故事重新從blacktea用windows live writer重新上載一次。
今天沒有太多新奇的好料,所以就勉強寫個湊數。
如果你用mount的指令在文字模式下掛載隨身碟的vfat來跟windows交流檔案,有時候遇到檔名亂掉的時候,亂碼最是討厭了。試著加入 -o utf8 來看看。

2008年9月29日 星期一

lzma壓縮也滿暴力的

沒看錯,本來快5G的資料夾壓縮起來備份,變成2G。
更扯的,已經用GHOST 8高度壓縮的8GGHO檔,再壓居然還跑出8%...
lzma,你好樣的

2008年9月28日 星期日

Photoshop-ish Keyboard Shortcuts for The Gimp 2.2

Photoshop-ish Keyboard Shortcuts for The Gimp 2.2

wget http://epierce.freeshell.org/gimp/ps-menurc > $HOME/.gimp-2.?/menurc

功能有限,不如試試GIMP

0929:不好!CMYK勒?~啥,那是外掛?!

2008年9月27日 星期六

2008年9月26日 星期五

PenmountLPC + udev + Xorg.conf

FlyBook惡搞日誌 009

PenmountLPC是德國工程師用反向工程寫出驅動程式的。現在還提供deb安裝套件包喔~

問題是,隨著你開機的配備不同,比如說多隻滑鼠之類,它的設備檔就會跑掉,這樣X啟動時就不會對應到正確的dev。因此就需要udev

遙想起咖啡店還在4GB硬碟快爆炸的年代,站長們對於安裝新硬碟要MAKEDEV都心存忌憚,深怕一個不小心就會因為弄丟資料而遭到眾人唾棄,這樣大學剩下的三年會很難過。

udev系統的誕生除了有裝置配合自動產生,其中一個功能就是可以依據關鍵字來自動為設備檔產生連結。

這個penmountlpc.ko可以放進/etc/modules下來自行載入

[   35.212000] input: PenmountLPC TouchScreen as /class/input/input4
[   35.212000] penmountlpc.c: init finished

但是每次產生的可能是input3,有外接滑鼠可能是input4,非開機載入還有可能是78,偏偏xorg.conf裡面一定要描寫到這段,不然就會沒作用。還好ubuntu用udev有個功能可以用hotplug製造symlink。

原理很複雜,方法卻很簡單,首先確認

udevinfo -a -p /sys/class/input/event4

Udevinfo starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/class/input/input4/event4':
    KERNEL=="event4"
    SUBSYSTEM=="input"
    DRIVER==""
    ATTR{dev}=="13:68"

  looking at parent device '/class/input/input4':
    KERNELS=="input4"
    SUBSYSTEMS=="input"
    DRIVERS==""
    ATTRS{modalias}=="input:b0010v0000p0000e0000-e0,1,3,k110,ra0,1,mlsfw"
    ATTRS{uniq}==""
    ATTRS{phys}==""
   ATTRS{name}=="PenmountLPC TouchScreen"

選定關鍵字後,我是直接修改/etc/udev/rules.d/65-persistent-input.rules

因為這檔裡面開頭說input?都要跳到最後一行,所以我直接多加一行

KERNEL=="event?", SUBSYSTEMS=="input", ATTR{dev}=="13:6?", ATTRS{name}=="PenmountLPC TouchScreen", SYMLINK+="input/penmountlpc"

然後對應的xorg.conf改為

Section "InputDevice"
    Identifier "touchscreen"
    Driver "evtouch"
    Option "Device" "/dev/input/penmountlpc"
    Option "DeviceName" "touchscreen"
        Option        "MinX"        "42"
        Option        "MinY"        "48"
        Option        "MaxX"        "988"
        Option        "MaxY"        "992"
        Option        "x0"        "-31"
        Option        "y0"        "-1"
        Option        "x1"        "-22"
        Option        "y1"        "-3"
        Option        "x2"        "-1"
        Option        "y2"        "-5"
        Option        "x3"        "-43"
        Option        "y3"        "0"
        Option        "x4"        "-15"
        Option        "y4"        "0"
        Option        "x5"        "1"
        Option        "y5"        "-1"
        Option        "x6"        "-3"
        Option        "y6"        "1"
        Option        "x7"        "-5"
        Option        "y7"        "2"
        Option        "x8"        "2"
        Option        "y8"        "2"
#       Option "Calibrate" "1"
    Option "ReportingMode" "Raw"
    option  "TapTimer" "500"
    option  "LongTouchTimer" "800"
    option  "MoveLimit" "30"
    Option  "maybetapped_action" "click"
    Option  "maybetapped_button" "1"
    option  "longtouch_action" "click"
    option  "longtouch_button" "3"
    option  "oneandhalftap_action" "click"
    option  "oneandhalftap_button" "2" 
       Option "Emulate3Buttons"
        Option "Emulate3Timeout" "50"
        Option "SendCoreEvents" "On"
EndSection

Section "InputDevice"
    Identifier "dummy"
    Driver "void"
    Option "Device" "/dev/input/mice"
EndSection

這樣每次x都會自動抓到正確的裝置,而不需要手動修改xorg.conf。

2008年9月25日 星期四

how into linux serial console

不如題

玩server到一定程度時,就會拔掉PC顯示卡,改用Serial Console做為主控台。再過不久,就會想要連windows 超級終端機也丟掉。

於是經過一番尋找howto 後,找到可以用的工具大概有三種:
screen || minicom || kermit

最後我想用C-kermit

安裝沒問題,不贅述

理論上要寫個rc檔控制資源,不過我是寫它的特殊kerbang執行

#!/usr/bin/kermit +
set modem type none
set line /dev/ttyUSB0
set speed \%1
set serial 8N1
set flow-control none
if fail end 1
set carrier-watch off
if success connect

然後又回到前面做的openbox sshto選單

這次傳入的參數是連線的bps,因為筆電上沒有第二種COM可以讓你胡亂連(雖然我的有內建,但是它是焊死與GSM MODEM一起的)。因此加入 if [ -r /dev/ttyUSB0]就可以在插上這個usb外接com port時出現選單可以開啟連線。讚吧~

只要把它組合成

xterm -e kerbang $speed

這樣當通訊結束,xterm也自動結束,比超級終端機方便。

不過這還不是kermit的僅有,它的kerbang最主要都是做檔案傳輸、同步用的,還可以撥數據機、抓https網頁。裡面還有expect的語法,獎白話一點,可以把帳號密碼也寫死進去,遇到什麼主機提示符號,就送出什麼「通關秘語」。這條線路基本上沒人竊聽,除非你被裝了監視器。

老歸老 換個心會更好

基本上這篇絕對不是討論啥變心的。接續前面wine的嘗試,裝上photoshop 4後,從點下安裝後,半分鐘完成安裝。三秒啟動載入完畢,連我自己都嚇一跳。Photoshop4已經是很老的朋友啦,自從Win2000後註定它的「必」升級路線為photoshop7。不過其實除了介面越吃越重的資源,工具越來越懶之外,核心功能沒有太多改變。因此這次在WINE上復活,跑起來比起CS差很多。

不過Illustrator就沒有這麼簡單了,CS就是沒辦法順利啟動,即使把設定檔從windows移過來,依然失敗。能運作的版本我試的另一版是Illustrator9,功能正常。一樣也變成飛快的出現,嗨!好久不見啊,感謝radio學長的惡魔訓練,把功能快速鍵烙在手指上真的是一門絕世奇學,讓你想到啥的時候手指就在按了。

現在windows系統裡唯一一個令我捨不得離開的原因,是Windows Live Writer。最主要的原因是,在Blogger上面原生的網頁介面如果要寫上幾段程式碼,很多都會被擋掉。但是這些跳脫或轉換的工作給Windows live Writer去做,倒是很順。或許要因此養一個Virtual BOX來使用portable WLW。

2008年9月24日 星期三

再次安裝IEs4Linux 2.99.1

怪哉?前幾天在gusty上面用自編的wine + ie4linux,一點抱怨都沒有就上了,這次hardy卻不行
參考星球論壇作個patch就好了
diff -r -bBiwu ies4linux-2.99.0/lib/functions.sh ies4linux/lib/functions.sh
--- ies4linux-2.99.0/lib/functions.sh 2007-11-26 14:28:16.000000000 +0800
+++ ies4linux/lib/functions.sh 2007-12-17 09:40:30.000000000 +0800
@@ -95,7 +95,7 @@

local useragent="Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
if [ "$HASWGET" = "1" ]; then
- pid=$(wget -q -b -t 1 -T 5 -U "$useragent" -o /dev/null $URL $WGETFLAGS -O "$file" | sed -e 's/[^0-9]//g')
+ pid=$(LANG=C wget -q -b -t 1 -T 5 -U "$useragent" -o /dev/null $URL $WGETFLAGS -O "$file" | sed -e 's/[^0-9]//g')
elif [ "$HASCURL" = "1" ]; then
( curl -s -A "$useragent" "$URL" -o "$file" & )
pid="$(pidof curl)"
diff -r -bBiwu ies4linux-2.99.0/lib/messages.txt ies4linux/lib/messages.txt
--- ies4linux-2.99.0/lib/messages.txt 2007-11-26 14:28:16.000000000 +0800
+++ ies4linux/lib/messages.txt 2007-12-17 09:12:15.000000000 +0800
@@ -16,7 +16,7 @@
de . deDE DE
bg bg bgBG EN-US
nl . nlNL NL
-tw . zhTW TW
+zh tw zhTW TW
tr . trTR TR
ja . jaJP JA
da . daDK DA

不過安裝到最後,桌面圖示也沒幫忙放上來....
只好自己手動加上來作個捷徑,圖片路徑在$HOME/.ie4linux/下面

還可以參考這裡修改讓IE使用微軟正黑體
不過其實將字型ln過去windows/Fonts/就有點效果了
再來記上一點,IE6第一次執行很正常,但我第二次叫他
卻姍姍來遲,害我殺死他好幾次(suspend狀態)
原來他上網去找更新元件....
從網際網路選項關掉自動尋找更新元件後,就又快又順了

2008年9月23日 星期二

Wine 1.0真是個硬漢必備的好物

聽說wine出了第一個stable很久了。這次在ubuntu 7.10上裝到的是wine 0.9.4,好嘔啊~

男子漢大丈夫頂天立地,於是我就手動下載wine來用用(看到這裡,會不會有讀者問說:酒用網路購物不是違法嗎?還可以下載啊?)。

WINE Is Not Emulator, WINE Is a Nice Engineer.

如果你把linux企鵝灌點酒,它就會硬上windows,只是有點微軟。據說有部份重量級程式還跑的不錯。

我選tarball安裝,因為版本比較新。第一次configure失敗了,因為它說「沒有X window」。

我你個ooxx,現在不就正在x嗎?打開文件,發現還有貼心的指令稿可以下載來「自動安裝必須的套件」,金剛溫啊~

果然再跑一次configure就過了,make depend && make && sudo make install後,拜google大神把中文字型先設定好,接下來就神奇了。

我裝了Office 2003。

又裝了Dreamwaever 2004 MX。跑了一下,覺得順便把Fireworks叫進來放炮一下好,這樣一家親比較熱鬧了。

之前裝過Papago 7,這次先不要裝好了,跟她不熟。

這些跑起來,還沒遇到問題。

我還在考慮要不要裝Photoshop 7,還是4最讚最順手?Illustrator 10據AppDB說也沒有問題,不過這台螢幕過小,cpu效能不好,這樣甘好?還是不要好了,這太瘋狂了。不如叫那個雙核心的去跑,反正它三心二意,然後用X forward來個遠端即時操作,豈不是更瘋狂~

接下來還要研究怎樣把這些鳥程式塞進openbox menu,好忙喔~

2008年9月21日 星期日

openbox右鍵選單 ssh to (2)

第二部份就真的很痛苦了,最主要的原因是shell script對於pipe後送進陣列裡的元素有時候不是全有就是全無,如果想要一個元素裡有空白又有斷行,基本上是被允許的,但是卻不一定是你想要的。

#!/bin/sh

gen_menu() {
    echo "<item label=\""$1"\">"
    echo -n '<action name="Execute"><execute>'
    echo -n " xterm -e ssh"
    echo -n    "`echo $2 | tr : " " `"
    echo "</execute></action>"
    echo "</item>"
}

##以上單純只是生出選單的副程式

echo "<openbox_pipe_menu>"

##將上個步驟產生的檔案用grep產生出選單上的名字,其實是可以自己手動修改設定檔變成 root@somewhere之類文字也不會影響下面命令參數。

host=( `grep "# ssh to " $HOME/.ssh/cast | sed -e 's/\#\ ssh\ to\ //g' | xargs` )

##取出命令參數,但是因為xargs遇到空白與斷行就會開始拆參數,所以先用sed把空白替換為:,這樣就沒問題了;而最後上面產出的命令參數時再用tr把:換回空白,解決了這個問題。其實第二行參數也可以任意的改,除了使用:做分隔的部份參數。有個解,就是用︿#,。等之類字元。不過等它發生了再來改寫就好了。

action=( `grep -v \# $HOME/.ssh/cast | sed 's/\ /:/g' | xargs -d \n` )
for (( i=0 ; i < ${#host[*]} ; i++ ))
do
    gen_menu ${host[$i]} ${action[$i]}
done

echo '</openbox_pipe_menu>'

我將它放在這裡

openbox右鍵選單 ssh to (1)

繼上次用schell script做出 XRandR旋轉螢幕的OPENBOX 選單後,這次想來個右鍵直接ssh個xterm直通認識的伺服器,首先檢查技術面,指令上xterm -e後面不可以用"" ''等字元把命令包起來,這是UNIX POWER TOOLs一書所提醒的"特殊注意事項"。

我想把程式拆成兩部份,一部分從/etc/hosts擷取出已經知道的hostname並且生成設定檔。第二部分就是址負責生出openbox pipe menu的script

第一部份任務很簡單

#!/bin/sh
debug=false
#debug=ture

# check the ssh_key2
if [ -z $HOME/.ssh/id_rsa ] ; then
    echo 'You should take RSA key for quicker login'
    echo 'Now I lead you to make one.'
    (/usr/bin/ssh-keygen -t rsa)
fi

# check ssh_agent
if [ `ps ax | grep ssh-agent | wc -l` -gt 0 ] ; then
    echo 'Found SSH-Agent is running.'
else
    echo 'Please man ssh-agent for more advantage.'
fi

# list the knownhost

##因為我只想通ipv4(去他的ipv6),所以我先將所有數字抽掉,那麼所有的ipv4位址就會變成...,然後把這些行最後一欄抽出來供作ssh的target(如果沒有短名,就會抽整條Domain name)。

##但是這樣會有個問題,這樣產出的送進pipe後傳入knownhosts矩陣裡,矩陣裡只會有一個元素。解決辦法就是多個xargs把參數"一次一個"傳進矩陣裡,就解決了。為了個xargs可是我想了好幾天才想出來的... = =b

knownhosts=( `sed 's/[:0-9:]//g' /etc/hosts | grep "\.\.\." |  awk '{ print $NF}' | xargs` )
if [ ! $debug ]; then
    echo ${knownhosts[@]}
fi

# creat ~/.ssh/cast
touch /tmp/cast$$
for host in ${knownhosts[*]}
do
    echo "# ssh to $host" >> /tmp/cast$$
    echo " -l $LOGNAME -p 22 -X $host " >> /tmp/cast$$
done

cat << TOPICCAST > $HOME/.ssh/cast
##    please keep this file format like this every 2 line    ##
##                                ##
##    "# ssh to" HOSTNAME                    ##
##    -l USERNAME -p PORT HOSTNAME                 ##
##                                ##
##    or any options comes after ssh command in 2nd line    ##
TOPICCAST

grep -v localhost /tmp/cast$$ >> $HOME/.ssh/cast

2008年9月20日 星期六

自製Grub Splash

GRUB儼然已經變成我喜愛的第二個開機管理程式,排名在第一句話就是中文的SPFDISK之後。GRUB還有個特異功能可以在開機畫面背景放入splash作為美化底圖。製造這底圖的方法其實滿簡單的。

通常你會想玩這一步,一定是玩linux到一定時間。所以假設你的系統有GIMP。在此就用GIMP處理完所有的圖形工作。

用GIMP打開圖檔後,scale image為640 x 480的解析度。然後將色彩模式改為index color索引色彩,並且限定使用14色。因此一開始找相片時就可以挑選單色mono tone或dualtone的,比較不會差太遠。然後save as xpm檔案格式。

接下來把它們放到/boot/grub/下,用gzip壓起來,如果有多個圖檔,可以在bash借用for迴圈簡單完成

for xpm in *.xpm

do gzip $xpm

done

然後在grub.conf裡面寫上

splashimage= (hd0,0)/boot/grub/yourfilename.xpm.gz

我個人是很懶,所以我偷吃步是

ls *.xpm.gz >> grub.conf && vi /boot/grub/grub.conf

這樣剛剛一次轉完的好幾張圖檔名都送進去了

FreeBSD無linux watch

原因很簡單,因為BSD命令watch是用來snoop tty 裝置的,換句話說,是可以用來監視其他登入終端機的工具。linux watch是用來把傳入的指令依照設定間隔時間反覆執行的,這個可以用個超簡單shell script立刻搞定

#!/bin/sh
while true
do
eval $@
sleep 2
clear
done

這樣的無窮迴圈就會一直跑指令到天荒地老

不過既然有雛型,何不乾脆一點直接把命令「客制化」盛好拿去吃

比如說

檢查下載檔案大小 'ls -lh $1'

觀察檔案系統會不會爆 'df -iH'

或是你想的到的組合

2008年9月13日 星期六

Openbox Daulhead XRandR pipemenus

自己試寫的,主要原因是小筆電用X window臨時要外接螢幕,真的很不方便。有xrandr指令後還是不甚方便,如果在windows要旋轉螢幕,通常都是從顯示器內容就可以改了。我也很想有這樣的功能,所以就練習寫一下。

可是經過測試,發現有時螢幕旋轉後,滑鼠指標就不見了~慘啊~
有時候滑過xterm就會再度出現蹤跡。我還試過將旋轉螢幕與正常螢幕左右放置,結果滑鼠位移與按鍵就對應不起來了。你可以移動到按鈕上,但是沒有辦法按。

基本上就是這樣囉。

2008年9月9日 星期二

[轉錄]在ubuntu 7.04 實現自動登入X(autologin)不使用gdm或kdm

原文出處: 在ubuntu 7.04 實現自動登入X(autologin)不使用gdm或kdm
動作指令如下:
echo "#"\!"/bin/sh" > /usr/bin/autologin
echo "/bin/login -f $USER" >
> /usr/bin/autologin
chmod
+x /usr/bin/autologin

sed -e 's/getty/getty -n -l \/usr\/bin\/autologin/g' /etc/event.d/tty1 > /var/tmp/tty1.$$; mv -f /var/tmp/tty1.$$ /etc/event.d/tty1

cat << STARTX >> ~/.bash_profile
if [ -z "\$DISPLAY" ] && [ \$(tty) == /dev/tty1 ]; then
startx
fi
STARTX

sed 's/\$HOME\/.serverauth.\$\$/\$XAUTHORITY/g' /usr/bin/startx > /var/tmp/startx.$$ ; mv -f /var/tmp/startx.$$ /usr/bin/startx

PS: Xsession檔案因為我使用的是openbox所以與論壇寫法不同。

2008年9月7日 星期日

在X window 用xrandr改變螢幕解析度或雙螢幕組合

筆電最大的優勢就是移動力,一般都可以有外接螢幕作簡報。習慣的人都知道可以從顯示器內容作雙螢幕輸出到投影機,或是擁有兩個桌面。但是到了X window,就會不知從何做起。
答案就是xrandr
以前要在X設定好雙螢幕,才可以使用兩個螢幕。寫法是在xorg.conf寫上兩個device(即使只有一張顯示卡、但是有兩個頭),組成兩個screen放在serverlayout。
現在走一遭xrandr,就可以省去修改多個xorg.conf的功夫。首先試試這
xrandr -q
就可以看到現在X螢幕的組態,以我的筆電而言
Screen 0: minimum 320 x 200, current 1280 x 1024, maximum 2304 x 1624
VGA-0 connected 1280x1024+0+0 (normal left inverted right) 376mm x 301mm
1280x1024 60.0*+ 75.0 59.9
DVI-0 disconnected (normal left inverted right)
LVDS connected (normal left inverted right)
1024x600 60.0 +
S-video disconnected (normal left inverted right)

這時候如果我想要關掉筆電上的小螢幕,就只要
xrandr --output LVDS --off
如果我想要雙螢幕組合,首先要確認你有這樣大的虛擬桌面可能,就是-q時回報的最大值。修改最大值的方法就是修改xorg.conf裡面display增加Virtual選項。然後就可以雙螢幕排列
首先把兩個螢幕內容同步
xrandr --output LVDS --same-as --output VGA-0
然後假設把小螢幕擺在右方為第二個螢幕
xrandr --output LVDS --right-of --output VGA-0
然後就可以看到雙螢幕組態出現了

我自己進階實驗一個組態卻遭遇到挫敗,概念上是這樣的,左螢幕為1280x1024,右邊為旋轉後的。600x1024。組態過程是這樣的,首先要把1024x600旋轉後放左邊,1280x1024先作left在調到right。但是詭異的事情發生了。旋轉後的螢幕可以顯示,也可以roll over,但是不能click!!
問題應該是出現在X server的層級,沒有想過有人亂旋轉。事實上這問題在Windows也是一樣。螢幕反轉後,會發現觸控筆「所見非所點」。

開始考慮寫個openbox pipemenu來改變螢幕解析度或組態。