Me gusta la distribución del teclado en Mac: Cmd (Ctrl) bajo el pulgar y la capacidad, sin chamanismo, de cambiar el comportamiento de CapsLock directamente en la configuración. El mismo resultado se logra fácilmente en Linux usando setxkbmapla consola o, por ejemplo, gnome-tweak-toolen la interfaz de usuario. Pero, ¿y si el teclado se conecta a Android?

En Android, hay varias formas de personalizar un teclado externo:
- Instalar un teclado de terceros. Por ejemplo, Ayudante de teclado externo .
 - / kl kcm ( root). , , .
 - , .
 
. — . .
.
Key Layout
Key layout (.kl) (Linux Key Code), .. , , (Android  Key), .. TAB, ENTER F. - . , , , , Gamepad Tester.
Key Character Map
Key Character Map (.kcm) , , English(US).
4.1 Android . Settings -> Language & input -> Physical keyboard. , , " ".
:
- Esc CapsLock.
 - Ctrl/Win/Alt Win/Alt/Ctrl Alt/PrintScreen/Ctrl Ctrl/Alt/Ctrl .
 - Alt+Tab Ctrl+Tab.
 - Ctrl+Shift+3.
 - Win+Space.
 - .
 
.. ( Ctrl CapsLock, Vim?), " ", apk-. custom-keyboard-layout — Android.
git clone git@github.com:ris58h/custom-keyboard-layout.git
app/src/main/AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ris58h.custom_keyboard_layout">
    <application android:label="@string/app_name">
        <receiver
            android:name=".InputDeviceReceiver"
            android:label="@string/keyboard_layouts_label">
            <intent-filter>
                <action android:name="android.hardware.input.action.QUERY_KEYBOARD_LAYOUTS" />
            </intent-filter>
            <meta-data
                android:name="android.hardware.input.metadata.KEYBOARD_LAYOUTS"
                android:resource="@xml/keyboard_layouts" />
        </receiver>
    </application>
</manifest>
reciever. , ( InputDeviceReceiver) — , . reciever , app/src/main/res/xml/keyboard_layouts.xml:
<?xml version="1.0" encoding="utf-8"?>
<keyboard-layouts xmlns:android="http://schemas.android.com/apk/res/android">
    <keyboard-layout
        android:name="keyboard_layout_en_us"
        android:keyboardLayout="@raw/keyboard_layout_en_us"
        android:label="@string/keyboard_layout_en_us_label" />
</keyboard-layouts>
— keyboard_layout_en_us.
app/src/main/res/raw/keyboard_layout_en_us.kcm , :
type OVERLAY
, , - Generic.kcm. .. — .
Key Layout . kcm-, , , Ctrl Alt kl-. : map kl- kcm-.
keyboard_layout_en_us.kcm :
type OVERLAY
map key 58  ESCAPE
map key 29  META_LEFT
map key 56  CTRL_LEFT
map key 125 ALT_LEFT
map key 99  ALT_RIGHT
map key 100 CTRL_RIGHT
key TAB {
    label:                              '\t'
    base:                               '\t'
    ctrl:                               fallback APP_SWITCH
}
key 3 {
    label:                              '3'
    base:                               '3'
    shift:                              '#'
    ctrl+shift:                         fallback SYSRQ
}
, Win+Space — .
, English(US), kcm- , . . keyboard_layout_russian.kcm, app/src/main/res/raw/ , , app/src/main/res/xml/keyboard_layouts.xml:
<?xml version="1.0" encoding="utf-8"?>
<keyboard-layouts xmlns:android="http://schemas.android.com/apk/res/android">
    <keyboard-layout
        android:name="keyboard_layout_en_us"
        android:keyboardLayout="@raw/keyboard_layout_en_us"
        android:label="@string/keyboard_layout_en_us_label" />
    <keyboard-layout
        android:name="keyboard_layout_ru"
        android:keyboardLayout="@raw/keyboard_layout_ru"
        android:label="@string/keyboard_layout_ru_label" />
</keyboard-layouts>
keyboard_layout_ru_label app/src/main/res/values/strings.xml.
, , . '3', , :
key 3 {
    label:                              '3'
    base:                               '3'
    shift:                              '\u2116'
    ralt:                               '#'
    ctrl+shift:                         fallback SYSRQ
}
Vendor_17ef_Product_6048.
Recopilamos e instalamos nuestra aplicación. La forma más fácil de hacerlo es con Android Studio siguiendo la documentación oficial .
Si todo se hace correctamente, entonces Settings -> Language & input -> Physical keyboardaparecerán nuestros diseños, y en la lista de aplicaciones - Custom Keyboard Layout.
Conclusión
Es posible personalizar un teclado externo sin root. No se pueden lograr todas las listas de deseos al mismo tiempo: cambiar idiomas en Win + Space no funcionó, pero esto puede ser un problema de firmware.
El artículo se hace breve a propósito: todos los detalles se pueden encontrar en los enlaces.