2011-12-30

技嘉 M912X 之 Linux 設定

話說去年三月拿到技嘉 M912X 筆電之後,到現在都還沒整理好。現在就藉著這篇文章來自我勉勵,趕快慢慢搞定它。

到現在為止,還沒有搞定的事情有無線網卡(時好時不好)、螢幕觸控校正、螢幕切換、功能鍵、插著耳機時喇叭仍出聲(2012-01-03 ok)、藍芽……慢慢寫。

螢幕觸控校正
# aptitude install xserver-xorg-input-evtouch
# less /usr/share/doc/xserver-xorg-input-evtouch/README.calibration(說明檔)
# cd /
# wget http://www.tuxum.org/export/782/tuxum/xserver-xorg-input-evtouch/empty_cursor.xbm(因為我沒有這個檔案)
離開 X Window(按 Ctrl + Atl + Backspace 或在 console 按 Ctrl + d)
# cd /usr/lib/xf86-input-input-evtouch/
# ./calibrate.sh


執行上面最後一個指令之後,會出現左邊的白色畫面,四周有小 x。以觸控筆之類的沿著螢幕周圍繞著畫,畫面會出現如圖的數據(我的數據也太莫名其妙了),畫幾次都可以,直到認為數據無誤後,按 Enter 表示確認。下一步是在左上變成紅色的 x 上以觸控筆對準點下去,覺得準了,按滑鼠或觸控板左鍵表示確認,要是想重來就按右鍵。接著右下角的 x 會變紅色,再點一次,以左鍵確認。就結束了。

結束之後,也就離開校正程式,出現右邊的畫面。這些數據會自動存在剛剛所在資料夾,檔名是 out.txt,把它全部放到 xorg.conf 裡設定 touchscreen 的 InputDevice 段落,做為 Option。

很可惜,雖然終於成功使用這個校正程式(上次沒弄懂沒成功),進入 X Window 之後,觸控起來還是不準,更不準。下次再試。(2011-12-30)

參考資料

Evtouch configuration
Egalax-Touchscreen
Touchkit USB mini-HowTo

Alsa 設定

Alsa 有問題,這裡的解決辦法是找到正確的 model。這個 model 要寫在 /etc/modprobe.d/sound 這個檔案裡。要找到正確的 model,可以依照下列步驟:
$ head -n 1 /proc/asound/card0/codec*
Codec: Realtek ALC269
執行上面第一行之後,出現第二行的結果。這裡要的是「ALC269」這個東西。不過其實這個數據在 alsamixer 裡也看得到(下圖)。
$ less /usr/src/linux-2.6.32.10/Documentation/sound/alsa/HD-Audio-Models.txt(紅字部分為 kernel 版本)
在上述檔案裡,尋找「ALC269」(我的例子),看到下面的 model 選項:
ALC269
======
basic Basic preset
quanta Quanta FL1
eeepc-p703 ASUS Eeepc P703 P900A
eeepc-p901 ASUS Eeepc P901 S101
fujitsu FSC Amilo
lifebook Fujitsu Lifebook S6420
auto auto-config reading BIOS (default)
看到有這些選項,就一個個寫入聲音設定檔案做測驗,例如:
# vim /etc/modprobe.d/sound
alias snd-card-0 snd-hda-intel
options snd-hda-intel
model=lifebook index=0
# alsa reload(reload sound modules)
於是一切正常了。喇叭正常出聲,插上耳機也出聲正常。進入 alsamixer 去看,Interal(內建麥克風)也有,不過雖然控制桿跟之前設定 model=basic 時一樣很多,但似乎有幾個不一樣。不過也懶得回頭弄來比較上述檔案裡所提供的所有選項都試過了,果然只有「lifebook」 可以。現此時的 alsamixer 控制選項如下圖,計有 Master、PCM、Mic、Mic Boost、Capture、Beep、Digital、Dock Mic、Dock Mic Boost、Input Source、Internal Mic、Internal Boost。(2011-01-06)


參考資料

SDB:Intel-HDA sound problems

大小事紀

