2007年7月4日

acpid 與 notebook 的特殊按鍵

經常會大家很講究某 Linux distribution 有沒有 out-of-box 就支援某某 notebook,其實這很不容易的。要想想廠商都已經特別裝好、設定好了 Windows 才拿出來賣,但 Linux 經常可沒先裝好。如果從一台沒裝好的 Notebook 自己拿原版 Windows 光碟開始裝,也是要下載很多東西,一點也不容易啊。

目前的 distribution 設計都進步很多了,各層分工合作,就算有特殊鍵沒支援的,要改成支援也是很簡單。這裡大致介紹一下怎樣讓特殊按鍵們產生作用。先說明原理:特殊鍵一般都是會產生 acpi event,但這個 event 往往系統認不得。這裡 acpid 扮演的角色就是把這個認不得的 event 利用呼叫 acpi_fakekey 的方式變成假裝按了一個鍵,而這個鍵系統認得,就可以產生相對應功能啦。

實例說明:我的 volume-down 降低音量鍵沒用,那先跑 acpi_listen,然後按 volume-down 一下,看看出來的結果。以下是我的 notebook 上出現的:
john@Portege-2000:~$ acpi_listen 
hkey VALD 00000000 00000102
hkey VALD 00000001 00000102
嗯嗯,可見按下跟放開都會產生事件,我們這裡抓那個放開的事件就好。畢竟按下了才有可能發生放開嘛。然後把這個事件加到 /etc/acpi/events 底下,新增一個檔案 tosh-volume-down
# /etc/acpi/events/tosh-volume-down

event=hkey VALD 00000001 00000102
action=/etc/acpi/voldownbtn.sh
這裡頭的意思是說,如果抓到了這個事件,就呼叫 /etc/acpi/voldownbtn.sh。這個 script 其實就是統一拿來降低音量的,內容為:
#!/bin/bash
. /usr/share/acpi-support/key-constants
acpi_fakekey $KEY_VOLUMEDOWN
其中 /usr/share/acpi-support/key-constants 就是 kernel 認得的按鍵代碼,$KEY_VOLUMEDOWN 的值是 114。所以日後每當我按了 Toshiba 自己特別的 volume-down,就會對應到 acpi_fakekey 114,等於是按下了系統認得的降低音量鍵。在新版的 gnome 中,這鍵系統會認得(也可以自訂,把他的作用換成其他的,例如升高音量? = =),所以會有漂亮的 UI 一起搭配起來,讓我看到目前的音量大小。一般說來特殊鍵也不過就那幾個,所以就算完全沒支援,也一下子就設起來啦。

沒有留言 :

張貼留言