Android & Linux - Zgrywamy dane z mobila
04.04.2013 23:11
Jako, że na co dzień w domu korzystam z linuksów, od dnia kiedy w ręce wpadł mi tablet Samsunga z Androidem, myślałem sobie jak w łatwy sposób zgrać garść danych z tabletu na komputer z zainstalowanym, np. Ubuntu, nie wyciągając karty SD ze slotu urządzenia, lecz korzystając z WiFi... Pod uwagę brałem różne rozwiązania, a droga jaką przeszedłem poszukując tego satysfakcjonującego, wyglądała mniej więcej tak:
MTP vs MassStorage
Skąd w ogóle wziął się problem? Nie wystarczy wziąć kabel USB, podłączyć go do komputera i zgrać co trzeba? W przypadku linuksa nie jest to takie proste - już tłumaczę dlaczego. Urządzenia przechowujące dane i podpinane do portu USB komputera (pendrive'y, dyski przenośne) rozpoznawane są zazwyczaj, jako Urządzenia Pamięci Masowej (USB MassStorage) i z tymi na linuksie nie ma problemu. Tak też było z Androidem, aż do momentu wydania wersji HoneyComb, w której postanowiono zastąpić MassStorage protokołem MTP (Media Transfer Protocol). Obsługa tego protokołu pod linuksem działa tragicznie, żeby nie powiedzieć, że w ogóle nie działa - przynajmniej mnie nie udało się dorwać do danych via MTP na linuksie. Pomysł wykorzystania gMTP do transferu danych z Androida do Ubuntu szybko zweryfikowała rzeczywistość - po kilku próbach zrezygnowałem i porzuciłem to rozwiązanie.
Może KiesAir?
Niezłym rozwiązaniem wydaje się być KiesAir. KiesAir pobieramy na urządzenie z Androidem z Googlowego sklepu Play za darmo. Po potwierdzeniu i wyrażeniu zgody instalujemy program, jak każdy inny w systemie od Googli.
Program KiesAir jest bardzo łatwy w użyciu i prawdopodobnie część użytkowników na tym etapie zakończy czytanie moich przygód z przesyłaniem danych z androida do linuksa, znajdując to czego szukali. Jak działa program? Wręcz banalnie: po odpaleniu program prosi nas, abyśmy połączyli się komputerem do tej samej sieci, do której podłączony jest nasz tablet i wprowadzili konkretny adres w przeglądarce. Adres ten to nic innego, jak adres IP naszego tabletu, który nasłuchuje połączenia na porcie 8080. W moim przypadku jest to http://10.10.10.103:8080. Po wykonaniu powyższej czynności, w oknie przeglądarki wyświetli się monit o podanie kodu PIN, który właśnie został wygenerowany i wyświetlony na ekranie tabletu.
Po wpisaniu PIN'u oczom naszym ukazuje się istny kombajn do zarządzania zawartością naszego tabletu. Mamy dostęp do muzyki, filmów, zdjęć, dzwonków, zakładek, spisu połączeń, kalendarza, jak i eksploratora plików. Pliczki możemy pobierać, wysyłać, teoretycznie przeglądać (nie udało mi się pooglądać filmików), lecz wszystko to jest, według mnie, jakieś takie "przerośnięte". Owszem, jest to ładne i czytelne, ale według mnie, średnio funkcjonalne. Do poprawnego działania niezbędna jest zainstalowana java, a wszystko działa tak jakoś ślimaczo - mam wrażenie, że większość pakietów podróżujących przez sieć dzięki KiesAir, robi to bez większej potrzeby i bezsensownie zapycha naszą sieć - co kto lubi, ale ja nie takiego rozwiązania szukałem...
zwyczajnie zgrać pliczki...
Zawsze byłem pod wrażeniem, jak sprawnie inne udziały potrafią się zintegrować z systemem plików na linuksie. Czy to udział sieciowy NFS, CIFS, czy vFAT, NTFS - wszystko to możemy podpiąć sobie do, np. jakiegoś podkatalogu w domowym folderze użytkownika. Po podmontowaniu właściwego udziału, zwyczajnie wchodzimy do katalogu i już oglądamy zawartość urządzenia/lokalizacji sieciowej - wszystko w obrębie jednego drzewa katalogów, wręcz genialne.
Idąc tym tokiem rozumowania, chciałem początkowo tak podmontować androidowy MTP, lecz jak to opisałem powyżej, bez większych sukcesów. Z pomocą przyszedł program WebDav Server, który udostępnia zawartość tabletu w sieci przez protokół HTTP. WebDav miał pełnić funkcje podobne do FTP, ale przy okazji miał rozwiązywać szereg innych problemów, z którymi borykał się ten znany protokół. Jednym z problemów były zapory internetowe, z którymi WebDav (w odróżnieniu od FTP) radzi sobie bezproblemowo, bo transmisja zawartości odbywa się tym samym protokołem, co przesyłanie stron internetowych, a te (jak wiemy) rzadko są przez adminów blokowane. Znając mniej więcej założenia WebDav, postaram się więc podejrzeć i zgrać pliczki z tabletu z jego pomocą.
WebDav Server
Jak już wspomniałem, do osiągnięcia celu użyłem programu od The Olive Tree: WebDav Server. Pobieramy go i instalujemy na tablet za pomocą sklepu Play - program jest rozpowszechniany za darmo. Uruchamiamy zainstalowany program i wchodzimy do ustawień (settings). Zanim udostępnimy zawartość tabletu, musimy ustawić kilka opcji:
- Network interfaces: ustawiamy Loopback
- Port: możemy ustawić, np. 8080
- Use Password: Zaznaczamy, aby nikt niepowołany zgrał nasze dane
- Username: podajemy nazwę użytkownika
- Password: wprowadzamy hasło
- Home directory: ustawiając na Root (/) mamy dostęp do wszystkich pliczków w tablecie
Dalsze parametry pozostawiamy bez zmian - nie mają większego znaczenia. Mając ustawione opcje, powracamy do ekranu głównego, klikamy na czerwoną ikonę i uruchamiamy serwer, a stan uruchomienia będzie obrazować zielona ikonka w tray'u, za pomocą której możemy ponownie wywołać okno programu WebDAV Server.
davfs
Mając uruchomiony serwer WebDAV na tablecie, przechodzimy do komputera i naszego linuksa. W moim przypadku jest to Ubuntu, więc opis dalszej części, siłą rzeczy, oparty będzie o system Ubuntu. Aby obejrzeć udostępnioną zawartość tabletu programem WebDAV, musimy zainstalować obsługę davfs na linuksie.
Na Ubuntu robimy to (za pomocą konsoli) tak:
sudo apt-get install davfs2
Kiedy mamy już zainstalowany davfs w systemie, musimy utworzyć katalog, do którego będziemy montować udział:
mkdir ~/Android
Mając katalog, możemy przystąpić do zamontowania w nim udostępnianego udziału z tabletu. Tablet w mojej sieci ma adres 10.10.10.103 (można sprawdzić to w ustawieniach połączenia):
sudo mount -t davfs http://10.10.10.103:8080 ~/Android
i voila...
Teraz możemy za pomocą naszego ulubionego menadżera plików przejść do katalogu ~/Android i zobaczyć w nim zawartość tabletu, z którego możemy teraz zgrać co trzeba na dysk naszego komputera będącego pod kontrolą pingwina.
Może metoda ta nie jest jakaś nadzwyczajna czy imponująca, ale jest (IMHO) genialna w swej prostocie. Robi co trzeba, nie generując zbędnego ruchu sieciowego podczas działania. Wydajność, czytelność, pełna integracja z drzewem katalogów - nic więcej do szczęścia nie potrzeba. Ściąganie plików z androida na linuksa to teraz czysta przyjemność - o takie właśnie rozwiązanie mi chodziło. Oczywiście, całość można sobie ułatwić, tworząc skrypty gotowe do uruchomienia, które automatycznie bez klepania w konsoli zrobią co trzeba, ale to nie jest aż tak bardzo konieczne - ileż razy dziennie łączymy się z tabletem w celu pobrania jakiejś słitfoci?