ShareKM keyboard-layout workaround

-> English version

UPDATE 3:  Das Warten hat ein Ende! Florian Draschbacher hat vor kurzem seine neue App DeskDock veröffentlicht. Wer USB nutzt sollte sich die mal ansehen:

DeskDock Free: https://play.google.com/store/apps/details?id=com.floriandraschbacher.deskdock.free
DeskDock Pro:   https://play.google.com/store/apps/details?id=com.floriandraschbacher.deskdock.pro

UPDATE 2:
Auf Geräten mit Android 5.x läuft wohl auch die im ersten Update erwähnte angepasste app von ChtuluTheOne nicht mehr. Ein Fix wird im Thread im xda-Forum von Fenny beschrieben.

UPDATE:
ShareKM kann leider seit ende März 2014 nicht mehr problemlos gestartet werden. Der App-Entwickler hat ein Ablaufdatum eingebaut und reagiert nicht.

Mit der Version aus dem XDA-Developers-Forum von ChtuluTheOne funktioniert die Hardware-Keyboard-Option nicht mehr, auf der dieser Workaround basiert, dafür hat er das Ablaufdatum entfernt.

Es gibt nun zwei Möglichkeiten. Beide beruhen darauf, dass das Datum temporär geändert wird:

  • Die xposed-Variante von snapcity (root)
  • Die Tasker-Variante von mir (evtl. auf einigen Geräten ohne root aber eher unwahrscheinlich)

Bei Problemen, dass SKM root nicht erkennt, hat quack3d eine Lösung.

Inhalt
-> Alternative: „External Keyboard Helper“
-> Übrigens (bekannte Fehler)
-> Changelog
-> Download
-> Troubleshooting

Ich benutze sehr gerne die App ShareKM für Android, mit der man höchst komfortabel Maus und Tastatur des PCs mit dem Smartphone teilen kann. Das switchen funktioniert wie bei einem Dual-Desktop – also einfach in dem man mit der Maus an den entsprechenden Bildschirmrand geht – oder per Tastenkombination.
Der einzige Nachteil, der die App allerdings für mich fast unbrauchbar gemacht hat, ist das falsche Key-Mapping zumindest bei meiner Kombination aus Tastatur und Android-Rom (beides Deutsch). Die Sonderzeichen liegen irgendwo, aber nicht da wo sie sollten.
Glücklicherweise lässt sich das ab Android 3.x recht einfach anpassen. Dazu muss lediglich ein angepasstes Key Layout File und eine der gewünschten Sprache entsprechende Key Character Map für die von ShareKM emulierte Hardware-Tastatur erstellt und mit einem Root-Explorer ins richtige Verzeichnis abgelegt werden.

Die Verzeichnisse sind:

/system/usr/keylayout/HID_compliant_kbd.kl  (Layout)
/system/usr/kechars/HID_compliant_kbd.kcm   (Character-Map)

Der Name der Dateien ist wichtig, da er dem Namen der emulierten Tastatur entsprechen muss.

ShareKM Keylayout Einstellung

ShareKM Keyboard-Layout

Das kann man entweder alles „zu Fuß“ machen, oder man flasht einfach die von mir erstellte .zip-Datei übers Recovery, welche die richtigen Dateien gleich an die richtige Stelle kopiert.
Dazu muss natürlich der Bootloader freigeschaltet und ein entsprechendes Custom-Recovery installiert sein (z.B. 4EXT oder Clockworkmod).
Die enthaltene .kcm-Datei ist übrigens von android-hilfe.de und wurde von mir noch weiter angepasst.
Damit ShareKM jetzt diese Files auch benutzt, muss in den Share-KM-Einstellungen die Hardware-Tastatur aktiviert sein (das geht – soweit ich weiß – nur mit wenn das Gerät gerootet ist!).
(Ist ShareKM verbunden, sollte nun in den Android-Einstellungen unter Sprache & Eingabe der Eintrag „HID compliant kbd“ auftauchen (siehe Bild).
UPDATE: Scheinbar erscheint dieser Eintrag nicht immer (z.B. beim Galaxy-S4 mit stock-rom). Funktionieren sollte es trotzdem.)

Andere Sprache?

