CEC(Consumer Electronics Control)를 이용하면 TV와 IP TV 셋탑박스처럼 HDMI 케이블을 이용하여 연결된 장치에서 서로 간단한 통신이 가능하다.
대표적인 예가 리모컨이다. TV의 리모컨으로 셋탑박스를 조작할 수 있고, 반대도 가능하다. 이전 포스트에 올렸던 것처럼 kodi 전용 리모컨이 있는 것도 좋겠지만, 아무래도 TV 리모컨으로 kodi까지 조작하는게 훨씬 깔끔하고 편할 것이다.
nuc에서 CEC를 사용하는 방법은 대략 3가지 정도인 거 같다.
1. BIOS의 CEC 설정 - 불편
대부분의 PC나 그래픽카드는 CEC를 지원하지 않는 데 반해, nuc은 지원을 한다. BIOS에서 CEC를 on/off할 수 있는데, 함정은 "연결된 기기와 함께 전원 켜기/끄기 기능(전원동기화)"밖에 지원을 하지 않는다는 거. 그리고 TV와 IP TV 셋탑박스처럼 거의 항상 같이 켜지고 꺼지는 경우가 아니라면, 전원동기화 기능이 실제로는 불편할 때가 있다는 거.
이 때문에 게임콘솔과 같이 BIOS에 CEC를 끄는 기능이 없는 경우에는 HDMI 13번 핀을 막아 CEC 신호를 차단하는 방법으로 전원동기화를 꺼버리는 경우도 있는 것 같다.
내 경우에도 전원 동기화 기능이 불편하다. 아무래도 PC는 TV나 IP TV 셋탑박스처럼 금방 켜지고 꺼지는 것이 아니라 부팅되는데 시간이 좀 걸릴 뿐 아니라, nuc에 kodi 외에도 서버 프로그램이 몇개 상시 돌아가고 있어 오히려 전원이 동기화되지 않는 편이 좋다. 전원 신호 대신 화살표 버튼이나 재생/중지 버튼과 같이 kodi에서 사용해야 하는 신호가 CEC로 전달되어야 한다. 그래서 nuc BIOS의 CEC는 패스!
2. Pulse-Eight의 nuc internal adapter 사용 - 실패
nuc에는 BIOS의 CEC 활성화 외에 CEC를 사용할 수 있는 방법이 하나 더 있다. nuc 내부에 있는 CEC 내부 커넥터(header)를 이용하는 것이다. 다만 이 커넥터는 외부에 노출되어 있지 않기 때문에 사용하기 위해서는 커버를 열어야 한다. 그리고 이 내부 커넥터와 BIOS의 CEC 중 한 가지만(mutually exclusive) 쓸 수 있다. 다시 말해 내부단자를 쓰려면 BIOS의 CEC기능을 꺼야 한다는 뜻이다. 커넥터의 위치와 각 핀의 용도는 intel의 nuc 기술제품 사양서(Technical Product Specication Document)에서 확인할 수 있다.
내부 커넥터로부터 CEC 정보를 받아와서 해독(decode)하고 입력신호(이벤트)로 변환하는 기능은 libCEC라는 소프트웨어가 담당한다. libCEC는 Pulse-Eight이라는 영국 기업이 만든 라이브러리인데, CEC 관련해서는 현재 사실상 표준인 것 같다. 대부분의 TV 메이커에서 사용하는 CEC는 이름 뿐 아니라(LG: SimpLink, Samsung: Anynet+ 등등) 구현하고 있는 기능이 조금씩 다른데, libcec는 거의 모든 TV 메이커를 모두 지원하는데다가 Linux와, Window, Raspberry Pi 모두에서 사용가능하다.
그리고 Pulse-Eight에서는 nuc의 내부 CEC 커넥터에서 정보를 읽어와 usb 입력신호로 변환/처리해주는 어댑터를 판매하고 있다. Pulse-Eight의 홈페이지를 보면, intel이 nuc 11세대부터는 내부 CEC커넥터를 제거해 버려서 이 어댑터는 nuc 10세대 까지만 쓸수 있다고 안내하고 있다. 가격은 USD $30.98 인데 UPS 국제배송비가 $41.39로 배보다 배꼽이 더 크다. 대신 배송은 매우 빨라서 주문일로부터 약 5~6일 내에 받아 볼 수 있었다.
1) 1차 시도
택배를 받자마자 기대에 차서 어댑터를 내 nuc10에 장착했지만... 결과는 실망이였다. nuc10과 Linux에서 이 장치가 아예 인식되지 않았다. 혹시나 해서 nuc7에서도, Windows에서도 테스트를 해봤지만 결과는 마찬가지였다. 장치 자체가 인식이 안되니 TV와 연결 테스트도 당연히 아무 의미 없는 . ㅠㅠ
2) 2차 시도
그래서 어댑터와 커넥터의 연결을 다시 확인하다가 intel의 기술제품사양서와 Pulse-Eight의 가이드 문서의 정보와 다르게 연결이 된 것을 알게 되었다. 아래는 확인 결과를 그림으로 그려본 것인데, 어댑터의 CEC 신호 핀이 CEC 커넥터의 5V 상시전원 핀과 연결이 되어 있거나, 어댑터의 USB D+ 핀이 USB 커넥터의 5V 전원 핀과 연결이 되어 있는 등 조금(?) 이상하다.
그래서 과감하게 중간에 선을 잘라 nuc 기술제품사양서와 어댑터 가이드 문서에 맞게 다시 연결을 해 보았다. 결과는... 역시 실패. 인식이 되지 않는다. 재배선한 것도 틀린 것인지, 아니면 1차 시도에서 잘못된 연결로 어댑터의 MCU나 부품이 손상이 된 것인지 알 수 없다. 새 제품을 다시 주문해 볼까 하다가, 결국 포기하고 외장 HDMI-CEC adapter를 주문.
3. Pulse-Eight의 외장 HDMI-CEC adapter 사용 - 성공
외장 HDMI-CEC 어댑터는 외부 HDMI 포트와 usb 포트만 있으면 아무 기기에서나 쓸 수 있다. nuc에서 인식하는데도 아무 문제가 없었다. HDMI 케이블과 usb를 꽂자마자 아래 dmesg 출력처럼 커널에서 바로 input 장치로 인식이 되었다. kodi에서도 Settings/System/Input/Peripherals에서 장치를 잘 보여 주었다.
[ 1.508758] usb 1-2: new full-speed USB device number 3 using xhci_hcd
[ 1.641392] usb 1-2: New USB device found, idVendor=2548, idProduct=1002, bcdDevice=10.00
[ 1.641397] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1.641398] usb 1-2: Product: CEC Adapter
[ 1.641399] usb 1-2: Manufacturer: Pulse-Eight
[ 1.641400] usb 1-2: SerialNumber: v12
[ 1.644600] input: Pulse-Eight CEC Adapter as /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.2/0003:2548:1002.0003/input/input7
[ 1.644665] hid-generic 0003:2548:1002.0003: input,hidraw2: USB HID v1.10 Mouse [Pulse-Eight CEC Adapter] on usb-0000:00:14.0-2/input2
문제는 정작 TV에 붙여서 테스트할 때 불거졌다. TV 리모컨 신호가 nuc으로 전달되지 않는 것이다. 한 이틀은 여기 붙어서 이것 저것 세팅을 바꿔가며 테스트를 했지만 도무지 원인을 알 수 없었다. 더구나 어떻게 된 일인지 중간에 딱 한번 정상적으로 작동이 된 적이 있어서, 더 끙끙대며 매달렸던 것 같다.
이것도 포기해야 하나 하고 생각을 할 때쯤 마침내 범인을 찾았는데, 오래된 TV가 문제였다. 2019년에 산 LG TV에서 테스트를 했었는데 아마도 TV의 libcec 버전이 너무 낮았던 것 같다. 올해 산 삼성 TV에서는 아무런 문제없이 잘 작동했다. 얼마나 허탈하던지... 어차피 삼성 TV에 붙여 쓸 것이니 크게 불만은 없다. 비용은 좀 들었지만 어쨌든 해피 엔딩!
kodi로 전달되는 TV 리모컨의 신호는 kodi의 debug log에 다음과 같이 나타난다.
2026-09-01 16:11:51.261 T:3669 debug <general>: PushCecKeypress - received key b duration 0
2026-09-01 16:11:51.280 T:3461 debug <general>: HandleKey: 11 (0xb, obc244) pressed, window 10000, action is Select
2026-09-01 16:11:51.427 T:3669 debug <general>: PushCecKeypress - received key b duration 165
2026-09-01 16:11:59.519 T:3669 debug <general>: PushCecKeypress - received key d8 duration 0
2026-09-01 16:11:59.552 T:3461 debug <general>: HandleKey: menu (0xd8) pressed, window 10502, action is Back
2026-09-01 16:11:59.574 T:3669 debug <general>: PushCecKeypress - received key d8 duration 56
위 로그에서 전달되는 키코드(위의 예에서 'b', 'd8')는 각각 'select'와 'back'의 리모컨 버튼에 해당하는 hex 값으로 다른 버튼들의 코드는 여기에서 확인할 수 있다.



0
Comment:
최근 게시물
