IP Webcam Server via SSH session starten

  • 3 Antworten
  • Letztes Antwortdatum
S

Sloop

Erfahrenes Mitglied
7
Hi Leute,

ich hab auf einem android device den "IP Webcam Server" installiert, der in meinem Home-WiFi super funktioniert. Das Tablet steckt in einem Dock und dieses möchte ich als Kamera quasi dadurch verwenden. Ich möchte von außerhalb (wenn ich außer Haus bin) mich remote draufschalten können, um Bilder zu schiessen oder Livestream zu sehen. Das mache ich indem ich über meine eigene VPN-Leitung erstmal in mein Heim-Netz verbinde, und dann Zugriff auf mein Tablet habe.

Ich will jedoch nicht, dass der IP Webcam Server non-stop läuft, sondern ich möchte ihn remote nur dann einschalten wenn ich ihn benötige. Das könnte ich doch z.B. über SSH machen. Ich kann mich per SSH auf das gerootete Android Device anmelden, bloss stelle ich mir die Frage: wie starte ich den auf so einer shell eine gewünschte Applikation?

Ich habe daraufhin die App "IP Webcam Server" gestartet und dann ein
Code:
ps |grep -i cam
ausgeführt. Das spuckte mir als Ergebnis aus:
app_99 31788 254 125508 35384 ffffffff afd0c5ac S com.pas.webcam

hilft mir das irgendwie weiter? Selbst wenn ich aber nur die App starte, ist damit der IP Webcam server noch nicht aktiv, den schaltet man normalerweise erst ein, durch den ganz unteren Button namens "Start server". Also müßte ich diese Funktion irgendwie über ssh aufrufen können.

Die App selbst bietet ja eine tolle Funktion an namens "Stream on device boot". Dadurch würde der Server automatisch immer laufen, aber das will ich ja vermeiden, da das Tablet nicht immer am Strom hängen soll und dadurch nur unnötig Batterie verbrät.

Wer kann hier weiterhelfen, bezüglich Starten von Apps oder Funktionen davon, mittels SSH ?

Danke schonmal im voraus.
 
Apps Starten geht von der Shell aus mit „am start”. Das braucht allerdings als Argument den Paketnamen und den Namen der zu startenden Aktivität. Der Paketname ist einfach. Es ist der Dateiname der .apk ohne angehängte Zahl und ohne .apk. Den Namen der zu startenden Aktivität zu bekommen, ist nicht ganz so einfach. Dafür brauchst Du adb und aapt aus dem Android-SDK (auf dem PC) sowie ggfs. etwas einfaches Rätselraten in einem XML-Dump. Wenn Du den Aufwand investieren möchtest (und niemand eine bessere Idee hat), kann ich es gegen Abend erklären. Schreib also, ob Du das möchtest.
 
Das wäre super, wenn du mir das verraten könntest. Mit Linux bin ich zwar fit, von Android jedoch habe ich keinen blassen Schimmer :) Vielleicht hilft dir ja der oben genannte Prozessoutput beim Suchen.

danke und grüße,
Sloop
 
OK. Ich zeige am Beispiel von Google Maps, wie man eine App von der Shell aus aufruft.

Zunächst braucht man den Paketnamen. Das ist der Stamm des Filenamens, gekürzt am Ende um das eventuelle Minus samt Zahl und die Endung .apk. Weiß man den nicht, einfach die App im Play Store aufrufen und die Adresszeile betrachten. Der Teil ganz am Ende nach dem „id=” ist der Paketname. Manche Android-Versionen zeigen den Paketnamen auch im App-Manager. Im Falle von Maps ist der „com.google.android.apps.maps”.

Jetzt holen wir die App vom Telefon, um daraus eine Liste ihrer Activities zu extrahieren:
adb pull /data/app/com.google.android.apps.maps-2.apk
Die Activities stehen im Manifest. So betrachtet man einen Dump davon:
aapt dump xmltree com.google.android.apps.maps-2.apk AndroidManifest.xml | less
(Windows: statt „| less” „| more” nehmen oder „>tmp.txt” und tmp.txt mit einem Editor ansehen).

Da steht nun viel Zeugs drin. Man scrollt herunter oder sucht nach „activity”, bis so ein Block gefunden ist:
E: activity (line=61)
A: android:theme(0x01010000)=@0x7f0c00e9
A: android:label(0x01010001)=@0x7f0d00ba
A: android:name(0x01010003)="com.google.android.maps.MapsActivity" (Raw: "com.google.android.maps.MapsActivity")
A: android:launchMode(0x0101001d)=(type 0x10)0x2
A: android:configChanges(0x0101001f)=(type 0x11)0x480
A: android:alwaysRetainTaskState(0x01010203)=(type 0x12)0xffffffff
Auf das „E: activity” und das nächste „A: android:name” kommt es an. Es gibt fast immer mehrere solcher Blöcke und aus dem Namen der Activity (com.google.android.maps.MapsActivity) lässt sich darauf schließen, was beim Aufruf passiert. Die paar mal, die ich das gemacht habe, war jedes Mal der erste solche Block die Aktivität, die beim Start aus dem Launcher auch aufgerufen wird. Ob das immer so ist, weiß ich nicht sicher. Und nicht jede Aktivität kann von außerhalb gestartet werden. Man bekommt dann später einen FC. Also hier ist u.U. etwas Raten und Probieren angesagt.

Jetzt haben wir alles, was wir brauchen: den Paktenamen „com.google.android.apps” und die Hauptaktivität „com.google.android.maps.MapsActivity”. Und so wird Maps aus einer Shell gestartet:
am start com.google.android.apps.maps/com.google.android.maps.MapsActivity
Zum Stoppen:
am force-stop com.google.android.apps.maps
Viel Spaß bei der Shell-Programmierung,

mizch
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: jna
Zurück
Oben Unten