2010-03-07 Su 網購技嘉M912X (咖啡金) 8.9吋 NT$ 9999 。
2010-03-08 Mo 拿到機器。
2010-03-12 Fr shrink XP partition。
2010-03-15 Mo shrink 之後把新磁碟區寫入。
2010-03-15 Mo 安裝 Debian(問題 1. 滑鼠 2. 無線網卡)。
2010-03-17 We compile kernel 2.6.32.10 失敗。抄別台 2.6.32.4 成功。
2010-03-17 We 滑鼠、無線網路 ok。嘗試校正觸控螢幕,不得其法。
2010-03-18 Th 升級 kernel 後,沒聲音。Touchscreen 待解。
2010-03-18 Th 原來的 kernel 有聲音,但無法做 aslactl restore。
2010-03-20 Sa Alsa ok。option hda-intel model=basic (ALC269)。
2010-03-20 Sa install programs till php and have problems。
2010-03-24 We 嘗試螢幕切換,沒成功。
2010-03-24 We 視窗標題列字的大小解決(vim ~/.fluxbox/style_Meta)。
2010-03-25 Th 嘗試啟用功能鍵,沒成功。
2010-04-10 Sa 信用卡繳款。
2010-04-19 Mo 開機沒插電池狀態下,電源線拉掉,結果無法開機。
2010-04-27 Tu 送修(台北市松江路 8 號 2F-3)。隔天來電告知修好。
2010-05-03 Mo 修好帶回。
2011-02-02 We 嘗試 i810switch,沒成功。
2011-12-06 Tu 久違發現 Esc 鍵沒反應。
2011-12-06 Tu 內建 Webcam 會用了(mplayer tv://)。
2012-12-28 We 再次嘗試 lcd switch,仍沒成功。
2011-12-30 Fr 確認有內建麥克風。
2011-12-30 Fr 以 calibrate.sh 校正觸控螢幕。校正完畢仍不準確。
2012-01-03 Tu alsa 設定終於 ok(model=lifebook)。
2012-01-19 Th Esc 鍵沒反應送修技嘉。
2012-01-20 Fr 到技嘉取件,換鍵盤 900 元。

本格相關文章

暫且咖啡金
shrink ntfs partition
M912X 維修記
 

2011-12-14

理髮初體驗

上個禮拜提起理髮的事,想說那先來準備工具。一開始以模糊的印象在購物網站搜尋欄位敲上「理髮器」,結果有充電的、插電的、裝電池的,或充插兩用的。因為沒用過,遲遲無法決定要買哪一個,也去看了以理髮器理髮的影片,這才發現男生頭髮的後面跟旁邊這樣一理就是一分頭了不是嗎?最後逛到專門賣美髮器具的網站,發現就連充電電池也有鎘鎳、鎘氫、鋰離子的分別(為了這個,又另外插花去了解這三種充電電池有什麼差別),只好暫時放到一邊。

在這個購物網站裡,看到很多別種器具,於是發現有削髮器這種東西。事實上,一開始連剃刀跟削刀的差別都不知道。既然理髮器(或稱電剪)搞不定,那就來看看用削髮器理髮的影片好了。

然後又想,難道不能用剪刀剪就好了嗎?結果看到超厲害的素人理髮美女表演。事情至此,就決定不再花大錢買有的沒的。

昨天在家裡附近的 10 元商店買到削髮器(39 元)、尖尾梳(15 元),就展開理髮初體驗。右圖是我的理髮工具,從上到下依序是:軟刷(以前不知為何買的)、削髮器、剪刀(用好幾年了)、尖尾梳(沒辦法只有賣這種的)。

就這樣開始理髮,但從影片看來的大部分都忘了,所以只是把長的部分略為削掉,再把髮尾修齊而已。多點研究之後,下次再向後髮、前髮之實際剪掉挑戰。此次的戰果是,因為頭髮的確變短了,剪完之後,對方表示非常滿意。

相關連結

電池正解 - 電槍的終極改裝, 玩命前先看此文 by D3C(較人性化的說明)
鋰電池與鎳氫電池、鎳鎘電池之基本等性比較(表格)
鎳氫、鎳鎘電池、鋰電池的區別(幾乎全是物理化學所以看不甚有)
cut a guys hair EASY by kaylathefashiongirl
Idiot-proof way to cut hair :) by kaylathefashiongirl
 

2011-12-12

藏在科技背後的到底是什麼:守護程序I網路殺神

作者:Daniel Suarez(丹尼爾.史瓦雷茲)
譯者:黃維德
出版社:貓頭鷹
出版日期:2011年05月08日
ISBN:9789861207551
定價:NT$ 399


《守護程序I網路殺神》這本書的廣告內容充滿了神奇色彩,讓人覺得非看不可。這些廣告一方面繞著書中的技術都是現今辦得到的乃至於情節之驚人在打轉,另一方面則大加介紹它從部落格、業界名人之間竄起叫好進而叫座之間的斑斑血淚,書到手之後,還在書腰看到這樣的評語:「《Daemon》之於小說,正如《駭客任務》之於電影。評判其他以科技為背景的小說,都會以它為標準。」(Google 策略夥伴開發部雷克.克勞)哎,我覺得這樣《駭客任務》很吃虧。

或許那些對此書大為驚豔的網路高手,是為自己所擁有的技術能幹出如此轟轟烈烈的大事而感到暈眩吧。但是小說,並不在乎其內容所提及的科技,是否如此具有現實感,有可能性就可以了。小說要的是人性不是科技,科技是舖陳人性的方式之一。這本小說的好看,在於它不是只有科技,它還有人性,如若沒有人性,那就是小說化的科技手冊罷了。

