Portál AbcLinuxu, 1. listopadu 2024 00:26

Gemini II - root@android, klávesnice, první aplikace

18.7.2018 18:46 | Přečteno: 4267× | Moje domácí muzeum :) | Výběrový blog | poslední úprava: 18.7.2018 18:46

Minulý díl byl takový trochu pesimistický, Debian je přeci jen Technology Preview. Pojďme se tedy podívat trochu blíže na zoubek Androidu.

Android v Gemini a jak získat roota

V Gemini sídlí v době psaní tohoto zápisku Android 7.1.1 s jádrem 3.18.41 (build 10.5.2018). Jak jsem psal minule, Android je předinstalován, ale dá se připravit dual- , triple- či quad- boot s tím, že se rozdělí disk. Od doby, kdy jsem to dělal já vývoj trochu pokročil, nabízí se triple boot a už je v nabídce i rooted android. Ano, takhle jednoduché je získat na Androidu roota. Já jsem ještě musel ještě v "scatter file" měnit u partišny SYS23 boot.img na root_boot.img . Takže máme rootlý android 7.

V oficiálních návodech se hovoří o programu Magisk Manager, který z pochopitelných důvodů nenajdete na Google Play ;-). Když ho ručně stáhnete, postupujete podle celkem blbovzdorného návodu na webových stránkách. Po rebootu jako by se nic nestalo. Ale stalo. Po té, co jste spustili "Instalovat" a nechali proběhnout reboot, ožily moduly "Magisk Hide", který informaci, že je Android rootnutý schovává před zvědavými aplikacemi (některé bankovní aplikace nemají rootnutý Android rády) a hlavně "Superuser". Ze začátku mne překvapilo, že tam nevidím žádnou aplikaci. Když jsem ale nainstaloval a spustil první aplikaci, která si řekla o roota (blíže viz níže) a povolil, objevila se tam. A když jsem Total Commaneru roota odepřel, objevila se tam taky, s možností volbu změnit. Takhle nějak si to představuji.

Linux v Androidu

V tomto směru jsem celkem nováček, takže se rád nechám poučit. Kdysi jsem na rootlém CyanogenModu 7 používal Lil'Debi, ta ale vypadá, že na 7.x nefungujue. Aplikace "Linux deploy" asi bude chtít nějakou SDXC kartu, kterou jsem ještě nekoupil. Na jiném zařízení používám GNURoot Debian a celkem to funguje - tady to vidím na ten Deploy nebo by bylo vtipné v chrootu pustit ten Debian, co ho mám na druhé partišně. V tento okamžik ale tohle nemělo nejvyšší prioritu, protože jsem objevil Termux.

Termux

Termux je FOSS určený primárně k tomu, aby byl terminálovým emulátorem, což mu jde velmi dobře. Kromě toho se pomocí pkg search/ pkg install dají instalovat balíčky jako v apt-getu, který mimochodem je přítomen též. Takže se dá nainstalovat mc, vim, ssh ... no a v mc najednou zjistíte, že do některých adresářů se člověk nedostane. Hmm, na rootlém Androidu. Takže pkg install tsu (T jako TermuxSU), příkaz tsu a najednou se Android zeptá, jestli tomu Termuxu chci toho růta dát. Takže jo a máme roota :-D. Teda rootovskou konzoli. Bez hesla, jako na N900. Paráda. Pro moje účely (pro začátek primárně mc a ssh) to zatím stačí a jdeme dál.

Stesky z minula

Minule jsem si stěžoval na tři věci a vše je teď vyřešeno. Teda skoro. Takže postupně.

Lock screen

Buď není žádné zabezpečení (heslo, gesto, pin), nebo musím před zadáváním hesla swajpovat po obrazovce. To je dost opruz.

V diskuzi i na fóru mi od minulého zápisku odpověděli a řešení je prosté. Místo swipe se praští do mezerníku. To jde. Spolu s prodloužením doby do zhasnutí obrazovky z výchozích 30s na 2 minuty (dá se dřív přes Fn-Esc čili OFF) je to jen minimální zdržení, jen občas na poprvé nezareaguje enter - netuším proč. Každopádně vyřešeno - jestli píšu "Heslo" nebo " Heslo" je mi dost jedno. Když to občas nechce vzít enter, stačí ještě ťuknout do escape. Bez opuštění základní psací polohy. OK.

Rozložení klávesnice

Dlouhý stisk je k ničemu

Tak tady začal můj výlet do hlubin světa androidu.

Kde to mají uložené ?!

