[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.


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 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/


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.


[Technology] Money over life

Microsoft apparently burned through $70,000 worth of electricity in 3 days to avoid a $210,000 fee for under-consumption with a data centre's electrical utility.  Ugh.


[Technology] One of the many reason why I dislike Python apps

AttributeError: 'CoreConfig' object has no attribute 'DATA_DIR'

So, on a clean install of GTG 0.2.9, which was released in February, it doesn't even start because an attribute gets referenced before it ever gets instantiated.  Yay.  This happens on almost every Python app I ever use at some point, and why I adore static type checking at compile time.


[Technology] Xiki, a cool new shell

My friend Anthony just reshared this from a fellow named Paul Irish on Google+ and it's sort of amazing.  Basically, it's like a free-form dynamic shell where output can be interacted with, and where a lot of system functionality and applications are first-class citizens.  The console understands what databases are, what Ruby (and I think he mentioned Python) is, how JavaScript and its DOM work and how to interact with webpages, even manipulating them.

It's a level of interaction I'd like to have at the console level with my system, and not just be restricted to the menu-driven interfaces that some designer thought I would need. :)

Dieses Blog durchsuchen


#Technology #GNOME gnome gxml fedora bugs linux vala google #General firefox gsoc security GUADEC android bug xml fedora 18 libxml2 programming web blogger encryption fedora 17 gdom javascript git libgdata memory mozilla open source serialisation upgrade API Spain design evolution fedora 16 fedora 20 fedora 22 fedup file systems friends future glib gnome shell internet luks music performance phone photos preupgrade tablet testing web development yum #Microblog Network Manager adb art automation bash brno catastrophe css data loss deja-dup disaster emacs emusic errors ext4 facebook fedora 19 gee gir gitorious gmail gobject google talk google+ html libxml mail microsoft mtp namespaces nautilus php picasaweb ptp resizing rpm school selinux sms speech dispatcher technology texting time management uoguelph usability video web design youtube #Tech Air Canada C 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 apache 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 customisation dataloss dconf debug symbols debugging 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 flac forgottotagit freedom friendship fuse galaxy nexus gay rights gdb german germany gimp gio gitlab gjs gnome software gnome-control-center google assistant google calendar google chrome google hangouts google reader gqe graphviz growth gtest gtg gtk gvfs gvfs metadata hard drive hard drives hardware help hp humour identity instagram installation instant messaging integration intel interactivity introspection jabber java java 13 jobs kernel keyboard language languages law learning lenovo letsencrypt libreoffice librpm life livecd liveusb login macbook maintainership mario memory leaks messaging mounting mouse mysql netflix new zealand nodelist numix obama ogg oggenc oh the humanity open open standards openoffice optimisation organisation package management packagekit paint shedding parallelism pdo perl pipelight pitivi privacy productivity progress progressive web apps pumpkin pwa python quality recursion redhat refactoring repairs report rhythmbox scheduling screenshots self-navigating car shell signal sleep smartphones software software engineering speed sql ssd synergy systemd tabs test tests themes thesis tracker travel triumf turtles tv tweak twist university update usb user experience valadoc volunteering vpnc waf warm wayland weather web apps website wifi wiki wireless wishes work xinput xmpp xorg xpath
Powered by Blogger.