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 來啟動這兩個程式