這本書廣告的方向讓我覺得很難受。大概我對駭客技術無法體會得太深入,而且我對角色扮演也沒興趣,可是這真的不妨礙我欣賞這本小說,就像我對月球、火星、水星、銀河系都沒什麼常識,但也不妨礙我欣賞很多優秀的科幻小說。事實上,這本書也只是在描述駭進別人電腦時,講了一點點細節,我想這應該不值得那麼興奮。至於書裡角色扮演遊戲擬真的優秀程度,現實世界是沒有的,因為這正是吸引眾多玩家進入遊戲的原因之一,只此一宗,就讓我覺得推銷給我們的評論說書裡的技術都是辦得到的,根本幾乎都打槍,因為理論上辦得到,不代表事實上辦到了。有了技術之後,讓所有的事情能辦得到的,說真的,是人性,不是科技。所以到底是什麼推動書中的主角開始這個故事的呢?真的,我比較想知道這個,最好這個原因夠了不起。

書裡面最讓我有感覺的兩段,一段是談論寄生生物與宿主的關係,另一段是語言做為編碼程式從古早時代就開始。前者是在講生物演化史,後者姑且說是語言程式史好了(不能這麼講吧)。在冰冷的人性之中,這兩段讓我最感到溫暖。說人性冰冷,是因為看完了還沒有看到那個死了還在操縱全局的主角索伯,他到底幹嘛為什麼要這麼做呀?幾乎所有的憤世嫉俗都有最初的原因吧。或許作者從一開始就打從寫好幾集,不然真的是小說化的科技手冊。但它又不是科技手冊。

當然說憤世嫉俗或許不公平,因為到目前為止,這個索伯一整個大智慧,一整個看透世情,不過既然作者還沒交代,只好隨便我怎麼講。話說這個索伯,打從一開始,就讓我有賈伯斯的感覺。那個死掉的賈伯斯。若說這個角色有什麼張力,大概就是這個緣故吧。

牢騷發了一堆之後,還是要回來稱讚作者講故事的能力。把那麼多瑣碎的事情編派到各個角色身上,結構布局有條有理,劇情拉線沒什麼冷場,眾多角色也都稜角分明,真的是很厲害。但是科技的部分並沒有觸發我什麼想像力,要說這個,很多科幻小說都強太多了,這或許是行家與非行家的分別吧,非行家就想要漫遊在想像裡。或許要讓真實有吸引力,需要別的什麼工夫吧。

前面一直說人性,其實這本書是有人性的,不然其他所有的角色不會有血有淚。但是在這些人之上的這個大計畫,它也是人想出來的,可是這個想出來的人卻一整個沒血沒淚似地,連一點點血淚都不讓讀者偷看到,真的是太過分了。這個冰冷就是出自這裡。因為他怎麼說也是個人,而不是《魔戒》裡的戒王,或《哈利波特》裡的佛地魔呀。這一點讓我在看的過程中一直很不滿。希望以後會交待清楚,因為這其中明明有個很大的故事該寫的呀,不然也該用幾句話交待一下,否則真的是在沙地築塔,很沒意思。總不會這本書是為了寫了這些科技技術而寫的吧,根本不只呀。

看來我就是為了抱怨這個而寫這篇的。
 

2011-12-09

crontab 實作心得

由於常常忘記錄節目,在友人的批評及建議之下,嘗試使用 crontab。

科技始於人性

關於忘記錄節目這件事是這樣的。朋友自己寫了一個叫做 "dvb" 的 shell script,可以在當天或好幾天前,指定日期、時間錄下數位電視頻道的節目,可是我懶得去指定日期,總是當天才下指令,問題是有的「當天」會忘記下達指令,就漏錄了。與其怨嘆自己的記性,不如把這件事交給 crontab。crontab 會把固定要做的事情辦得好好的。

開工

我的系統版本是
$ cat /etc/debian_version
5.0.9
$ uname -r
2.6.27.59
首先以 root 的身分,建立並編寫 /etc/cron.allow 這個檔案(因為我的系統裡沒有這個檔案),內容只有幾個字母,也就是我的使用者名稱。這麼做之後,就可以持使用者的身分做以下的事情。
首先是編寫工作排程:
$ crontab -e
這樣就進入編寫排程的介面。編寫完畢,儲存並離開編輯程式,就生效了。以下是我的排程內容(這裡假設程式放在 /usr/local/sh/ 之下,因此實際上出了問題,請看後解):
# m h dom mon dow command
59 22 * * 1 cd /tv/ && /usr/local/sh/dvb -R5
59 22 * * 2 cd /tv/ && /usr/local/sh/dvb -R5
59 22 * * 3 cd /tv/ && /usr/local/sh/dvb -R5
59 22 * * 4 cd /tv/ && /usr/local/sh/dvb -R5
26 18 * * 0 cd /tv/ && /usr/local/sh/dvb -E 1827-1857 ttv-1
這裡排的工作共有五項,前四行是要錄周一到周四公視的《國際換日線》,最後一行是錄周日的《海賊王》。為了把錄下來的節目集中在某個資料夾,所以先換到 /tv/ 資料夾,再啟動朋友寫的預錄節目的 shell script "/usr/local/sh/dvb",dvb 後面的參數,"-R5" 是告訴這個 shell script(不是 crontab)錄當天公視的《國際換日線》,最後一個錄《海賊王》的參數比較長,是因為這個節目不在該 script 的預設錄影節目裡,必須手動給出錄影始末時間及指定電視台。

