Shell-Skripte unter CyanogenMod
25.04.2015

Android ist so konzipiert, dass viele Apps auf Java basieren und das eigentliche Linux-System etwas verkrüppelt ist. Allerdings funktionieren in Android auch Shell-Skripte. Der Vorteil von Shell-Skripten ist, dass sie ohne Entwicklungsumgebung geschrieben und direkt auf dem Smartphone geändert werden können. Android bietet leider keine Möglichkeit an, ein Shell-Skript über ein Desktop-Icon zu starten - so wie es bei Apps möglich ist. Die Open-Source-App ConnectBot rüstet diese Funktion nach und kann Shell-Skripte über ein Desktop-Icon starten.
Desktop-Symbol für ein Shell-Skript einrichten
Zunächst muss die App ConnectBot von F-Droid.org auf dem Smartphone installiert werden. Nach dem Start von ConnectBot lassen sich neue "Sitzungen" anlegen. Für ein lokales Shell-Skript muss links unten "local" ausgewählt und ein Sitzungsname eingegeben werden - in dem Beispiel ist der Sitzungsname: "test".

neue lokale Sitzung in ConnectBot einrichten
Durch langes Drücken auf die Sitzung "test" erscheint der Menüpunkt "Host editieren".

Einstellungen über Host editieren ändern
Durch das Tippen auf "Host editieren" erscheint das Einstellungsmenü der Sitzung. Unter dem Menüpunkt "Post-Login Automatisierung" kann jetzt ein Shell-Skript eingetippt werden. Zum automatischen Ausführen des Befehls bei Sitzungsstart muss nach dem Befehl noch ein Enter-Zeichen in das Feld eingetippt werden:

Post-Login Automatisierung von ConnectBot
Jetzt ist die lokale Sitzung "test" eingerichtet und kann als Desktop-Symbol über die Widgets auf den Desktop angeordnet werden.

Widgets für den Desktop einrichten

ConnectBot Widget 1x1
In den Widgets kann ConnectBot 1x1 gedrückt und auf den Desktop gezogen werden. Dabei öffnet sich ConnectBot mit den eingerichteten Sitzungen.

Sitzung von ConnectBot auswählen
Bei der Auswahl der Sitzung "test" wird auf dem Desktop das ConnectBot-Symbol mit dem Namen "test" angelegt.

Desktop mit Icon zum Starten eines Shell-Skript
Beim Tippen auf das ConnectBot-Symbol "test" startet ConnectBot mit der Sitzung "test". Durch die "Post-Login Automatisierung" wird jetzt das Shell-Skript ausgeführt - in dem Beispiel "echo test".

Shell-Skript mit ConnectBot ausgeführt
Probleme bei CyanogenMod 11
Bei CyanogenMod Version 11 hatte ich gelegentlich das Problem mit ConnectBot, dass die Post-Login Automatisierung nicht zuverlässig funktionierte. Als Alternative zur Post-Login Automatisierung benutze ich die folgenden Shell-Funktionen in der Datei .bashrc.
vi /data/media/0/.bashrc
function getConnectbotSessionTime() {
expr $(date +%s) - $(sqlite3 /data/data/org.connectbot/databases/hosts .dump | grep "$1" | sed "s|.*NULL,NULL,\([0-9]*\),'gray'.*|\1|")
}
USER_ID_OF_CONNECTBOT=$(stat /data/data/org.connectbot/databases/hosts | grep "Uid:" | sed 's|.*Uid: ( *[0-9]*/ *\([^)]*\)).*|\1|')
if [ "$USER" == "$USER_ID_OF_CONNECTBOT" ];then
if [ $(getConnectbotSessionTime test) -lt 2 ]; then
# put your script here:
echo "test"
elif [ $(getConnectbotSessionTime home) -lt 2 ]; then
echo "Home"
fi
su
fi
alias ki='killall org.connectbot'
Beim Beenden der ConnectBot-Sitzung kommt immer die nervige Meldung: "Der Host hat die Verbindung beendet. Sitzung schließen ?" "Ja / Nein". Um diese lästige Abfrage zu umgehen kann der Alias ki für "killall org.connectbot" in der Shell eingegeben werden.
Falls noch etwas unklar sein sollte, dann kannst du die Kommentar-Funktion benutzen.