3. 수신에서 해독까지는 kernel이, 변환에서 전달은 lirc가 처리하는 방법
이 방법은 2023년 7월 현재 lirc 패키지의 디폴트 설정이다. 일단 kernel이 IR 신호 수신&해독을 할 수 있도록 설정하고 나면 그 이후 lirc 설정은 허무하리만큼 간단하다.
"1번"의 설정 환경에 lirc 버전 0.10.2를 사용한다.
3-1. kernel이 IR 신호를 수신&해독할 수 있도록 설정
“1번"의 1-1에서 1-5까지의 과정을 수행한다. 1-1 과정에서 확인한 Input device(예: /dev/input/event4)를 메모해 놓는다.
3-2. lirc 설정
lirc 설정 파일인 /etc/lirc/lirc_options.conf를 에디터로 열어 driver와 device를 다음과 같이 수정한다.
driver = devinput device = /dev/input/event4 <== 1-1에서 확인한 Input device
devinput 드라이버는 kernel이 수신&해석한 keycode를 /dev/input/eventN(N은 일련번호)으로부터 읽어오기 위한 lirc 드라이버이다. 그리고 lirc 패키지에는 devinput 드라이버가 읽어온 keycode를 변환하기 위한 devinput.lircd.conf라는 키맵 파일이 포함되어 있다. 따라서 별도로 키맵 파일을 다운로드 받을 필요도 없고, 위와 같이 lirc_options.conf 파일만 수정해 주면 끝이다.
3-3. 테스트
lirc daemon(lircd)을 (재)실행한 후 2번의 2-5 과정에서 했던 것처럼 irw 테스트를 수행한다. 아마 대부분의 경우 문제 없이 비슷한 실행결과를 볼 수 있을 것이다.
나머지 kodi 설정과 lirc 자동 시작 설정은 “2번”의 2-6 ~ 2-7 과정과 동일하다.
번외편: inputlirc
위와 같이 수신에서 해독은 kernel이, 변환에서 전달은 lirc가 처리하도록 설정하다 보면, 커널이 리눅스 keycode로 변환해 놓은 걸 왜 lirc가 다시 변환을 하는지 의문이 든다. 사실 lirc의 디폴트 키맵 파일인 devinput.lircd.conf에서 정의해 놓은 버튼 이름과 코드는 /usr/include/linux/input-event-codes.h에서 정의하고 있는 리눅스의 keycode 정의 내용과 동일하다. lirc가 원래 IR 신호 수신부터 배포까지 전 과정을 모두 처리하는 것으로 만들어졌기 때문에 이렇게 kernel과 역할을 분리하면 작동 구조상 불필요한 중복이 발생되는 것으로 생각된다.
이럴 때 lirc를 대체하여 사용할 수 있는 프로그램이 inputlirc이다. inputlirc는 kernel이 수신&해독&변환(맵핑)을 하는 것을 전제로, 커널이 최종 변환해 놓은 keycode를 읽어와 application들이 읽어갈 수 있는 장소(소켓 파일)로 전달하는 역할만 수행한다. 좀 더 구체적으로 이야기한다면 커널이 IR 신호를 keycode로 변환해 /dev/input/eventN이라는 파일(character device file)에 써놓으면 inputlirc는 이를 읽어와 /var/run/lirc/lircd라는 파일(socket file)에 그대로 복사해놓는 것이다. 그리고 application들은 이 소켓 파일에서 필요한 입력신호(input event)를 다시 읽어가는 것이고…
이 때문에 inputlirc는 매우 가벼울 뿐 아니라--소스 코드가 600행이 안된다--, 설정도 아주 간단해서 기본적으로 입력 이벤트 장치 파일(eventN)만 지정해 주면 된다. 다른 추가할 만한 옵션이 있다면 IR 신호가 두번 중복해서 처리되지 않도록 eventN 장치를 inputlirc만 읽을 수 있게 하는 -g 옵션과, Ctrl 이나 Shift 같은 modifier 키를 사용할 수 있게 해주는 -c 옵션 정도일 것이다. 다른 옵션들은 man page를 참고한다.
예를 들어 위의 경우에 lirc를 사용하지 않고 inputlirc를 사용한다면, inputlirc의 설정파일(/etc/default/inputlirc)을 다음과 같이 수정한 후 openrc나 systemd와 같은 시작(init) 시스템에서 lircd 대신 inputlircd를 실행되도록 설정하면 된다.
$ cat /etc/default/inputlirc # Options to be passed to inputlirc. EVENTS="/dev/input/event4" OPTIONS="-g -c"
0
Comment:
최근 게시물
