2010年3月18日 星期四

為 RhythmBox 啟用 Acer 4920G 的 MediaTouch

其實之前9.04的時候有弄過,只是某天不小心砍掉了orz

先來大致解釋一下原理:目前的 Xorg 抓到的 MediaTouch 是 Synaptics TouchPad,而且和底下那個真正的觸控板完全一樣。比如說我的 4920G 用 xinput list 來看是這樣的

"SynPS/2 Synaptics TouchPad" id=2 [XExtensionPointer]
 Type is TOUCHPAD
 Num_buttons is 12
 Num_axes is 2
 Mode is Relative
 Motion_buffer is 256
 Axis 0 :
  Min_value is 1472
  Max_value is 5472
  Resolution is 1
 Axis 1 :
  Min_value is 1408
  Max_value is 4448
  Resolution is 1
"SynPS/2 Synaptics TouchPad" id=11 [XExtensionPointer]
 Type is TOUCHPAD
 Num_buttons is 12
 Num_axes is 2
 Mode is Relative
 Motion_buffer is 256
 Axis 0 :
  Min_value is 1472
  Max_value is 5472
  Resolution is 1
 Axis 1 :
  Min_value is 1408
  Max_value is 4448
  Resolution is 1
第一行的 id= 是這個裝置在 xinput 中的代號。理論上這個編號每台電腦都有可能不同,但 MediaTouch 應該都是第一個才對。
有了裝置的編號,接下來就是先用 xinput 把原來的按鈕重新綁定到四個不同的、未使用的按鈕,然後再用 xbindkeys 把這些按鈕綁定到 RhythmBox 的相關動作。

接下來是實作的時間了:
剛剛有提到,我的電腦上 MediaTouch 的編號是 2。所以 xinput 重新綁定的命令要這樣下

xinput set-button-map "2" 1 2 3 17 18 19 20 8 9 10 11 12 13 14 15 16
這樣會把第 4 個按鈕(通常是向上捲動,在 MediaTouch 上則是播放/暫停)綁定為第 17 個按鈕,以下類推。

再來是用 xbindkeys 把 17~20 這幾個按鈕(現在是 MediaTouch 上那四個鈕了)對應到 RhythmBox 上。RhythmBox 有提供一個小程式,可以在命令列控制播放、暫停、下一首、上一首…等功能(這也是為什麼我選擇 RhythmBox 的原因之一),詳細的用法可以查看 rhythmbox-clinet 的 manpage
設定 xbindkeys 的方式也很簡單,設定檔的語法非常好懂

"rhythmbox-client --no-present --play-pause"
  b:17
第一行是要執行的指令,外面用雙引號括起來就好了。第二行是要綁定的按鈕或按鍵, b:17 就是綁定在第 17 個按鈕上。所以完整的設定檔會像這樣:
"rhythmbox-client --no-present --play-pause"
  b:17

"rhythmbox-client --no-start --pause --hide"
  b:18

"rhythmbox-client --no-present --no-start --previous"
  b:19

"rhythmbox-client --no-present --no-start --next"
  b:20
設定檔寫好之後,要存在家目錄裡,檔名是 .xbindkeyrc。存好之後執行 xbindkeys,就能用 MediaTouch 來控制 RhythmBox 了

現在萬事具備,只要再把剛剛有執行過的兩個程式 ( xinput 和 xbindkeys ) 加到「啟動應用程式」裡就可以了。

為了方便,這邊提供一個小小的 bash script 來啟動這兩個程式

2010年3月6日 星期六

淺談 debian packaging -3

既然要談 control 檔,當然不能不提到 maintainer's guide 裡關於 control 檔的說明
這份說明是關於 source package 中的 control 檔,與 binary package 裡的大同小異。

幾個比較主要的標籤有

  • Source: source package 的名字
  • Package: binary package 的名字
  • Section: 套件的分類。在 debian 裡,套件依授權的方式分為 main(完全採用自由授權的軟體)、contrib(本身是自由軟體,但依賴一些非自由軟體,比如 java-package - 將 sun 的 java 打包成 deb 檔的程式,打包程式本身是 GPL 的自由軟體,但它會去下載 sun 的 java,這就不是自由軟體了)、non-free(非自由的軟體,比如 sun-java)三大類,底下再依功能細分成文件、程式庫、網際網路…等等。
    而在 ubuntu 裡則是依授權和更新及支援的方式分成 main(由官方提供更新及支援的自由軟體)、universe(官方不提供支援的自由軟體)、multiverse(官方不提供支援的非自由軟體)、restricted(不提供原始碼的非自由軟體,主要是驅動程式)四大類,底下一樣細分成很多小類。
    如果看不懂 maintainer's guide 所寫的意思,這裡有幾張圖可以參考一下
    1. Aptitude 中文介面,multiverse/doc
    2. Aptitude 英文介面,main/doc
    3. Synaptic 中文介面,main/doc
    4. Synaptic 英文介面,main/doc
  • Priority: 套件的優先程度,這可以想成是「系統有多需要這個套件」。像是 adduser 的優先程度,在ubuntu 裡標為 important(重要),而 fuseiso 這個套件則是 optional(次要)。
  • Maintainer: 套件維護者的連絡方式,格式就是標準的 email 地址。
  • Architecture: 支援的 CPU 種類。最常見的就是 i386(INTEL 80386 相容的 CPU,幾乎INTEL、AMD 的 CPU 都算在內了)、amd64(64bit 的 CPU)、arm(常用於嵌入式系統的 ARM CPU),還有一個特殊的 any,如同字面上的意思,是和硬體無關的,比如文件檔或用 python、php、java 等語言開發的程式。
  • Description: 套件的說明