數字

每行是一件工作。這些數字、字母的意思逐項是分、時、日、月、星期、程式執行工作,這六欄兩兩之間以空格或 tab 分開,最後一欄全部是程式用,語法之間的空白無所限制。這裡要執行的工作是規定每個禮拜幾的幾點幾分要錄節目。雖然執行工作的程式已規定錄影時間,但是也得要跟 crontab 約定好下達指令的時間,否則要是在分、時的地方只以 * 號表示(表示所有數字)而沒有給它一個數字,那麼就等於告訴它每分鐘都執行一次排給它的工作,接下來信箱每分鐘都會收到報告工作啟動的信件,相當可怕,而且事實上這裡是要錄節目,也無法接連不停展開多個錄影程序。所以不管是以禮拜還是月、日為單位做排程時,幾點幾分要記得寫(除非就是要驚人的每分鐘)。

另外關於幾月幾日與禮拜幾這兩組計算方式不同的單位,通常是不會同時都設定的,因為 crontab 取的是聯集而非交集,要是都給數字,它會照單全收,幾月幾日和禮拜幾都會執行,除非就是要這樣排程(應該很少見……),否則將遠離初衷。

關於數字表示法,禮拜天以 0 或 7 表示。數字之表示還有這樣的:0-3,6,11-20,這是不連續時的寫法,還有,*/2、*/3、2-20/4,這是取指定的數字,每 2 或 3 或 4 個單位執行一次的意思,也就是除號吧。

路徑

接下來是一件很重要的事,也就是執行工作用的程式的路徑寫法(也就是上面所說的「後解」),最好/必須是完整路徑。雖然在某些情形下(這樣或那樣),工作欄位裡的程式路徑寫完整就沒問題,但有時候自己寫的程式,並未在程式裡寫出該程式的完整路徑,如此一來,即使在工作欄位裡寫的明明是完整路徑,但 crontab 工作時,進入該程式後卻會很困擾,於是回報狀況時會非常簡明地寫道「sh: line 行數: 程式名稱: command not found」,這意思就是,它沒辦法做下去。就算要改程式一時之間也太大費周章了,這時的解決辦法是讓 crontab 的預設路徑(PATH)裡也有該程式所在的資料夾。crontab 的預設路徑(它認得的)只有 /usr/bin 和 /bin,想要加上自己的路徑,只要在進入 crontab 排程的編輯模式之後,於所有排程開始之前,也就是最上面,加上一行來修改預設路徑即可,其內容包括它原先認得的以及新加入的,例如:
PATH=/usr/bin:/bin:/usr/local/bin:/usr/local/sh
隨你加多長。如果要加入的路徑是在自己家裡,則必須寫完整路徑,不能以「$HOME」帶過。然而,在排程裡,自己家裡則可以寫做「$HOME」。要改 shell 也是在這裡,寫在 PATH 的上一行,寫成「SHELL=/bin/什麼sh」即可。

其他參數

如果只是要看 crontab 排了什麼工作,指令是這樣的:
$ crontab -l
螢幕上會很乖巧地秀出預定的工作(但是不會秀出預設路徑):
# m h dom mon dow command
59 22 * * 1 cd /tv/ && /usr/local/sh/dvb -R5
59 22 * * 2 cd /tv/ && /usr/local/sh/dvb -R5
59 22 * * 3 cd /tv/ && /usr/local/sh/dvb -R5
59 22 * * 4 cd /tv/ && /usr/local/sh/dvb -R5
26 18 * * 0 cd /tv/ && /usr/local/sh/dvb -E 1827-1857 ttv-1
除了路徑設定部分之外,跟編輯時鍵入的東西長得一模一樣。而如果要看別的使用者所排的工作,權限允許的話,指令是這樣:
$ crontab -u username -l
再來另一個參數:
$ crontab -r
這是不進入編輯模式,直接把所有排定的工作都殺掉。

到此應該算是入門完滿吧。相關的 manpage 如下:
$ man crontab
$ man 5 crontab
$ man cron