I made the french layout for the standard HP Touchpad bluetooth keyboard, every key should work as expected.
I also added uppercase accentuated letters to ctrl key (ctr+éèà).
Tested in Cyanogenmod 9 alpha 2.
To install, simply overwrite the content of "Generic.kcm" located in /system/usr/keychars with the data I put at the end of this post (sry, I haven't found how to attach a file
If you get a 'read-only' error while trying to modify the file, then you will have to remount /system in read/write mode:
In a terminal in su mode:
mount -o remount,rw /system
I also had a problem with android market: it was working but doesn't want to download anything (download runs endlessly), I fixed that by simply chmod'ing /system/bin/drmserver
In su mode:
chmod ugo+rx /system/bin/drmserver
C.
File: /system/usr/keychars/Generic.kcm
# Copyright (C) 2010 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Generic key character map for full alphabetic US English PC style external keyboards.
#
# This file is intentionally very generic and is intended to support a broad rang of keyboards.
# Do not edit the generic key character map to support a specific keyboard; instead, create
# a new key character map file with the required keyboard configuration.
#
type FULL
### Basic QWERTY keys ###
key A {
label: 'Q'
base: 'q'
shift, capslock: 'Q'
ctrl, alt, meta: none
}
key B {
label: 'B'
base: 'b'
shift, capslock: 'B'
ctrl, alt, meta: none
}
key C {
label: 'C'
base: 'c'
shift, capslock: 'C'
alt: '\u00e7'
shift+alt: '\u00c7'
ctrl, meta: none
}
key D {
label: 'D'
base: 'd'
shift, capslock: 'D'
ctrl, alt, meta: none
}
key E {
label: 'E'
base: 'e'
shift, capslock: 'E'
alt: '\u20ac'
ctrl, meta: none
}
key F {
label: 'F'
base: 'f'
shift, capslock: 'F'
ctrl, alt, meta: none
}
key G {
label: 'G'
base: 'g'
shift, capslock: 'G'
ctrl, alt, meta: none
}
key H {
label: 'H'
base: 'h'
shift, capslock: 'H'
ctrl, alt, meta: none
}
key I {
label: 'I'
base: 'i'
shift, capslock: 'I'
alt: '\u0302'
ctrl, meta: none
}
key J {
label: 'J'
base: 'j'
shift, capslock: 'J'
ctrl, alt, meta: none
}
key K {
label: 'K'
base: 'k'
shift, capslock: 'K'
ctrl, alt, meta: none
}
key L {
label: 'L'
base: 'l'
shift, capslock: 'L'
ctrl, alt, meta: none
}
key M {
label: ','
base: ','
shift, capslock: '?'
ctrl, alt, meta: none
}
key N {
label: 'N'
base: 'n'
shift, capslock: 'N'
alt: '\u0303'
ctrl, meta: none
}
key O {
label: 'O'
base: 'o'
shift, capslock: 'O'
ctrl, alt, meta: none
}
key P {
label: 'P'
base: 'p'
shift, capslock: 'P'
ctrl, alt, meta: none
}
key Q {
label: 'A'
base: 'a'
shift, capslock: 'A'
ctrl, alt, meta: none
}
key R {
label: 'R'
base: 'r'
shift, capslock: 'R'
ctrl, alt, meta: none
}
key S {
label: 'S'
base: 's'
shift, capslock: 'S'
alt: '\u00df'
ctrl, meta: none
}
key T {
label: 'T'
base: 't'
shift, capslock: 'T'
ctrl, alt, meta: none
}
key U {
label: 'U'
base: 'u'
shift, capslock: 'U'
alt: '\u0308'
ctrl, meta: none
}
key V {
label: 'V'
base: 'v'
shift, capslock: 'V'
ctrl, alt, meta: none
}
key W {
label: 'Z'
base: 'z'
shift, capslock: 'Z'
ctrl, alt, meta: none
}
key X {
label: 'X'
base: 'x'
shift, capslock: 'X'
ctrl, alt, meta: none
}
key Y {
label: 'Y'
base: 'y'
shift, capslock: 'Y'
ctrl, alt, meta: none
}
key Z {
label: 'W'
base: 'w'
shift, capslock: 'W'
ctrl, alt, meta: none
}
key 0 {
label, number: '\u00e0'
base: '\u00e0'
shift, capslock: '0'
alt: '\u0040'
ctrl, meta: '\u00c0'
}
key 1 {
label, number: '\u0026'
base: '\u0026'
shift, capslock: '1'
ctrl, meta: none
}
key 2 {
label, number: '\u00e9'
base: '\u00e9'
shift, capslock: '2'
alt: '\u007e'
ctrl, meta: '\u00c9'
}
key 3 {
label, number: '"'
base: '"'
shift, capslock: '3'
alt: '\u0023'
ctrl, meta: none
}
key 4 {
label, number: '\u0027'
base: '\u0027'
shift, capslock: '4'
alt: '\u007b'
ctrl, meta: none
}
key 5 {
label, number: '\u0028'
base: '\u0028'
shift, capslock: '5'
alt: '\u005b'
ctrl, meta: none
}
key 6 {
label, number: '\u002d'
base: '\u002d'
shift, capslock: '6'
alt: '\u007c'
ctrl, meta: none
}
key 7 {
label, number: '\u00e8'
base: '\u00e8'
shift, capslock: '7'
alt: '\u0060'
ctrl, meta: '\u00c8'
}
key 8 {
label, number: '_'
base: '_'
shift, capslock: '8'
alt: '\\'
ctrl, meta: none
}
key 9 {
label, number: '\u00e7'
base: '\u00e7'
shift, capslock: '9'
alt: '\u005e'
ctrl, meta: '\u00c7'
}
key SPACE {
label: ' '
base: ' '
ctrl: none
alt, meta: fallback SEARCH
}
key ENTER {
label: '\n'
base: '\n'
ctrl, alt, meta: none
}
key TAB {
label: '\t'
base: '\t'
ctrl, alt, meta: none
}
key COMMA {
label, number: ';'
base: ';'
shift: '.'
ctrl, alt, meta: none
}
key PERIOD {
label, number: ':'
base: ':'
shift: '/'
ctrl, alt, meta: '<'
}
key SLASH {
label, number: '!'
base: '!'
shift: '\u00a7'
ctrl, alt, meta: '>'
}
key GRAVE {
label, number: '\u00b2'
base: '\u00b2'
shift: '~'
alt: '\u0300'
alt+shift: '\u0303'
ctrl, meta: none
}
key MINUS {
label, number: ')'
base: ')'
shift: '\u00b0'
ctrl, alt, meta: ']'
}
key EQUALS {
label, number: '='
base: '='
shift: '+'
ctrl, alt, meta: '}'
}
key LEFT_BRACKET {
label, number: '\u0302'
base: '\u0302'
shift: '\u0308'
ctrl, alt, meta: none
}
key RIGHT_BRACKET {
label, number: '$'
base: '$'
shift: '\u00a3'
ctrl, alt, meta: '\u00a4'
}
key BACKSLASH {
label, number: '*'
base: '*'
shift: '\u00b5'
ctrl, alt, meta: none
}
key SEMICOLON {
label, number: 'm'
base: 'm'
shift: 'M'
ctrl, alt, meta: none
}
key APOSTROPHE {
label, number: '\u00f9'
base: '\u00f9'
shift: '%'
ctrl, alt, meta: none
}
### Numeric keypad ###
key NUMPAD_0 {
label, number: '0'
base: fallback INSERT
numlock: '0'
ctrl, alt, meta: none
}
key NUMPAD_1 {
label, number: '1'
base: fallback MOVE_END
numlock: '1'
ctrl, alt, meta: none
}
key NUMPAD_2 {
label, number: '2'
base: fallback DPAD_DOWN
numlock: '2'
ctrl, alt, meta: none
}
key NUMPAD_3 {
label, number: '3'
base: fallback PAGE_DOWN
numlock: '3'
ctrl, alt, meta: none
}
key NUMPAD_4 {
label, number: '4'
base: fallback DPAD_LEFT
numlock: '4'
ctrl, alt, meta: none
}
key NUMPAD_5 {
label, number: '5'
base: fallback DPAD_CENTER
numlock: '5'
ctrl, alt, meta: none
}
key NUMPAD_6 {
label, number: '6'
base: fallback DPAD_RIGHT
numlock: '6'
ctrl, alt, meta: none
}
key NUMPAD_7 {
label, number: '7'
base: fallback MOVE_HOME
numlock: '7'
ctrl, alt, meta: none
}
key NUMPAD_8 {
label, number: '8'
base: fallback DPAD_UP
numlock: '8'
ctrl, alt, meta: none
}
key NUMPAD_9 {
label, number: '9'
base: fallback PAGE_UP
numlock: '9'
ctrl, alt, meta: none
}
key NUMPAD_LEFT_PAREN {
label, number: '('
base: '('
ctrl, alt, meta: none
}
key NUMPAD_RIGHT_PAREN {
label, number: ')'
base: ')'
ctrl, alt, meta: none
}
key NUMPAD_DIVIDE {
label, number: '/'
base: '/'
ctrl, alt, meta: none
}
key NUMPAD_MULTIPLY {
label, number: '*'
base: '*'
ctrl, alt, meta: none
}
key NUMPAD_SUBTRACT {
label, number: '-'
base: '-'
ctrl, alt, meta: none
}
key NUMPAD_ADD {
label, number: '+'
base: '+'
ctrl, alt, meta: none
}
key NUMPAD_DOT {
label, number: '.'
base: fallback FORWARD_DEL
numlock: '.'
ctrl, alt, meta: none
}
key NUMPAD_COMMA {
label, number: ','
base: ','
ctrl, alt, meta: none
}
key NUMPAD_EQUALS {
label, number: '='
base: '='
ctrl, alt, meta: none
}
key NUMPAD_ENTER {
label: '\n'
base: '\n' fallback ENTER
ctrl, alt, meta: none fallback ENTER
}
### Special keys on phones ###
key AT {
label, number: '@'
base: '@'
}
key STAR {
label, number: '*'
base: '*'
}
key POUND {
label, number: '#'
base: '#'
}
key PLUS {
label, number: '+'
base: '+'
}
### Non-printing keys ###
key ESCAPE {
base: fallback BACK
alt, meta: fallback HOME
ctrl: fallback MENU
}
### Gamepad buttons ###
key BUTTON_A {
base: fallback BACK
}
key BUTTON_B {
base: fallback BACK
}
key BUTTON_C {
base: fallback BACK
}
key BUTTON_X {
base: fallback DPAD_CENTER
}
key BUTTON_Y {
base: fallback DPAD_CENTER
}
key BUTTON_Z {
base: fallback DPAD_CENTER
}
key BUTTON_L1 {
base: none
}
key BUTTON_R1 {
base: none
}
key BUTTON_L2 {
base: none
}
key BUTTON_R2 {
base: none
}
key BUTTON_THUMBL {
base: fallback DPAD_CENTER
}
key BUTTON_THUMBR {
base: fallback DPAD_CENTER
}
key BUTTON_START {
base: fallback HOME
}
key BUTTON_SELECT {
base: fallback MENU
}
key BUTTON_MODE {
base: fallback MENU
}
key BUTTON_1 {
base: fallback DPAD_CENTER
}
key BUTTON_2 {
base: fallback DPAD_CENTER
}
key BUTTON_3 {
base: fallback DPAD_CENTER
}
key BUTTON_4 {
base: fallback DPAD_CENTER
}
key BUTTON_5 {
base: fallback DPAD_CENTER
}
key BUTTON_6 {
base: fallback DPAD_CENTER
}
key BUTTON_7 {
base: fallback DPAD_CENTER
}
key BUTTON_8 {
base: fallback DPAD_CENTER
}
key BUTTON_9 {
base: fallback DPAD_CENTER
}
key BUTTON_10 {
base: fallback DPAD_CENTER
}
key BUTTON_11 {
base: fallback DPAD_CENTER
}
key BUTTON_12 {
base: fallback DPAD_CENTER
}
key BUTTON_13 {
base: fallback DPAD_CENTER
}
key BUTTON_14 {
base: fallback DPAD_CENTER
}
key BUTTON_15 {
base: fallback DPAD_CENTER
}
key BUTTON_16 {
base: fallback DPAD_CENTER
}












