본문 바로가기

모바일 디바이스/안드로이드 활용팁

블루투스 리모컨 버튼 키매핑(루팅) - 게임패드, 이북용

루팅된 안드로이드에서 리모컨이나 조이스틱 버튼 키매핑을 하고 싶을때가 있습니다.
여러 키매핑 어플들이 있으나 입력장치를 매핑어플용으로 변경해야 해서 불편할때가 많습니다.
한글 입력이 안되거나 스크린 키보드가 안뜨거나 뭐 그렇죠.

 

셋팅하기는 어렵지만 사용하기 가장 편리한 방법은 직접 장치별 keylayout 파일을 수정하는 방법이 있습니다.
장치별로 매핑을 해놓으면 다른데 영향을 전혀 안주거든요.

 

루팅이 되어있어야 합니다.
루팅이 안되있을 경우 아래 글 참조해주세요.

2020/08/30 - [분류 전체보기] - 블루투스 리모컨 버튼 키매핑 - 게임, 이북용

 


준비물

루팅된 안드로이드폰/타블렛
ADB 와 드라이버가 설치된 PC
(2020/08/22 - [모바일 디바이스/루팅 및 커스텀 펌웨어] - 루팅과 펌웨어 업데이트를 위한 ADB / fastboot 설치와 사용)
PC와 연결할 데이터 케이블

 

키 리맵

keylayout 파일 수정 (.kl file)

안드로이드 장치의 keylayout 파일은 아래와 같은 순서로 참조됩니다.
파일들은 소유 권한이 660 (rw,r,r) 입니다. 새 파일을 만들고 chmod 660 을 잊지 마세요.

/odm/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
/vendor/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
/system/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
/data/system/devices/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
/odm/usr/keylayout/Vendor_XXXX_Product_XXXX.kl
/vendor/usr/keylayout/Vendor_XXXX_Product_XXXX.kl
/system/usr/keylayout/Vendor_XXXX_Product_XXXX.kl
/data/system/devices/keylayout/Vendor_XXXX_Product_XXXX.kl
/odm/usr/keylayout/DEVICE_NAME.kl
/vendor/usr/keylayout/DEVICE_NAME.kl
/system/usr/keylayout/DEVICE_NAME.kl
/data/system/devices/keylayout/DEVICE_NAME.kl
/odm/usr/keylayout/Generic.kl
/vendor/usr/keylayout/Generic.kl
/system/usr/keylayout/Generic.kl
/data/system/devices/keylayout/Generic.kl

공식 문서 설명은 아래와 같습니다.
Source: https://source.android.com/devices/input/key-layout-files.html

 

연결된 장치 이름 찾기

먼저 키맵을 수정하고 싶은 특정 device 의 vendor 와 product 이름을 찾아야 합니다.
pc 와 안드로이드를 연결 후 adb 명령으로 접속 후 (블루투스 페어링 후)연결된 device를 확인합니다.
윈도우에서는 cmd 를 실행한 후 아래 명령어를 순서대로 입력합니다.

adb shell
su
cat /proc/bus/input/devices

저는 아래와 같은 장치를 찾았고 매핑할 예정입니다.

cat /proc/bus/input/devices

I: Bus=0005 Vendor=05ac Product=3232 Version=0001  
N: Name="Gamepad"  
P: Phys=  
S: Sysfs=/devices/virtual/misc/uhid/0005:05AC:3232.0005/input/input11  
U: Uniq=D1:88:05:05:55:55  
H: Handlers=mouse0 event7 cpufreq  
B: PROP=0  
B: EV=10001f  
B: KEY=3f0003007f 0 0 483ffff17aff32d bf54444600000000 6fdb0000001f0001 130f938b17c007 ffff7bfad9415fff febeffdfffefffff fffffffffffffffe  
B: REL=143  
B: ABS=100030627  
B: MSC=10

기억해야 할건 vendor 05ac 와 product 3232 입니다.

 

key code 구조

kl 파일 안에 key code 는 아래와 같은 구조입니다.

KEYCODE_APP_SWITCH = APP_SWITCH

사용 가능한 키 코드 리스트는 공식 문서에서 확인 가능합니다.
http://developer.android.com/reference/android/view/KeyEvent.html

 

 

key code 스캔

앱스토어에서 "Gamepad test" 를 설치 후 실행합니다.
Gamepad test를 선택하고 들어간 후 사용하고 싶은 button 을 눌르면 scancode 에 키코드가 나타납니다.
이 키코드를 .kl 파일에 서 매핑 하면 됩니다.
제 경우는 아래와 같군요.

 

 

 

 

 

.kl 파일 수정

adb shell 로 접속해서 수정해도 되고
root 접근권한 있는 앱에서 수정해도 됩니다.

 

아래 폴더에서 아까 기억해놓은 vendor 와 product 파일이 있는지 확인합니다.

/odm/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl  
/vendor/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl  
/system/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
...
...

있을경우 사본을 복사해놓고 수정하면 됩니다.

저는 없어서 general.kl 을 복사해서 하나 만들었습니다.


/system/usr/keylayout/Vendor_05ac_Product_3232.kl

이 파일을 열어서 필요한 키를 다시 매핑해줍니다.


파일 수정 방법은 fx파일브라우저나 cx브라우저 같은 루트 접근 가능한 브라우저로 들어가서
rw 로 시스템 remount 후 해당 파일을 열어서 수정하면 됩니다.


저는 adb 로 shell 연결 후 nano 로 수정했는데요. adb 연결 후 nano 사용법은 아래 글 참조하면 됩니다.

2020/08/13 - [서버와 홈디바이스/NAS, VPN, 클라우드] - Android ADB 연결 후 vi / nano 에디터 사용

저는 Button A, B, X, Y 를 각각 Volume down / up 으로 매핑했습니다. (이북을 보기 위해서)


/system/usr/keylayout/Vendor_05ac_Product_3232.kl

key 308   VOLUME_DOWN  
key 305   VOLUME_DOWN

key 304   VOLUME_UP  
key 307   VOLUME_UP

 

이제 키보드/게임패드 연결을 끊고 다시 연결하면 반영이 됩니다.
즐겁게 사용하면 됩니다.