Wer eine andere Sprache benötigt, muss lediglich die Key-Character-Map ändern und jeder Taste das entsprechende Zeichen zuordnen.
Dazu einfach die HID_compliant_kbd.kcm aus dem /system/usr/keachars/-Ordner meiner .zip-Datei mit einem anständigen Text-Editor bearbeiten (z.B. Notepad++ – kein MS-Word/OpenOffice/Wordpad!!), und z.B. per adb ans Smartphone ins richtige Verzeichnis pushen.
Die Dateirechte müssen auf rw-r–r– (644) stehen.
Um wieder ein flashbares .zip zu erstellen, einfach meine .zip nehmen und die enthaltene kcm-Datei überschreiben.
Dafür immer nur per drag&drop arbeiten und niemals das .zip-file komplett entpacken!

Alternative: „External Keyboard Helper“
Als Alternative zu der oben beschriebenen Methode, kann man das ganze auch mit der App External Keyboard Helper lösen.
Die kostet in der Pro -Version allerdings etwas.
Auch bei dieser Lösung braucht man root, da auch hier in ShareKM die Hardware-Keyboard Option aktiv sein muss.
Außerdem müssen die mitgebrachten Layouts der App angepasst werden.
Das liegt daran, dass ShareKM bei manchen Tasten die falschen Scancodes sendet. Das ließe sich aber nur durch den Entwickler von ShareKM beheben, der leider auf meine Anfragen nie geantwortet hat.

Vielen Dank für diesen Tipp an Pere aus den Englischen Kommentaren!

Übrigens (bekannte Fehler)

  • Statt AltGr (z.B. für @, {},.. ) muss unter ShareKM „Strg+Shift+TASTE“ gedrückt werden!
    => mit Version 0.2 gefixt!
  • Die Taste „<“ funktioniert leider nicht!
    => mit Version 0.3 „gefixt“ -> liegt jetzt auf Y
  • Mit „SwiftKey“ als Eingabemethode und aktivierter Feststell-Taste zeigt Umschalt keine Wirkung.
    Workaround: Man kann in ShareKM als Default-Eingabemethode z.B. die Standard-Android-Tastatur wählen, mit der es funktioniert.
    Beim Trennen wird die ursprüngliche Eingabemethode wiederhergestellt.

 

Changelog

[14.12.13] Deutsch (DE) Version 0.3

  • Feststell (capslock) funktioniert jetzt mit allen Tasten (auch Sonderzeichen)
  • Ist Feststell aktiv, kann man nun mit Umschalt den kleinen Buchstaben schreiben (so wie es sein sollte)
  • Die Funktion der <>|-Taste (neben der linken Umschalt) wurde aufs Y gelegt, da erstere unter Android nicht verfügbar ist.
    •  <  :  Alt+Y
    •  >  :  Umschalt+Alt+Y
    •  |   :  Strg+Alt+Y oder AltGr+Y

[03.08.13] Deutsch (DE) Version 0.2

  • AltGr bzw. Alt+Strg gefixt (Danke an Frank!)
  • funktioniert jetzt richtig

 

Downloads aktuell [14.12.13]

Downloads alt

 

Troubleshooting

P: „mount: permission denied“ bei aktivierter Hardware-Keyboard-Option in ShareKM
L: In den Android-Entwickleroptionen „Root-Zugriff“ auf „Apps & ADB“ stellen.
Hier ein Screenshot von Nik aus den Kommentaren:
http://s17.postimg.org/6nm6pkmkv/Screenshot_2013_12_13_02_52_54.png

Keine Entwickleroptionen vorhanden?
Gehe zu „Einstellungen“ -> „Über dieses Telefon“ (i.d.R. ganz unten).
Tippe nun so oft auf den Eintrag „Build-Nummer“ bis eine Meldung kommt, dass die Entwickler-Optionen jetzt aktiv sind (kein Witz!).
Du findest sie nun ein den Android-Einstellungen unter der Rubrik „System“.

P: Der Eintrag „HID compliant kbd“ erscheint nicht in den Android-Einstellungen, obwohl ich die Hardware-Tastatur in ShareKM aktiviert habe und verbunden bin.
L: Das scheint mindestens bei einigen Samsung-Geräten mit stock-rom der Fall zu sein. Funktionieren sollte das Ganze aber trotzdem.

