I am aware that there is a thread in the Droid 4 Dev Section but as I am a "New User" I can't post there
^^ And as I am a new user please excuse any mistakes I make in posting/formatting this
I am going to be redoing this guide soon for several reasons.
A few days after I made this thread the root functionality of File Expert became something you have to pay for. I also found a good hex editor which is much clearer then Notepad ++.
There are two parts to this guide, Remapping Physical Keys/Buttons and Alternate Keys(Using the SYM key as an ALT key as on previous Droid versions).
Things to download
File Expert (I use this as my root file explorer, permission editor, etc. it also lets me remount the /system as read write which I couldn't seem to do with adb remount or busybox remount.) You dont NEED this, you should theoretically be able to use terminal/adb shell but I couldn't get it to work so this guide uses it.
KeynrTracker.apk (For Remapping buttons not covered) Attached, From http://forum.xda-developers.com/showthread.php?t=850464 - the actual button remapping tool doesnt work with Droid 4 yet
Notepad++ I would recommend using Notepad++, but any editor that can handle binary/unix files - NORMAL NOTEPAD DOES NOT WORK, NOR DOES WORD
THE PHONE NEEDS TO BE ROOTED FOR THIS TO WORK - MAKE A BACKUP OF THE FILES THAT WE ARE GOING TO EDIT
Remapping Physical Keys
The files in /system/usr/keylayout are the configuration for physical buttons, you can edit all of them, but I would recommend only editing omap-keypad.kl(Physical Keyboard) for the time being, as you could disable the capacitive buttons. IF you do somehow mess up omap-keypad.kl (I didnt have the correct permissions at first) android has a default generic version it defaults on if omap-keypad.kl doesn't work correctly, you can tell it is using this as the Caps Lock key, Shift key, SYM key wont work properly and the Arrow buttons will all be rotated to the right so up = right, right = down etc.
This part of the guide is essentially this older guide for HTC Hero, but with more customization for the Droid 4.
Either download my uploaded copy of the original omap-keypad.kl or get your own from /system/usr/keylayout/omap-keypad.kl
Open omap-keypad.kl in a text editor either on your phone(touchqode is what I use) or on your computer (Notepad++)
For this example I am going to remap the SYM key to an ALT key so it can be used in the next part of this guide.
In your text editor find
Code:
key 162 SYM WAKE_DROPPED
(It should be at the bottom) 162 is the physical scancode, SYM is the action that happens and WAKE_DROPPED tells the OS that if the phone is off pressing key 162 will wake it but it will not send the keypress. We want to make this an alt button so all we do is change SYM to ALT_LEFT (You have it be ALT_RIGHT, I'm not sure theres a difference but I use ALT_LEFT). So it should look like
Code:
key 162 ALT_LEFT WAKE_DROPPED
If you want other keys, for example I remapped the OK key to be a SHIFT_RIGHT key, you need to find the scan code for the key using the attached KeynrTracker.apk
So in this case the scancode is 232, so we go into our omap-keypad.kl file and find key 232
We see that it is mapped to DPAD_CENTER and I want to make it a shift button so I'll change it to SHIFT_RIGHT
Now we need to get our keymap back onto the phone should be as simple as
Code:
adb remount
adb push omap-keypad /system/usr/keylayout
BUT, that did not work for me so I had to use File Expert to remount and copy the file. So transfer the file to the internal phone storage/sdcard, then use File Expert to remount the /system as rw.
Go to /system press the menu button -> More -> Mount -> Mount as Read Write
Then copy the edited file from your sdcard to /system/usr/keylayout it should prompt you that there is a file there called omap-keypad.kl, select overwrite.
Then long hold on the omap-keypad.kl file and select permissions from the menu.
Make sure the permissions look like below, and click apply.
Now reboot your phone and your custom key mappings should work!
Creating Alternate Keys
The biggest issue I have from switching from a OG Droid to the Droid 4 is the fact that you have to press SYM and select your symbol instead of alternate symbols for a key.
So we already set up the SYM key to act as an ALT key in the first part, but now we have to define the keys so they do something when our "ALT" key is pressed, this data is stored in /system/usr/keychars/omap-keypad.kcm.bin, like before you can use my uploaded versions or get your own from that directory. But unlike before these aren't straight forward text files they have been converted to binary, because it is faster for the system to read. So when we open it in Notepad ++ this is what it shows
Because this file is binary/hex the all the nul symbols really = 00 in hex = 0 in binary. If you feel comfortable editing the hex code directly you can convert the document from ASCII to hex in notepad ++ under the plugin menu, and use this to figure out the characters http://www.ascii-code.com/
But for the purpose of the guide we are going to ignore the NUL symbols and change the characters. If it helps you can make a copy and open it in normal notepad because it doesnt show the null characters, BUT YOU CAN NOT USE NOTEPAD TO EDIT IT. So to set a key so it will use an alternate key when ALT(SYM) is pressed you need to find 5th instance of that in the document, so in this case I want to make the "," and "." keys be "<" and ">" when SYM is held down, so I need to change the 5th definition for the , key to < so it should look like this
Code:
NUL,NUL,NUL,NUL;NUL<NUL;NUL
And the same for the "." key
Code:
NUL.NUL.NUL.NUL:NUL>NUL:
From what I understand from poking around on the files from my phone and looking at things on the internet the first two times the character appears is defining what key has what attributes, the 3rd one is the lowercase, 4th is the uppercase, 5th is the ALT and 6th is the ALT+Shift. So with out all the Nulls this is what the Key Character Map for A looks like, A A a A a A and for "," it is , , , ; ; ; but for our edited version it is , , , ; < ; because the 5th spot is the one that represents the character you will get when you do that key + ALT.
Now to get the file back onto your phone do what we did before but put it in /system/usr/keychars/omap-keypad.kcm.bin
Make sure your permissions are the same as the one for the omap-keypad.kl
Restart and you should have a working Alternate Key Character
Awesome, can't wait to try this out. I haven't looked at all of this quite yet, but i am hoping to be able to remap caps lock, the most useless key ever, to something better. Thanks for your work!
Sent from my DROID4 using XDA App
The guide was amazing helpful for binding >< and changing caps lock to be an alt key, but I was wondering if you had any idea which file would have the operations for alt + backspace to make it clear a whole line. Again thanks for the guide.
valhala.awaits said:
I haven't looked at all of this quite yet, but i am hoping to be able to remap caps lock, the most useless key ever, to something better.
Click to expand...
Click to collapse
WHAT THE HECK ARE YOU TALKING ABOUT? CAPS LOCK IS THE BEST KEY ON THE KEYBOARD. THIS IS BLASPHEMY.
(Sorry couldn't resist )
Keyboard maps out pretty well, I did
quote -> backquote
I -> pipe
O P -> { }
K L -> [ ]
/ -> \
, . -> < >
Q -> tilde
Used CAPS LOCK as my alt key.
Left the SYM key entirely alone.
Half tempted to make caps lock and OK shift keys, make sym key the OK key, and make shift key the ALT key.
BTW, ALT+arrows and backspace work as they did on the Droid 1/2/3.
Thanks so much for posting this, really has made the Droid 4 keyboard *SUBSTANTIALLY* better!
kasouti said:
The guide was amazing helpful for binding >< and changing caps lock to be an alt key, but I was wondering if you had any idea which file would have the operations for alt + backspace to make it clear a whole line. Again thanks for the guide.
Click to expand...
Click to collapse
I'm not sure, neither of my phones(OG Droid, Droid 4) have had that functionality so I'm not sure what makes that work. If you want you can send me your keylayout and keychars folders from your old phone(Droid 2/3?)that had that, through a PM and I'll try to figure out how to add that.
kb remap
moah99 thank you thank you thank you. The one key I totally miss from my D1 is the @ key and thanks to you I have remapped the useless caps lock key to @. Caps lock would be useful except I use swiftkey that renders it inoperative on the D4.
After finding the correct key (222) with keynrtracker, I completed the rest using rootexplorer - backed up that file, mounted the containing folder as r/w, opened file in text editor, edited the correct line to show AT instead of CAPS, rebooted phone and it worked perfectly.
Tried this but....
I tried changing the key 222 (Caps lock) to power the phone off and on (when i text people and I'm watching tv i typically just leave the keyboard open and lock the phone, but the power button isn't exactly easy to find) so i wouldn't need to use the power button on top. It didn't work, is there anyway i can get it to work?
Thanks,
Jacob
moah909 said:
I'm not sure, neither of my phones(OG Droid, Droid 4) have had that functionality so I'm not sure what makes that work. If you want you can send me your keylayout and keychars folders from your old phone(Droid 2/3?)that had that, through a PM and I'll try to figure out how to add that.
Click to expand...
Click to collapse
Looks like it does support it. For some reason it was just buggy at first and didn't seem to respond to alt then left. As for the delete, I was coming from an epic and my friend with a droid 2 had told me the alt then delete would wipe the line, apparently alt has to be held when it's hit and within texting you either need 2 blank spaces before pressing it or to have just finished deleting a word. Or some odd rules like that. Thanks for the help.
Hmmm. I'm running into some oddness here, the shifted number keys look right in the kcm.bin file, but they don't work in Connectbot. It looks like they're being treated like ANSI function keys instead. Anyone else know what's up here? I've never owned a Droid-anything before, my previous two phones (G1 and TP2) keyboards work fine in Connectbot.
highlandsun said:
Hmmm. I'm running into some oddness here, the shifted number keys look right in the kcm.bin file, but they don't work in Connectbot. It looks like they're being treated like ANSI function keys instead. Anyone else know what's up here? I've never owned a Droid-anything before, my previous two phones (G1 and TP2) keyboards work fine in Connectbot.
Click to expand...
Click to collapse
See (http ://code.google.com/p/connectbot/issues/detail?id=558) Issue 558 on ConnectBots site.
here is an untouched system/usr/keylayout incase anybody needs it:
http://www.mediafire.com/?mtsl53uus6qkwfz
Help me please
So you definitely seem to understand how this works. Well i tried making my caps lock key a power key because my power key sticks really bad, and all that did was screw up my dpad (like when i would press the left arrow it would go down, etc) and so i asked for a /system/usr/keylayout file which i got and tried pasting it into the usr file to fix all the things i may have screwed up and now nothing works. The capacitive buttons, all of the keyboard and the volume and power doesn't work. What do i have to do?
remap slash key to just question mark
What is the proper designation in Omap-kypad.kl for the question mark? I wanted to convert the slash / key to just the question mark. The D1 has one - I looked at the Omap-kypad.kl on my D1 but couldn't find anything that looked like "quest" or "question", etc. On the other hand I don't see that slash in the symbol set when the SYM key is pressed so maybe I shouldn't change it. Would be nice to know if its possible though.
H0H3N5T3RN said:
So you definitely seem to understand how this works. Well i tried making my caps lock key a power key because my power key sticks really bad, and all that did was screw up my dpad (like when i would press the left arrow it would go down, etc) and so i asked for a /system/usr/keylayout file which i got and tried pasting it into the usr file to fix all the things i may have screwed up and now nothing works. The capacitive buttons, all of the keyboard and the volume and power doesn't work. What do i have to do?
Click to expand...
Click to collapse
You should check the permissions of the files using adb shell/terminal emulator.
Code:
su
cd /system/usr/keylayout
ls -l *
It should look like (with your date of course)
Code:
-rw-r--r-- root root 3383 2012-02-24 23:20 omap-keypad.kl
-rw-r--r-- root root 245 2011-12-28 15:23 AVRCP.kl
-rw-r--r-- root root 75 2011-12-28 15:23 cpcap-key.kl
-rw-r--r-- root root 1834 2011-12-28 15:23 evfwd.kl
-rw-r--r-- root root 3609 2011-12-28 15:23 usb_keyboard_102_en_us.kl
-rw-r--r-- root root 4132 2011-12-28 15:23 qwerty.kl
If it doesn't say -rw-r--r-- that means the correct permissions aren't set, so run:
Code:
chmod 0644 *
and all your buttons should work!
Your original issue was probably the same thing the permissions on the file probably weren't set right which makes it default on a generic keylayout. I did the same thing when I first was remapping my buttons and I couldn't figure out what was wrong for a couple weeks
Although this looks like a very powerful tool for remapping keys, I'm a little overwhelmed. For my previous WM phone, HTC Touch Pro 2, there used to be a very intuitive, easy-to-use remapping tool.
Is there any chance that somebody will develop another key-remapping tool targeted for the technically challenged if I wait this one out?
Can somebody tell me how I can assign "!" to shift+1?
I know. "!" is assigned to shift+1 by default. But with Smart Keyboard Pro, all symbols are messed up so I have to reassign them all individually.
I am a total noob when it comes to coding and I just remapped my search key and made it a second power key! Two minutes, root explorer did the trick.This is my first post on these forums and this is a fantastic thread for noons and pros alike!
P.S. I tried the app first but the layout file is named as QWERTY.kl in CM 7.2 RC 1 so I had to do it manually.I used your helper app to find out what I needed to change!
Cheers to the contributors of knowledge to this thread!!!!!! :beer:
Sent from my LG-P500 using Tapatalk 2 Beta-5
greekchampion04 said:
here is an untouched system/usr/keylayout incase anybody needs it:
http://www.mediafire.com/?mtsl53uus6qkwfz
Click to expand...
Click to collapse
Any way to PM me this file? It is no longer available at that link. Thanks in advance
Remmap a key to no function
Hi, I was wondering how to remmap a HArd Key to do nothing. I can eighter modify the .kl file or use ButtonRemapper, but what should I write in order to dissable this key.
The reason is because the volume down button is broken and keeps pressing itself when the phone heats up.
Thank you!
Change the keyboard layout
Hello,
I use a smartbook HP Compaq Airlife 100 with Android 1.6. This device has a physical keyboard with Spanish layout. I want to change it into a German layout. In /system/usr/keychars I find a German quertz_hawthorne_german.kcm.bin. In /system/usr/keylayout I find a quertz_hawthorne_german.kl.
At which place is the trigger for switching the used keyboard language? In the normal Android menu I can only choose English-uk, English-us and Spanish.
The only thing I have found is in /system/build.prop: ro.product.locale.language=es and ro.product.locale.region=ES
Regards Svgt99
Is there a way to enable soft keys like Nexus or Moto X? I'm not looking for an app that fakes the behavior.
I have a Note 3 4.4.2 Kitkat (NC2).
edit: I found it working well, so I am updating this post.
[Enable soft menu keys]
edit "/system/build.prop", and add at the bottom:
Code:
qemu.hw.mainkeys=0
[Optional] Disable hardwired buttons.
edit "/system/usr/keylayout/Generic.kl", comment out these two lines so it looks like this:
Code:
# key 139 MENU
# key 158 BACK
After using a while, I found it works best if I keep the hardware buttons enabled too. Back key is now on both left and right side so it's easier to reach when using with one hand.
[Optional] Disable 3-dot menu button. When you enable soft-keys, there will be an additional menu shown in every app. This could waste lot of space. You should have Xposed mod installed, then look for Noverflow, and install that.
Noverflow xposed mod.
This doesn't work on Galaxy S5 Port Update 4 ROM, but works well with stock NC2 ROM.
[Optional] Once softmenu keys are added, you have less screen space. The Dialer app doesn't know how to scale, so you would have the bottom row keys chopped off a bit. You can make change the DPI settings so it'll shrink and be able to see everything.
Default screen DPI is 480. I changed it to 450.
Edit file "/system/build.prop", look for the line with "ro.sf.lcd_density=480" and edit so it looks like this:
Code:
ro.sf.lcd_density=450
[Optional] Remove AT&T wifi autoconnect.
I don't know why, but even if I uncheck autoconnect AT&T wifi, it still keeps trying. And you can't really remove the profile either.
Edit "/data/misc/wpa_supplicant.conf"
Look for ssid="attwifi", change that to something like this:
Code:
ssid="attwifi-sucks"
I brought this up in another thread, but haven't found a working solution. Searches have told me that editing the gpio-keys.kl file under system/user/keylayout would allow me to disable the home button waking the phone, but it has had no effect. Before editing, it reads:
KEY 172 HOME WAKE_DROPPED
With the folder mounted r/w, I have tried deleting parts of the line, all of it, and canceling it out with #, but there seems to be no effect upon reboot. Due to the large amount of guides following this method that have shown up in my searches, I wonder if it has to do with a different folder organization due to the 5.0 upgrade that this trick no longer works.
Has anybody here been able to do this successfully?
Thanks.
Hey have you found a solution to this yet? Since I updated to lollipop I cant find any way to do this. I also tried editing the 172 key, but to no avail,,
I've spent several hours looking into this. There's a comment in Generic.kl that says "#input_fw added wake attribute for home." You can completely disable the home key by commenting it out in Generic.kl, but, obviously, that's a poor solution. I'm not a developer, but from what I can tell, it appears that this will need someone competent to edit in system/framework of a rooted phone to modify the interceptKeyBeforeQueueing method in PhoneWindowManager class. Here's two links with some pertinent discussion:
https://source.android.com/devices/input/key-layout-files.html
https://groups.google.com/forum/#!topic/android-platform/FhcVipMFZF4
Anyone competent and willing to take this on?
Swap 'em
I switched keys 172 and 254 keys in both the Generic.kl and gpio-keys.kl files. Now, key 254 (Recent Apps/Menu) takes me to my Home screen but does nothing unless the phone is awake. Key 172 (the protruding Home) activates my settings menu, but again, only when the phone is awake since the MENU action does not carry the wake attribute like the HOME action does. So, change them to: key 172 MENU and key 254 HOME. The Recent Apps can be accessed by swiping from the bottom corner in Android 5.
I'm currently on CM12.1 and one of the best things I love about it is the ability to change the function of the buttons. I've always thought that the Menu button is useless so I changed it to bring up the Recent Apps Switcher. Now that I'm thinking of flashing the official Lollipop update, is there a way to change the funcion of the buttons?
VIPNobie said:
I'm currently on CM12.1 and one of the best things I love about it is the ability to change the function of the buttons. I've always thought that the Menu button is useless so I changed it to bring up the Recent Apps Switcher. Now that I'm thinking of flashing the official Lollipop update, is there a way to change the funcion of the buttons?
Click to expand...
Click to collapse
Do a little research into the gpoi-keys.kl file. It's located in /system/usr/keylayout/ It controls the function of all the buttons on your phone, so by changing the values in this file you can change the function of some of your buttons. Just make sure you back that file up in case you break something.
Devo7v said:
Do a little research into the gpoi-keys.kl file. It's located in /system/usr/keylayout/ It controls the function of all the buttons on your phone, so by changing the values in this file you can change the function of some of your buttons. Just make sure you back that file up in case you break something.
Click to expand...
Click to collapse
Say I successfully changed the button function, will there be a 3-dot menu on all apps automatically? Or will I be unable to access the menu?
VIPNobie said:
Say I successfully changed the button function, will there be a 3-dot menu on all apps automatically? Or will I be unable to access the menu?
Click to expand...
Click to collapse
I honestly don't know, you can try it and find out. If you can't access the menu you can always change you buttons back, that's why you make a backup.
Successfully remapped the Menu Button. I edited two files in /system/usr/keylayout/: generic.kl and gpoi-keys.kl
In generic.kl:
I changed the following lines
Code:
key 139 [B]MENU[/B]
key 217 [B]SEARCH[/B]
to
Code:
key 139 [B]APP_SWITCH[/B]
key 217 [B]MENU[/B]
In gpoi-keys.kl
I changed the following lines
Code:
key 139 [B]MENU[/B]
to
Code:
key 139 [B]APP_SWITCH[/B]
Key 139 is short-press of the Menu Button while 217 is long-press. I didn't want to go into trouble of making the 3-dot menu appear in apps so I decided to reassign the latter from search to menu.
VIPNobie said:
Successfully remapped the Menu Button. I edited two files in /system/usr/keylayout/: generic.kl and gpoi-keys.kl
In generic.kl:
I changed the following lines
Code:
key 139 [B]MENU[/B]
key 217 [B]SEARCH[/B]
to
Code:
key 139 [B]APP_SWITCH[/B]
key 217 [B]MENU[/B]
In gpoi-keys.kl
I changed the following lines
Code:
key 139 [B]MENU[/B]
to
Code:
key 139 [B]APP_SWITCH[/B]
Key 139 is short-press of the Menu Button while 217 is long-press. I didn't want to go into trouble of making the 3-dot menu appear in apps so I decided to reassign the latter from search to menu.
Click to expand...
Click to collapse
I'm glad evening worked out for you. Good job.