Nejprve jsem našel oficiální informaci, kde by měly být klávesnice definované. Takže termux, find -name "*kcm" a hledej, šmudlo. Výsledkem je zjištění, že v adresářích /system/usr/keychars/ a /sbin/.core/mirror/system/usr/keychars bydlí soubory: Ani v jednom z nich ale nebyla nadefinovaná česká klávesnice. Divné, co ? Opět mi pomohlo fórum OESF, kde jsem se dočetl o Japonské taktice (originál v japonštině zde). Ve screeshotovém návodu pro pitomce Ayaki provádí čtenáře instalací Android Studia (zabere docela dost místa na disku, a první spuštění je s pomalým internetem tak trochu za trest) a vytvořením aplikace "Hello World", která kromě tohoto bohulibého pozdravu nainstaluje do Gemini novou klávesnici. Její definice se dá do app/src/main/res/raw, projekt se skompiluje a vytvoří se apk. Kde ale vzít definici, aby jí člověk nemusel celou vymýšlet ? Opět pomůže termux a find, najdeme příslušný soubor Gemini_Keyboard.apk, ten si otevřeme v "dospělém" Debianu klidně přes ENTER v mc a najdeme soubor keyboard_layout_czech_qwertz_gemini.kcm. A ten si můžeme upravovat. Po každé úpravě přeinstalovat aplikaci, vybrat klávesnici, otestovat a tak dál. Pomocí sftp pluginu v Total Commanderu se dá instalovat rovnou z Linuxového stroje, kde se zrovna zkompilovala aplikace (netřeba ukládat na místní úložiště). Můžeme být hrdi na naši první Hello, World! aplikaci a současně máme upravenou klávesnici.

Návrh klávesnice

Na gemini mi vadila první řada, která je Esc - 1 ... 0, Del/BS. V Gemini tupě udělali a HW popsali Esc +ěščřžýáíé, čímž se ale klávesa ě, která má být mezi Q a W dostala až mezi W a E. Takže dost neintuitivní. Takže přesun o jedno doleva, máme Esc ěščřžýáíé a "rezervu dne". Co s ní uděláme ? No samozřejmě, že mrtvou klávesu, která tam patří, takže "'" a "ˇ".

České mrtvé klávesy - háček a čárka (na umlaut zatím kašlu, ale už mám adepta na jeho umístění) mají Unicode ekvivalenty - je to Combining Caron (neboli háček) a Combining Acute Accent čili čárka. A ty se normálně do mapy zapíší a hotovo.

Jo, zapíší a hotovo, co ta nula, co tam byla před tím ? Hmm. Vrátíme se ještě jednou na začátek k té dokumentaci Androidu. Dozvíme se, že Android zná víc modifikátorů než linux:

  1. shift: Applies when either the LEFT SHIFT or RIGHT SHIFT modifier is pressed.
  2. lshift: Applies when the LEFT SHIFT modifier is pressed.
  3. rshift: Applies when the RIGHT SHIFT modifier is pressed.
  4. alt: Applies when either the LEFT ALT or RIGHT ALT modifier is pressed.
  5. lalt: Applies when the LEFT ALT modifier is pressed.
  6. ralt: Applies when the RIGHT ALT modifier is pressed.
  7. ctrl: Applies when either the LEFT CONTROL or RIGHT CONTROL modifier is pressed.
  8. lctrl: Applies when the LEFT CONTROL modifier is pressed.
  9. rctrl: Applies when the RIGHT CONTROL modifier is pressed.
  10. meta: Applies when either the LEFT META or RIGHT META modifier is pressed.
  11. lmeta: Applies when the LEFT META modifier is pressed.
  12. rmeta: Applies when the RIGHT META modifier is pressed.
  13. sym: Applies when the SYMBOL modifier is pressed.
  14. fn: Applies when the FUNCTION modifier is pressed.
  15. capslock: Applies when the CAPS LOCK modifier is locked.
  16. numlock: Applies when the NUM LOCK modifier is locked.
  17. scrolllock: Applies when the SCROLL LOCK modifier is locked.
A navíc se dají kombinovat (například shift+alt). Gemini sice nemá pravý alt a pravý Ctrl, ale má dva shifty. Voilá. Levý shift bude dělat háček a pravý nulu. elegentní. Takže můžu dát dokonce na 1 na levý shift to plus co je tam vytištěné a na pravý 1. A pamatovat si, že čísla s pravým a ne levým shiftem. Dále jsem pravý shift zneužil místo pravého altu a hodil si na "očekávané" místo pár znaků, jako # na rshift+X, & na rshift+C, & jsem nechal na alt+V. Začalo se to rýsovat, zkusil jsem chvilku psát. Šlo to celkem dobře, jen mne štvalo "ů" přes Fn. Ano, píšu s diakritikou. Takže ů putovalo místo "-", pak je ale blbé shift+ů mít "_", tak šup tam s dvojitou uvozovkou a "-" přes fn a "_" na fn+shift. Vykřičník na Fn+K je taky divný, co takhle rshift+,/? ;-).

