Thinkpad 的小紅點在 Linux 上似乎一直沒有完善圖形化介面的設定工具。若要設定的話,常得參考一些指令設定

驅動程式預設的速度、靈敏度都太低,推一陣子手指就累了,也無法按著中鍵移動小紅點來捲動視窗。不甚好用,稍做一些設定的筆記,作為未來參考。

在 GNU/Linux Debian/Ubuntu 上有數種機制可以更改小紅點設定,若是新手使用,大概會被 sysfs, udev, hal, DeviceKit, pm-utils, xorg.conf, xinput 等術語搞得一頭霧水。你若不想弄懂這些難解術語,也不想更改 xorg.conf,最快的作法是以 sudo 在虛擬終端機執行以下指令

#!/bin/sh
# 游標速度,可調整數值。大為快,小為幔
echo -n 120 > /sys/devices/platform/i8042/serio1/speed
# 靈敏度,最高應為 255
echo -n 250 > /sys/devices/platform/i8042/serio1/sensitivity
# 按小紅點為選取,1 為啟用,0 為關閉。
echo -n 0 > /sys/devices/platform/i8042/serio1/press_to_select

xinput list-props '"TPPS/2 IBM TrackPoint"'
xinput set-int-prop '"TPPS/2 IBM TrackPoint"' 'Evdev Wheel Emulation' 8 1
xinput set-int-prop '"TPPS/2 IBM TrackPoint"' 'Evdev Wheel Emulation Button' 8 2
xinput set-int-prop '"TPPS/2 IBM TrackPoint"' "Evdev Wheel Emulation X Axis" 8 6 7
xinput set-int-prop '"TPPS/2 IBM TrackPoint"' "Evdev Wheel Emulation Y Axis" 8 4 5
xinput set-int-prop '"TPPS/2 IBM TrackPoint"' "Evdev Wheel Emulation Axes" 8 6 7 4 5
xinput list-props '"TPPS/2 IBM TrackPoint"'

這些指令可以幫你把 TrackPoint 的速度、靈敏度調高,並驅動中鍵模擬滾輪功能。頭三行 echo 指令需以 root 權限執行,你可自行調整偏好的數值。後面幾行 xinput 指令,必須在 X 視窗下執行。(意即,你不能拿到 console 下面來跑)

這些指令每次重開機或休眠後都需重新執行一次。你若嫌麻煩,目前最簡易的設定機制應該是寫成 udev rules,作法以 root 執行指令如下

# cat > /etc/udev/rules.d/90-trackpoint.rules <<EOF
# SUBSYSTEM=="serio", DRIVERS=="psmouse", ATTR{press_to_select}="0", ATTR{sensitivity}="250", ATTR{speed}="120"
DEVPATH=="/devices/platform/i8042/serio1", ATTR{press_to_select}="0", ATTR{sensitivity}="250", ATTR{speed}="120"

ACTION!="add|change", GOTO="xorg_trackpoint_end"
KERNEL!="event*", GOTO="xorg_trackpoint_end"

ENV{ID_PATH}!="platform-i8042-serio-1", GOTO="xorg_trackpoint_end"

ENV{x11_options.EmulateWheel}="1"
ENV{x11_options.EmulateWheelButton}="2"
ENV{x11_options.XAxisMapping}="6 7"
ENV{x11_options.Emulate3Buttons}="0"

LABEL="xorg_trackpoint_end"
EOF

這段程式碼,參考 ThinkWiki 網站理論上,會在你開機以及重休眠模式啟動時,自動套用小紅點速度設定與模擬滾輪設定。

實際上,因為一個已知的 #549379 udev/kernel 問題,滑鼠的速度設定無法自動套用。暫時可以先用前段的 echo/sysfs 方式解決。

這是一篇 Tip.

時常,你得將手上的軟體原始碼壓起來釋出給第三方使用、測試。特別是你希望提供 daily basics/ revision basics 讓使用者取得最新版軟體的時候。

由於最近都已經只用 git,依據我自己的習慣,希望能夠在檔名中使用簡碼版次,以便未來能夠追蹤出該版次的問題。稍微問了一下友人與查了一下文件,取得 abbreviated commit hash 的作法如下

git log --pretty=format:"%h" -1

若你想將整份程式碼壓縮起來,可以使用

git archive --format zip -o filename.zip HEAD

倘若想加上日期作為檔名,請使用

git archive --format zip -o $(git log --date=short --pretty=format:"%ad" -1).zip HEAD

若常常使用這個指令,有兩種作法,一是設定為 git alias. 另一則是利用 git 的 commands (verbs) 命名機制,在你的執行路徑 下,寫入一檔案名稱如 git-zip。並將上述指令加入檔案中,未來就可以使用 git zip 來產生最新版壓縮檔。

作法如
$ cat > ~/bin/git-zip
#!/bin/sh
git archive --format zip -o $(git log --pretty=format:"%h" -1).zip HEAD
$ chmod u+x ~/bin/git-zip
$ cd git-repository
$ git zip

另外,為了容易辨識版次,你也可以利用 gitattributes 在程式碼中加入 ident ($Id$) 作為標示。操作可參考 Lloyd Huang 所寫之 Howto.

這是一篇 Tip.

如果你也常常使用 Thunderbird / Icedove 作為電子郵件書寫工具,並時常需要與外國朋友聯絡,大概也會碰到跟我一樣的問題。就是回信的時候,在信件引言開頭所寫得誰誰誰在何時何刻寫了甚麽,你若使用中文語系環境,這些日期跟提醒文字都會變成中文。