P: Ich habe die Dateien per Hand kopiert, und es will nicht funktionieren.
L: Gehe sicher, dass die Dateirechte auf rw-r–r– (644) stehen, und ändere sie ggf. mit einem Root-Explorer oder adb:

>> adb root
>> adb remount
>> adb shell
  # cd /system/usr/keylayout/&&chmod 644 "HID_compliant_kbd.kl"&&ls -l
  # cd /system/usr/keychars/&&chmod 644 "HID_compliant_kbd.kcm"&&ls -l

P: Das Recovery will die .zip-Datei nicht flashen.
L:
Methode 1: Per Hand
Entpacke die zip-Datei, kopiere die beiden Dateien aus den Unterordnern von „system“ auf dein Smartphone und verschiebe sie mit einem Root-Explorer (z.B. ES-Dateiexplorer) in folgende Verzeichnisse:

/system/usr/keylayout/HID_compliant_kbd.kl  (Layout)
/system/usr/kechars/HID_compliant_kbd.kcm   (Character-Map)

Prüfe/ändere nun mit dem Root-Explorer die Dateirechte. Sie müssen auf rw-r–r– (644) stehen.

Methode 2: Per ADB
Für Grundlagen ADB bitte Google bemühen und/oder dieses Tutorial lesen. Entpacke die zip-Datei, verschiebe die .kl und .kcm Datei in den ADB-Ordner Öffne die Kommandozeile, wechsel in den ADB-Ordner und führe folgende Befehle aus (habe ich von Sebastian aus den Kommentaren geklaut 🙂

>> adb root
>> adb remount
>> adb push "HID_compliant_kbd.kl" "/system/usr/keylayout/"
>> adb push "HID_compliant_kbd.kcm" "/system/usr/keychars/"
>> adb shell
  # cd /system/usr/keylayout/&&chmod 644 "HID_compliant_kbd.kl"&&ls -l
  # cd /system/usr/keychars/&&chmod 644 "HID_compliant_kbd.kcm"&&ls -l

Methode 3: Neue .zip erstellen
Lade Dir eine .zip-Datei herunter, die Dein Recovery anstandslos flasht (z.B. die GApps).
Diese .zip-Datei bitte niemals entpacken, sondern alles mit 7zip oder winrar per drag&drop machen.
Lösche darin alles außer den „META-INF“-Ordner. Entpacke meine .zip-Datei und schiebe den „system“-Ordner in die neue .zip.
Happy flashing!

Funktioniert immer noch nicht?
Dann versuche das updater-script der neuen .zip durch meines zu ersetzen.
Es befindet sich jeweils im Ordner \META-INF\com\google\android\

Geht auch nicht?
Probiere eine andere .zip-Datei oder eine andere Methode.
Hier noch ein Tutorial zum Thema .zip erstellen: http://forum.xda-developers.com/showthread.php?t=2163974

73 thoughts on “ShareKM keyboard-layout workaround

  1. Vielen Dank für diesen tollen Beitrag. Ich hatte eben ShareKM entdeckt und es wurde auch schon fast wegen der genannten Probleme mit dem Tastaturlayout unbrauchbar, als ich auf der Suche nach einer Lösung diesen Beitrag entdeckt habe.

    Das Tastaturlayout funktioniert prima – wie beschrieben.

    Danke nochmal für die Mühe, ein zip zum Flashen zu erstellen und bereitzustellen. Das erleichtert ungemein, den Workaround bei einem Update des ROMs gleich mit einzuspielen.

    • Freut mich zu hören, dass es auch bei jemand anderem funktioniert!
      Könntest Du mir evtl. noch die Bezeichnung des Smartphones und die Android-Version/Rom nennen?
      Und genau aus dem genannten Grund habe ich auch das .zip erstellt. Hat mich selbst genervt.

  2. Vielen Dank, das wollte ich immer schon mal umsetzen! Hatte mich bisher fast schon wieder an die Englische Tastatur zurückgewoehnt.
    Da ich nicht rebooten konnte (bin gerade am programmieren) habe ich das per ADB eingespielt:

    >>adb root
    >>adb remount
    >>adb push "HID_compliant_kbd.kl" "/system/usr/keylayout/"
    >>adb push "HID_compliant_kbd.kcm" "/system/usr/keychars/"

    Klappt wunderbar endlich wieder effiziente RegEx 😉
    Ach ja System: Motorola Defy auf Android 4.3 mit CM10.2

    • Das geht natürlich auch. Allerdings sollte man darauf achten, dass die Berechtigungen hinterher stimmen (644). Da hatte schon mal jemand ein Problem.

    • Ja richtig Jonas, hab ich im Grunde auch, aber ich glaube mein „code-Tag“ hat das irgendwie durcheinander gebracht…
      Kommt davon wenn man etwas um halb vier morgens postet *tzzz*

      Berechtigungen setzen und überprüfen (-rw-r–r–):
      >>adb shell
      #chmod 644 "/system/usr/keylayout/HID_compliant_kbd.kl"&&cd /system/usr/keylayout/&&ls -l
      #chmod 644 "/system/usr/keychars/HID_compliant_kbd.kcm"&&cd /system/usr/keychars/&&ls -l

    • Das Problem gabs schon mal mit nem S4 mit Stock-Rom. Dort wurde allerdings nur die emulierte „physische“ Tastatur nicht angezeigt. Funktioniert hat es trotzdem.
      In ShareKM muss die Hardware-Tastatur-option aktiviert sein, und du könntest noch mal mit adb oder einem root-Explorer schauen, ob die Datei-Rechte stimmen (siehe Kommentar von Sebastian weiter oben).
      Gruß
      Jonas

  3. Hallo,

    ich hab ein HTC One, gerootet, mit CWM 6.0.3.4 und Original-ROM. Wenn ich die ZIP übers Recovery installieren will, bekomme ich einen „no file_contexts“ Fehler. Wenn ich die Dateien per Root-Explorer einfüge funktioniert es, aber nur bis ich das Handy neustarte. Dann sind die Dateien leider wieder aus den Ordnern verschwunden.

    Hab ich irgendwo was übersehen?
    Gibts eine Lösung dafür?

    Schon mal Danke für die Hilfe

    Grüße
    Uli

    • Könnte am .zip liegen. Ich schau’s mir heute Abend mal an. Ich glaube ich hab das letzte .zip gar nicht mehr getestet.
      Sorry wegen der späten Antwort!
      Gruß
      Jonas

    • Hey. Hab das .zip bei mir grade getestet. Läuft hier einwandfrei durch (4ext-Recovery).
      Zum „no file_context“ in Verbindung zu CWM habe ich hier was gefunden:
      http://forum.xda-developers.com/showpost.php?p=44632947&postcount=95

      „No file_contexts“ warning will display on every boot because it is no longer suppressed. This has no effect on functionality.

      Aber wenn es der dort beschriebene „Fehler“ ist, dann sollte das flashen trotzdem funktionieren. Ansonsten bin ich leider überfragt. Kommt der Fehler denn nur bei meiner .zip vor?

      Gruß
      Jonas

    • Eigentlich sollten die Datein aber nach einem reboot nicht wieder verschwinden.
      Du könntest ansonsten auch mal versuchen die Dateien in:
      /data/system/devices/keychars
      /data/system/devices/keylayout
      zu kopieren.
      Und/oder mal mit adb direkt vom PC kopieren. Dazu mal die Kommentare von Sebastian weiter oben anschauen und mal adb googlen. Root-zugriff für adb muss in den Andoird-Entwickler-Einstellungen erst aktiviert werden.
      Für infos und Download von adb einfach mal googlen.
      Falls Du’s per adb versuchst, dann sicherheitshalber während Du dich im Recovery oder im Bootloader befindest! Evtl. wird nämlich das /system/usr Verzeichnis beim Booten in eine Ramdisk geladen, und der Root-Explorer kopiert dann nur in die Ramdisk, die natürlich nach nem reboot weg ist.

      Oder: Du könntest mal ne .zip-Datei nehmen, die bei Dir zu flashen geht (z.B. die aktuellen GApps), und dort einfach den /system – Ordner ersetzen (und eventuelle andere Ordner außer dem „META-INF“ löschen)

1 2 3 5

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.