2012-09-29

[Technology] Reliably access an Android device from Linux

problems with file system access

With my Nexus One, I would mount its internal SD card as USB mass storage.  That worked really well, though the phone couldn't access it at the same time.  With a number of more recent Android phones, including my Galaxy Nexus, users are expected to access the phone's file system using MTP or PTP.  That seems to work fine on at least Windows, but it's terrible on Linux.  libmtp and gphoto2's (for ptp) communication with an Android phone is incredibly buggy, slow, and error prone.  Trying to use MTP and PTP with a variety of Linux applications (Rhythmbox, Banshee, Shotwell, GThumb, Nautilus, mtpfs) resulted in my /sdcard/ file system on my phone being wiped out somehow once.  That sucked.  Thanks to Instant Upload with G+, I didn't lose most of my photos, at least.



I have waited patiently for support to come, especially as I don't have time myself to write patches. :D  (My Masters' end draws nigh, though!)  However, it has not.  So, here are a couple other solutions.



wifi

I briefly tried working with the file system over the network, using wifi.  I used SSHDroid and a few other SSH daemons.  Only one sort of worked, and it only worked for half an hour, had an error, and has never worked since (even if I uninstall and reinstall it).  Some of the better solutions want your phone to be rooted, which I've resisted doing for a variety of reasons (which meant a very long wait for Jelly Bean here in Canada).   This isn't great for me anyway, because I don't have a router at home: my phone is my connection to the Internet, and I tether with an unlimited data plan (throttles speed after the first 10GB, no extra charges, hooray for WIND Mobile).



Finally, I've decided to just accept a suboptimal solution: adb.



adb



adb works beautifully, but it isn't as user-friendly or obvious as you might like.  It's smooth, though.



First, get adb from the Android SDK (two steps)



get adb


  • go to http://developer.android.com/sdk/index.html and download the SDK for Linux

  • unpack it: tar -xf android-sdk_*-linux.tgz

  • ./android-sdk-linux/tools/android 

  • under Tools, download Android SDK Platform-tools

  • Now, you'll have adb in ./android-sdk-linux/platform-tools/, you can set it on your PATH if you like so you can run it from any directory.


Now, start adb's server as root so you'll be able to connect to your phone over USB



start adb's server and enable debugging on your phone


  •  cd ./android-sdk-linux/platform-tools/

  • sudo ./adb start-server


    • important to run that as root


  • on your phone, go to Settings -> {} Developer Options -> USB debugging

  • Now on your computer, you should be able to do this, ./adb devices, and see your phone listed


If you check ./adb --help, you'll see a lot of options.  I've only used a few so far to do what I want, but it's been nice.



now to access the file system!


  • in one shell, run ./adb shell, and this will give you an interactive shell within your devices file system.  It doesn't have a complete set of tools (no du, head, less, or more), but it has ls (supporting -l), cd, rm, and rmdir.  I've used this to navigate the system, clean it, and figure out paths for the next step

  • to move files, I've been using ./adb push and ./adb pull.  For example, 


    • ./adb pull /sdcard/DCIM/Camera/ ~/photos/


      • this let me get my photos off at a fair speed (5MB/s) finally; I then used rm in the interactive shell after making sure I wasn't accidentally deleting the wrong things.


    • ./adb push ~/files/music/Sherlock/ /sdcard/Music/



suboptimality



I don't like having to use esoteric utilities on the command-line, and I understand that MTP works well on Windows (and Mac OS X?) but I'm tired of waiting for libmtp on Linux to enable applications to actually do anything with their device.  Hooray for having a solution that is at least smooth and reliable in its operation.

Keine Kommentare:

Kommentar veröffentlichen

Dieses Blog durchsuchen

Labels

#Technology #GNOME gnome gxml fedora bugs linux vala google #General firefox security gsoc GUADEC android bug xml fedora 18 javascript libxml2 programming web blogger encryption fedora 17 gdom git emacs libgdata memory mozilla open source serialisation upgrade web development API Spain containers design evolution fedora 16 fedora 20 fedora 22 fedup file systems friends future glib gnome shell internet luks music performance phone photos php podman preupgrade tablet testing typescript yum #Microblog Network Manager adb apache art automation bash brno catastrophe css data loss debian debugging deja-dup disaster docker emusic errors ext4 facebook fedora 19 gee gir gitlab gitorious gmail gobject google talk google+ gtk html libxml mail microsoft mtp mysql namespaces nautilus nextcloud owncloud picasaweb pitivi ptp python raspberry pi resizing rpm school selinux signal sms speech dispatcher systemd technology texting time management uoguelph usability video web design youtube #Tech Air Canada C Electron Element Empathy Europe GError GNOME 3 GNOME Files Go Google Play Music Grimes IRC Mac OS X Mario Kart Memento Nintendo Nintendo Switch PEAP Selenium Splatoon UI VPN Xiki accessibility advertising ai albums anaconda anonymity apple ask asus eee top automake autonomous automobiles b43 backup battery berlin bit rot broadcom browsers browsing canada canadian english cars chrome clarity comments communication compiler complaints computer computers configuration console constructive criticism cron cropping customisation dataloss dconf debug symbols design patterns desktop summit development discoverability distribution diy dnf documentation drm duplicity e-mail efficiency email english environment estate experimenting ext3 fedora 11 festival file formats firejail flac flatpak forgottotagit freedom friendship fuse galaxy nexus galton gay rights gdb german germany gimp gio gjs gnome software gnome-control-center google assistant google calendar google chrome google hangouts google reader gqe graphviz growth gtest gtg gvfs gvfs metadata hard drive hard drives hardware help hp humour ide identity instagram installation instant messaging integration intel interactivity introspection jabber java java 13 jobs kernel keyboard language language servers languages law learning lenovo letsencrypt libreoffice librpm life livecd liveusb login lsp macbook maintainership mariadb mario matrix memory leaks messaging mounting mouse netflix new zealand node nodelist numix obama oci ogg oggenc oh the humanity open open standards openoffice optimisation org-mode organisation package management packagekit paint shedding parallelism pdo perl pipelight privacy productivity progress progressive web apps pumpkin pwa pyright quality recursion redhat refactoring repairs report rhythmbox rust sandboxes scheduling screenshots self-navigating car shell sleep smartphones software software engineering speed sql ssd synergy tabs test tests themes thesis tracker travel triumf turtles tv tweak twist typing university update usb user experience valadoc video editing volunteering vpnc waf warm wayland weather web apps website wifi wiki wireless wishes work xinput xmpp xorg xpath
Powered by Blogger.