跟同語系的朋友聯絡倒是沒有問題,問題在於非中文語系對他們而言,這些無法顯示的字眼實在非常困擾,而且也略顯不禮貌。最好是能夠改成英文系顯示。這項需求的設定已經被收錄在 mozillaZine 與 ThunderBird 的技巧說明網站。

調整的方式非常容易,你可以在 user.js 中加入以下設定,就可以客製化回信時所使用的引言標頭。

// http://www.mozilla.org/support/thunderbird/tips#beh_replyheader
// http://kb.mozillazine.org/Reply_header_settings

user_pref("mailnews.reply_header_locale", "en-US");

// Change the reply header
// 0 - No Reply-Text
// 1 - "[Author] wrote:"
// 2 - "On [date] [author] wrote:"
// 3 - User-defined reply header. Use the prefs below in conjunction with this:
user_pref("mailnews.reply_header_type", 3);

// If you set 3 for the pref above then you may set the following prefs.
user_pref("mailnews.reply_header_authorwrote", "%s wrote");
user_pref("mailnews.reply_header_ondate", "on %s");
user_pref("mailnews.reply_header_separator", " ");
user_pref("mailnews.reply_header_colon", ":");
// The end result will be [authorwrote][separator][ondate][colon]

其中,mailnews.reply_header_locale 可用於設定你要使用的日期格式。若你發現更改 reply_header_locale 了之後,日期沒有變成應該要出現的英文日期,反而是亂碼的中文的話。你大概是碰到跟 Ubuntu 上的 #157638 一樣的問題,意即你的系統缺乏了相對應的語系資料 (locale data),請確認你的系統中生成了如 en_US 等語系資料檔案。如不確定,可於系統上執行 “sudo dpkg-reconfigure locales” 來進行設定。

最糟的情況,你可以透過環境參數的設定,更改 LC_TIME 為 en_US 或 C,這樣日期字串就會自動轉為英文語系。LC_TIME 的設定方法適用於大部分軟體。

這是一則 tip.

警告: 本文所說明之內容僅適合進階使用者應用。未經適當使用,可能會造成系統無法正常運作。

不知道有多少人計算過,其實在你的 Linux 檔案系統中,有不少重複的相同檔案。特別是圖檔、說明文件與修改說明。若是拿將檔案整併,應該可以省下些空間。

於是 Julian Andres Klode (chf) 參考 hardlink.py 的概念寫了一個 hardlink 工具,這個工具會幫你從指定的目錄中找出相同的檔案,以 Hard Link 的方式將多份檔案刪減成一份,如此便可以節省硬碟空間。白話一點說明就是刪掉多重檔案的儲存空間,在檔案系統的目錄中新增一筆連結資訊到同一份儲存位置。

我試著對我的 Debian Sid 上的 /usr 下達這個指令,共找到 11391 個檔案,省下大約 135 MiB 的空間。

由於 Hard Link 的本質特性,此指令只能用在同一個分割區下,建議不要對全系統下此指令。此外,若已經被 “hard link” 過得檔案分屬不同的軟體,未來若升級軟體時,可能會覆蓋掉共用的檔案而造成軟體無法運作,這點風險請自行承擔。建議使用在較少更新的 Debian Stable 版本。

軟體可透過 apt 或於下載。

身為一個兼職網管,偶爾你總想找出到底是那一隻程式佔用了網路埠、或是找出某個連線是哪隻程式建立的。在 FreeBSD 上有一個工具非常好用,叫做 sockstat。但是 Linux 過去一直沒有人寫這樣的工具,你可以用 ‘lsof -i -n’ 或是 ‘netstat -anpe‘ 等指令來滿足這個需求。

最近 William Pitcock (nenolod) 重新改寫了一版給 Linux 用的 sockstat,目前已經進入 Debian Sid 中。

需要者請自行取用吧。

Continue reading

若你時常在 IRC 聊天或尋求技術支援,便會知道一口氣在頻道內張貼大量內容是非常不禮貌的。因為這樣常會蓋掉其他朋友的正常談話訊息,且非常不便利閱讀。

但你又時常需要提供各種設定或程式碼給人參考、除錯,比較好的方法是使用 rafb.net, pastebin.com, paste.debian.netpaste.ubuntu.com 等網站張貼段落。

不過很多時候,你若要從系統整理出這些設定檔也不是一件頗為容易的事情,Stéphane Graber 為此寫了 pastebinit。pastebint 目前已經進到 Debian Sid.

pastebint 是一個指令列介面的軟體,你可以透過指令的方式將設定檔或軟體的輸出丟到上述眾多任一網站上。操作方式如下

$ pastebinit -i ./2201-openwrt-redboot-layout.txt -b http://openwrt.pastebin.com
http://openwrt.pastebin.com/f58502e41
$ cat /etc/X11/xorg.conf | pastebinit -i - -b http://paste.debian.net
http://paste.debian.net/16838/

執行後,你就可以將回傳的網址丟到 IRC 頻道上,讓其他人檢閱。此外,若你總使用固定的網站,你也可以寫好 ~/.pastebinit.xml 設定檔如下

<pastebinit>
<pastebin>http://openwrt.pastebin.com</pastebin>
<author>chihchun</author>
<jabberid>[email protected]</jabberid>
<format>text</format>
</pastebinit>

希望它也可以很快的支援 gist 等網站.