Zbývající problémy s klávesnicí

Problém s klávesnicí se tedy téměř podařilo vyřešit. Bohužel na Androidu zase pro změnu nefunguje jedna věc, s kterou neměl problém Debian. A to je nakonec i jeden z důvodů, proč i tento zápisek trapně píšu na notebooku. Problémem jsou klávesy PgUP, PgDn, Home a End. Ty sice mají své Ascii kódy (mimochodem, při prohledávání Sítě jsem našel přehled jejich symbolů tady - možná by bylo hezké, kdyby "moje" aplikace vypsala přiřazení kláves ;-) ), ale odmítají spolupracovat. Standardně mají být na fn-šipka. V originál .kcm souborech i u mne je "fallback MOVE_END", MOVE_HOME, PAGE_UP a PAGE_DOWN. Jenže to nic nedělá. Když připojím externí HW USB klávesnici, tak tyhle funkce fungují. Třeba i v níže popsaném editoru. Ale z vestavěné klávesnice ani nic. V rámci zoufalství jsem zkusil i přes shift-šipka namapovat ty ASCII hodnoty jako \u00xx, ale ani to nefunguje. Bohužel procházet tento zápisek bez těchto čtyř kláves v Google Chrome je dost zatrest. Asi zkusím najít nějakou aplikaci, která by mi přesně vypsala jaké dostává klávesy (nebo objevit jak se něco takového v AS píše) ... nebo nevím. Ale editor (pokud to není EMACS/VIM) který tohle neumí je dost ... ehmm ... nevyhovující ;-).

Současná verze klávesnice

Je to stále tak trochu beta, ale kdyby se to někomu hodilo:
# Copyright (C) 2012 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.

#
# Czech (EU - qwertz) keyboard layout.
# Modified by jirka
#

type OVERLAY

map key 86 PLUS

### ROW 1

key 1 {
    label:                              '1'
    base:                               '\u011b'
    capslock:				'\u011a'
    rshift:                              '1'
    lshift:                              '+'
    alt:                                '!'
    fn:                                 '^'
}

key 2 {
    label:                              '2'
    base:                               '\u0161'
    capslock:                           '\u0160'
    shift:                              '2'
    alt:                                '@'
    fn:                                 '\\'
}

key 3 {
    label:                              '3'
    base:                               '\u010d'
    capslock:                           '\u010c'
    shift:                              '3'
    alt:                                '#'
    fn:                                 '|'
}

key 4 {
    label:                              '4'
    base:                               '\u0159'
    capslock:                           '\u0158'
    shift:                              '4'
    alt:                                '$'
    fn:                                 '~'
}

key 5 {
    label:                              '5'
    base:                               '\u017e'
    capslock:                           '\u017d'
    shift:                              '5'
    alt:                                '%'
    fn:                                 '('
}

key 6 {
    label:                              '6'
    base:                               '\u00fd'
    capslock:                           '\u00dd'
    shift:                              '6'
    alt:                                '^'
    fn:                                 ')'
}

key 7 {
    label:                              '7'
    base:                               '\u00e1'
    capslock:                           '\u00c1'
    shift:                              '7'
    alt:                                '&'
    fn:                                 '{'
}

key 8 {
    label:                              '8'
    base:                               '\u00ed'
    capslock:                           '\u00cd'
    shift:                              '8'
    alt:                                '*'
    fn:                                 '}'
}

key 9 {
    label:                              '9'
    base:                               '\u00e9'
    capslock:                           '\u00c9'
    shift:                              '9'
    alt:                                '('
    fn:                                 '%'
}

key 0 {
    label:                              '0'
    base:                               '\u0301'
    capslock:                           '+'
    rshift:                              '0'
    lshift:                              '\u030c'
    alt:                                ')'
    fn:                                 '='
}

key DEL {
    base:			                	fallback DEL
    shift:        			            fallback FORWARD_DEL
}

### ROW 2

key Q {
    label:                              'Q'
    base:                               'q'
    shift, capslock:                    'Q'
}

key W {
    label:                              'W'
    base:                               'w'
    shift, capslock:                    'W'
    fn:                                 '['
}

