루팅된 안드로이드에서 리모컨이나 조이스틱 버튼 키매핑을 하고 싶을때가 있습니다.
여러 키매핑 어플들이 있으나 입력장치를 매핑어플용으로 변경해야 해서 불편할때가 많습니다.
한글 입력이 안되거나 스크린 키보드가 안뜨거나 뭐 그렇죠.
셋팅하기는 어렵지만 사용하기 가장 편리한 방법은 직접 장치별 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
이제 키보드/게임패드 연결을 끊고 다시 연결하면 반영이 됩니다.
즐겁게 사용하면 됩니다.
'모바일 디바이스 > 안드로이드 활용팁' 카테고리의 다른 글
스크린 키보드와 하드웨어 키보드 동시 사용 방법 - 안드로이드 (0) | 2020.08.30 |
---|---|
블루투스 리모컨 버튼 키매핑 - 게임패드, 이북용 (0) | 2020.08.30 |