你有沒有想象過能夠坐在沙發上,或者躺在床上,拿著遙控器像操作電視一樣來操作電腦?可能你已經見到過市場上出現的那種電腦遙控器,不過它們都是基於windows下的。其實,通過一定的配置,在linux平台上,即使使用一般的遙控器,我們也可以完成對電腦的要控操作。
linux下遙控器的配置使用主要涉及到Linux的紅外驅動程式。LIRC (Linux Infrared Remoter Control),即是Linux下的專門控制處理紅外遙控訊號的程式,包含了各種介面的紅外驅動、多個應用程式及LIRC庫。這裡討論的主要是其中應用於家電遙控器對PC機的控制方面。
紅外訊號的來源可以是串口、並口、IRDA、ETHERNET等。LIRC下串口紅外的驅動叫做lirc_serial,它預設是檢測串口的DCD訊號線,然後測量各種時間參數,並傳遞到上層的應用程式。同時LIRC內建了許多應用工具,例如xmode2用X11的圖形介面畫出DCD上的矩形脈衝,irexec可以將遙控器按鍵對應為命令列上的某一條命令,irrecord獲得新的設定檔lircd.conf等。
l 安裝lirc驅動
$ cd ~/
$ mkdir lirc
$ cd lirc
$ sudo apt-get source lirc #下載 lirc-0.7.1pre2
$ cd lirc-0.7.1pre2
$ sudo ./setup.sh
然後根據相應的遙控器選擇,這裡選擇other serial port device 中的 serial,irq 和 io 地址要根據你的實際情況配置,這裡使用的是預設值。這一步也很重要,否則將無法正常使用。選擇完畢後選擇儲存並配置,然後會運行configure,之後再執行:
$ sudo make ; make install
安裝完畢後會編譯核心模組並安裝到 /lib/modules/2.6.8.1-epia1/misc 下。根據不同的硬體,模組會有所不同。這裡是 lirc_dev.ko 和 lirc_serial.ko 兩個。
l 插入模組
$ sudo apt-get install setserial
$ sudo setserial /dev/ttyS1 uart none
$ sudo modprobe lirc_serial irq=3 io=0x2f8
l 使用 mode2程式測試
$ sudo mode2 #console下命令
(如果安裝有usbmount(使用udev),裝置節點的位置會發生改變,可用 mode2 -d /dev/lirc0測試。)用遙控器按下,看螢幕有無反應。如:
space 1471423
pulse 3149
space 2905
pulse 687
space 1334
pulse 686
這就表示安裝正確了。
l 配置遙控器
因為這裡使用的不是名牌遙控器(可到 http://www.lirc.org/ 下載別人已經做好的設定檔),就要使用 irrecord 命令產生。
$ sudo irrecord new.conf #此時lircd不能運行
按照提示一步步完成。這裡要注意,按鍵時間不要太短也不要太長,按照提示上的說法是每次按鍵要顯示1~10個點。即使這樣,最後使用得到的配置也可能有的鍵能用有的鍵不能用,這時一個取巧的做法是,尋找規律看什麼樣的情況下鍵是能用的,重複配置多次,將每次能用的鍵抽出來組成一個設定檔。
$ sudo cp new.conf /etc/lircd.conf #將產生的檔案拷到/etc下,重新命名為lircd.conf
$ sudo lircd #如果裝置節點位置改變,則需要添加-d /dev/lirc0參數
運行 irw 測試組態檔案是否正確,按鍵是否找到。
$ sudo irw
如按下power鍵,螢幕上顯示:
0000000000000001 00 power new.conf
如果每個鍵顯示的資訊與設定檔中一致,則配置成功。
接下來將lirc_serial irq=3 io=0x2f8寫到/etc/modules中
l 配置.lircrc檔案
.lircrc為lirc的應用程式設定檔,典型欄位配置如下:
begin
prog = lirckeyd
remote = new.conf
button = power
repeat = 0
config = power
end
其中:
begin~end表示一個獨立的配置塊。
prog域的值表示使用該配置塊的程式名稱。
remote的值表示使用的遙控器名稱(參見lircd.conf中的定義)。
button 的值表示遙控器按鍵名稱(參見lircd.conf中的定義)。
repeat 的值表示按鍵的重複次數。
config 的值表示該按鍵對應的字串,該字串可以被prog定義的應用程式獲得。
需要注意的一點是remote的值一定要和lircd.conf中的name值一致,比如上面irrecord 產生的配置中name為new.conf,則這裡的remote值也要為new.conf。
l 將遙控器按鍵映射為x事件
接下來就需要將遙控器的按鍵與我們期望的操作對應起來。這時需要根據LIRC庫提供的介面編寫一定的對應程式。具體的實現過程將在其它文章討論