key E {
    label:                              'E'
    base:                               'e'
    shift, capslock:                    'E'
    alt:                                '\u20ac'
    fn:                                 ']'
}

key R {
    label:                              'R'
    base:                               'r'
    shift, capslock:                    'R'
    fn:                                 '\u20ac'
}

key T {
    label:                              'T'
    base:                               't'
    shift, capslock:                    'T'
}

key Y {
    label:                              'Z'
    base:                               'z'
    shift, capslock:                    'Z'
    fn:                                 '<'
}

key U {
    label:                              'U'
    base:                               'u'
    shift, capslock:                    'U'
    fn:                                 '>'
}

key I {
    label:                              'I'
    base:                               'i'
    shift, capslock:                    'I'
    fn:                                 '/'
}

key O {
    label:                              'O'
    base:                               'o'
    shift, capslock:                    'O'
    fn:                                 '\''
}

key P {
    label:                              'P'
    base:                               'p'
    shift, capslock:                    'P'
    fn:                               '\u00fa'
}

key ENTER {
    label:                              '\n'
    base:                               '\n'
}

### ROW 3

key TAB {
    label:                              '\t'
    base:                               '\t'
}

key A {
    label:                              'A'
    base:                               'a'
    shift, capslock:                    'A'
}

key S {
    label:                              'S'
    base:                               's'
    shift, capslock:                    'S'
    fn:                                 '@'
}

key D {
    label:                              'D'
    base:                               'd'
    shift, capslock:                    'D'
}

key F {
    label:                              'F'
    base:                               'f'
    shift, capslock:                    'F'
}

key G {
    label:                              'G'
    base:                               'g'
    shift, capslock:                    'G'
    fn:                                 '$'
}

key H {
    label:                              'H'
    base:                               'h'
    shift, capslock:                    'H'
    fn:                                 '*'
}

key J {
    label:                              'J'
    base:                               'j'
    shift, capslock:                    'J'
    fn:                                 '"'
}

key K {
    label:                              'K'
    base:                               'k'
    shift, capslock:                    'K'
    fn:                                 '!'
}

key L {
    label:                              'L'
    base:                               'l'
    shift, capslock:                    'L'
    fn:                                 ';'
}

key APOSTROPHE {
    label:                              '-'
    base:                               '\u016f'
    lshift:                              '"'
    rshift:                              '!'
    fn:				                	'-'
    fn+shift:		                	'_'
}

### ROW 4

#key SHIFT_LEFT {
#}

key Z {
    label:                              'Y'
    base:                               'y'
    shift, capslock:                    'Y'
    fn:                                 '#'
}

key X {
    label:                              'X'
    base:                               'x'
    shift, capslock:                    'X'
    fn:                                 '&'
    alt:                                '#'
}

key C {
    label:                              'C'
    base:                               'c'
    shift, capslock:                    'C'
    alt:                                '&'
}

key V {
    label:                              'V'
    base:                               'v'
    shift, capslock:                    'V'
    alt:                                '@'
}

key B {
    label:                              'B'
    base:                               'b'
    shift, capslock:                    'B'
}

key N {
    label:                              'N'
    base:                               'n'
    shift, capslock:                    'N'
}

key M {
    label:                              'M'
    base:                               'm'
    shift, capslock:                    'M'
    alt:                                '\u00b5'
    fn:                                 '`'
}

key PERIOD {
    label:                              '.'
    base:                               '.'
    lshift:                              ':'
    rshift:                              ';'
    alt:                                '>'
    shift+alt:                          '\u00f7'
    fn:                                 '\u0082'
# insert
}

key DPAD_UP {
   base:			                	fallback DPAD_UP
   fn:				                	fallback PAGE_UP
   rshift:			                	'\u0073'
}

#key SHIFT_RIGHT {
#}

### ROW 5

#key CTRL_LEFT {
#}

#key FUNCTION {
#}

#key ALT_LEFT {
#    fn:                                 fallback SHOW_DIALER
#}

key SPACE {
    label:                              ' '
    base:                               ' '
    alt, meta:                          fallback SEARCH
    ctrl:                               fallback LANGUAGE_SWITCH
}

key COMMA {
    label:                              ','
    base:                               ','
    lshift:                              '?'
    rshift:                              '!'
    alt:                               '<'
    shift+alt:                         '\u00d7'
}

#
key DPAD_LEFT {
   base:				                fallback DPAD_LEFT
   fn:				                	fallback MOVE_HOME
   rshift:			                	'\u0071'
}

