你有沒有想象過能夠坐在沙發(fā)上,或者躺在床上,拿著遙控器像操作電視一樣來操作電腦?可能你已經(jīng)見到過市場上出現(xiàn)的那種電腦遙控器,不過它們都是基于windows下的。其實(shí),通過一定的配置,在linux平臺上,即使使用一般的遙控器,我們也可以完成對電腦的要控操作。
linux下遙控器的配置使用主要涉及到Linux的紅外驅(qū)動程序。LIRC (Linux Infrared Remoter Control),即是Linux下的專門控制處理紅外遙控信號的程序,包含了各種接口的紅外驅(qū)動、多個應(yīng)用程序及LIRC庫。這里討論的主要是其中應(yīng)用于家電遙控器對PC機(jī)的控制方面。
紅外信號的來源可以是串口、并口、IRDA、ETHERNET等。LIRC下串口紅外的驅(qū)動叫做lirc_serial,它默認(rèn)是檢測串口的DCD信號線,然后測量各種時(shí)間參數(shù),并傳遞到上層的應(yīng)用程序。同時(shí)LIRC自帶了許多應(yīng)用工具,例如xmode2用X11的圖形接口畫出DCD上的矩形脈沖,irexec可以將遙控器按鍵對應(yīng)為命令行上的某一條命令,irrecord獲得新的配置文件lircd.conf等。
l 安裝lirc驅(qū)動
$ cd ~/
$ mkdir lirc
$ cd lirc
$ sudo apt-get source lirc #下載 lirc-0.7.1pre2
$ cd lirc-0.7.1pre2
$ sudo ./setup.sh
然后根據(jù)相應(yīng)的遙控器選擇,這里選擇other serial port device 中的 serial,irq 和 io 地址要根據(jù)你的實(shí)際情況配置,這里使用的是默認(rèn)值。這一步也很重要,否則將無法正常使用。選擇完畢后選擇保存并配置,然后會運(yùn)行configure,之后再執(zhí)行:
$ sudo make ; make install
安裝完畢后會編譯內(nèi)核模塊并安裝到 /lib/modules/2.6.8.1-epia1/misc 下。根據(jù)不同的硬件,模塊會有所不同。這里是 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),設(shè)備節(jié)點(diǎn)的位置會發(fā)生改變,可用 mode2 -d /dev/lirc0測試。)用遙控器按下,看屏幕有無反應(yīng)。如:
space 1471423
pulse 3149
space 2905
pulse 687
space 1334
pulse 686
這就表示安裝正確了。
l 配置遙控器
因?yàn)檫@里使用的不是名牌遙控器(可到 http://www.lirc.org/ 下載別人已經(jīng)做好的配置文件),就要使用 irrecord 命令生成。
$ sudo irrecord new.conf #此時(shí)lircd不能運(yùn)行
按照提示一步步完成。這里要注意,按鍵時(shí)間不要太短也不要太長,按照提示上的說法是每次按鍵要顯示1~10個點(diǎn)。即使這樣,最后使用得到的配置也可能有的鍵能用有的鍵不能用,這時(shí)一個取巧的做法是,尋找規(guī)律看什么樣的情況下鍵是能用的,重復(fù)配置多次,將每次能用的鍵抽出來組成一個配置文件。
$ sudo cp new.conf /etc/lircd.conf #將生成的文件拷到/etc下,重命名為lircd.conf
$ sudo lircd #如果設(shè)備節(jié)點(diǎn)位置改變,則需要添加-d /dev/lirc0參數(shù)
運(yùn)行 irw 測試配置文件是否正確,按鍵是否找到。
$ sudo irw
如按下power鍵,屏幕上顯示:
0000000000000001 00 power new.conf
如果每個鍵顯示的信息與配置文件中一致,則配置成功。
接下來將lirc_serial irq=3 io=0x2f8寫到/etc/modules中
l 配置.lircrc文件
.lircrc為lirc的應(yīng)用程序配置文件,典型字段配置如下:
begin
prog = lirckeyd
remote = new.conf
button = power
repeat = 0
config = power
end
其中:
begin~end表示一個獨(dú)立的配置塊。
prog域的值表示使用該配置塊的程序名稱。
remote的值表示使用的遙控器名稱(參見lircd.conf中的定義)。
button 的值表示遙控器按鍵名稱(參見lircd.conf中的定義)。
repeat 的值表示按鍵的重復(fù)次數(shù)。
config 的值表示該按鍵對應(yīng)的字符串,該字符串可以被prog定義的應(yīng)用程序獲得。
需要注意的一點(diǎn)是remote的值一定要和lircd.conf中的name值一致,比如上面irrecord 生成的配置中name為new.conf,則這里的remote值也要為new.conf。
l 將遙控器按鍵映射為x事件
接下來就需要將遙控器的按鍵與我們期望的操作對應(yīng)起來。這時(shí)需要根據(jù)LIRC庫提供的接口編寫一定的映射程序。具體的實(shí)現(xiàn)過程將在其它文章討論。