Spring naar hoofdtekst

Android tekstinvoer via USB

Geplaatst op door .
Laatste aanpassing op .

Inleiding

Bij het inrichten of aanpassen van een Android smartphone komt het met enige regelmaat voor, dat je lange en vaak complexe tekenreeksen moet invoeren op het armzalige schermtoetsenbord van de telefoon in kwestie. Denk daarbij bijvoorbeeld aan wachtwoorden van e-mailaccounts of een WLAN-wachtwoord. Zou het niet prachtig zijn als je dit met behulp van een computertoetsenbord zou kunnen doen? Eventueel nog verder vereenvoudigd door gebruik making van een klembord (kopiëren en plakken)? Gelukkig behoort dit alles tot de mogelijkheden, als je de telefoon via USB met de computer verbindt!

ADB

De afkorting ADB staat voor Android Debug Bridge, een stukje software dat een verbinding (brug) legt tussen een Android-systeem enerzijds en een computer anderzijds. Het maakt van begin af aan deel uit van Google's Android-ontwikkeltools en wordt vaak gebruikt tijdens de ontwikkeling van apps en aangepaste firmware, zogenaamde Custom ROMs.

ADB wordt uitgevoerd op de computer en legt (meestal via USB) verbinding met het Android-systeem. Laatstgenoemde moet die verbinding wel eerst toestaan. Als eerste moeten de ontwikkelaarsopties worden ingeschakeld via Instellingen / Over de telefoon / 7x tikken op Build-nummer. Hierna verschijnt er in Instellingen een extra optie (bijna onderaan): Opties voor ontwikkelaars. Kies hier voor Android-foutopsporing en schakel deze functie in.

Input

In dit artikel zal ik slechts één mogelijke toepassing van deze duizendpoot op de commandline toelichten: het commando adb shell input text. Hiermee kun je tekstvelden waar de Android-focus staat vanaf het toetsenbord van de computer vullen. Ga daartoe als volgt te werk:

  1. Installeer ADB op de computer met bijvoorbeeld $ sudo apt install adb.
  2. Schakel de Android-foutopsporing in, zoals hierboven beschreven.
  3. Sluit de telefoon via USB aan op de computer.
  4. Open een dialoog waarin wordt gevraagd voor het WLAN-wachtwoord dat lang, complex en moeilijk te typen is. Plaats de cursor in het betreffende tekstveld.
  5. Vul het wachtwoord in met $ adb shell input text 'WatHierStaatIsGeheim'.

Te complex

Natuurlijk is niets zo eenvoudig als het in eerste instantie lijkt - ook dit stappenplan is verre van perfect. Met name de lees- en bijzondere tekens in een aantal wachtwoorden lieten zich niet zo 1-2-3 via bash en adb overpompen. Ik moest op zoek naar de juiste aanhalingstekens om de tekens heelhuids aan de overkant te krijgen.

Uiteindelijk bleek (ten minste bij gebruik van adb) de volgende methode doeltreffend: verpak de tekenreeks eerst in dubbele, daarna in enkele aanhalingstekens.

adb shell input text '"WatHierSta@t1s&ehe!m"'

Toch was er nog één veldslag voordat ik mijn wachtwoord zonder problemen op het Android-display zag verschijnen. Het dollarteken ($) en de dubbele aanhalingstekens (") werden nog steeds door bash geïnterpreteerd. Een backslash (\) was voldoende om ook deze tekens ongehavend te kunnen invoeren.

adb shell input text '"Wat\"Hier\$ta@t1s&ehe!m"'

Update

Ook bovengenoemde methode bleek niet volledig effectief toen ik recent een wel heel complex wachtwoord via deze methode wilde invoeren. Het bevatte niet alleen een dollar-teken, maar ook een enkel aanhalingsteken, uitroepteken, hoedje, rechte haak en een accolade. De uiteindelijke oplossing was, om het wachtwoord als tekst in een bestand te zetten (ww.txt), dat door printf te laten escapen en dat op zijn beurt aan adb te voeren:

adb shell input text $( printf "%q" $( cat ww.txt ) )

Update (2)

Bovenstaand commando heeft nog één tekortkoming, zoals ik afgelopen tijd ontdekte. Als het wachtwoord de combinatie %s bevat, dan wordt dit door adb vertaald naar een spatie.

De enige manier om zo'n wachtwoord (of welke tekenreeks dan ook) via adb in te voeren, is door de actie op te splitsen in twee of meer losse aanroepen - aldus deze zeer informatieve pagina. Een voorbeeld:

$ cat ww.txt
tPaQ%s{brnHKX5Pt[b$Z

$ adb shell input text $( printf "%q" $( cat ww.txt ) )
# The '%s' is output as a space ' ' character
# tPaQ {brnHKX5Pt[b$Z

$ cat ww1.txt
tPaQ%

$ cat ww2.txt
s{brnHKX5Pt[b$Z

$ adb shell input text $( printf "%q" $( cat ww1.txt ) )
# The '%' is output as is, it has no special meaning

$ adb shell input text $( printf "%q" $( cat ww2.txt ) )
# The 's' is output as is, now it has no special meaning
Terug naar boven

Inhoudsopgave

Delen

Met de deel-knop van uw browser, of met onderstaande koppelingen deelt u deze pagina via sociale media of e-mail.

Atom-feed van FWiePs weblog

Artikelen


Categorieën

Doorzoek de onderstaande categorieën om de lijst met artikelen te filteren.


Terug naar boven