key DPAD_DOWN {
   base:			                	fallback DPAD_DOWN
   fn:			                		fallback PAGE_DOWN
   rshift:                              '\u0081'
}

key DPAD_RIGHT {
   base:		                		fallback DPAD_RIGHT
   fn:			                		fallback MOVE_END
   rshift:		                		'\u0079'
}

Aplikace na psaní poznámek

Další věc, o které jsem minule psal je aplikace na poznámky, optimálně s možností focení. Chvilku jsem hledal a našel horkého kandidáta:

All Note

Rich text editor, za možnost exportu do "normálního formátu" si nechají zaplatit, ale proč ne. Přes funkci "vložit" to umí vkládat i fotku tak, že pustí fotografickou aplikaci. Super. Ještě klávesové zkratky a bylo by to ideální. Tak píšu vývojářce z Taiwanu mail ... no co byste řekli ... za týden neodepsala. Takže ještě budu chvíli čekat, ale platit za aplikaci bez podpory se mi dvakrát nechce. Navíc mne to, povzbuzeného funkčním Hello Worldem, motivovalo ještě chvilku hledat ... Na fóru ještě doporučili Jota+, s reklamami, která by s těmi PgUp a PgDn neměla mít údajně problém. No, hádáte správně. Ani nic. ...

Udělej si sám ?

Na googlí dotaz "android text editor sample sdk" na mne vypadlo hned několik námětů - mezi prvními Knife, který neumí vkládat obrázky, MRichEditor, který je založený na knihovně summernote a Rich Editor. Všechno je opensource, takže jsem v pokušení si to poslední (což je Apache) forknout a přiohnout podle svých představ.

Příště uvidíte ...

Pokud vše půjde dobře, v příští díle se rozhodne o textovém editoru a podíváme se, jaké jsou možnosti PIM, tedy využití Gemini jako HP 200 LX / Psionu čili osobní sekretářky.        

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

k3dAR avatar 18.7.2018 22:35 k3dAR | skóre: 63
Rozbalit Rozbalit vše Re: Gemini II - root@android, klávesnice, první aplikace
Odpovědět | Sbalit | Link | Blokovat | Admin
btw: Magisk Manager v GooglePlay(Store) byl, ale Google ho pred casem vykopnul, pritom treba SuperSU tam stale je, z rozhovoru plyne ze Google nevadila moznost rootnuti, ale ze Magisk obsahoval i vlastni "store"...

porad nemam telo, ale uz mam hlavu... nobody
20.7.2018 22:45 faha
Rozbalit Rozbalit vše Re: Gemini II - root@android, klávesnice, první aplikace
Odpovědět | Sbalit | Link | Blokovat | Admin
Zdravím, netušíte jestli se plánuje (nebo již je) oficiální prodejce Gemini v ČR ? Vcelku mám na něj zálusk. Díky
21.7.2018 11:11 Georgius | skóre: 24 | blog: jirka
Rozbalit Rozbalit vše Re: Gemini II - root@android, klávesnice, první aplikace
Tak vzhledem k tomu, že Velká Británie je ještě v EU tak úplně tu potřebu místního prodejce nevidím (tedy kromě možnosti si zařízení osahat před koupí). Zatím to byl startup, tak uvidíme jak se to vyvine dál - mluví se taky o druhé generaci Gemini, která by už mohla/měla mít nějaké věci víc vychytané ...
21.7.2018 19:33 faha
Rozbalit Rozbalit vše Re: Gemini II - root@android, klávesnice, první aplikace
Tomu rozumim, sveho casu Psion veci u nas resil tusim napr. PointX. Ja osobne mel Psion Organiser II a pote preskok na Psion 5MX. Hrozne by se mi libilo nahradit dohromady telefon a mini laptop do terenu jednim zarizenim, na praci mam stanici, ale obcas s terenu potrebuji linux s terminalem, tcpdump, web ale obavam se, ze to stejne nepujde. I tak diky za odpoved.
22.7.2018 15:23 Georgius | skóre: 24 | blog: jirka
Rozbalit Rozbalit vše Re: Gemini II - root@android, klávesnice, první aplikace
Linuxový terminál a telefon současně řeší termux, ještě o něm chystám pár zmínek v příštím zápisku, tcpdump jsem ještě nezkoušel, díky za tip na další zkoumací oblast. Já jsem se teď zaseknul na problému, že bez venkovního displaye nevím kdo volá. Halekání jména volajícího do vyzvánění jsem rozchodil, ale stále to není ono. A paralelně řeším PIM ;-). Tak si počkej na další díl ;-)

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.