Since Ubuntu 13.04 storage access to external devices via MTP is supposed to work out of the box via a GVFS-MTP module.While this question is about the Galaxy Nexus, other Android devices as well as Windows Phones and MTP enabled media players are also supported. Adb works, and all methods for reading from the device via MTP seems to work (I have tried mounting with mtpfs, gmtp and using the mtp-tools package directly).When I try to write to the device however, nothing I have tried works.
PTP_ERROR_IO: failed to open session, trying again after resetting USB interface LIBMTP libusb: Attempt to reset device mtp-folders: Successfully connected Friendly name: (NULL) Error 1: Get Storage information failed.
Error 2: PTP Layer error 02fe: get_all_metadata_fast(): could not get proplist of all objects.
Error 2: (Look this up in ptp.h for an explanation.) Error 2: PTP Layer error 02fe: get_handles_recursively(): could not get object handles. My Honeycomb powered device is the exact same way where you have to use MTP only.
Error 2: (Look this up in ptp.h for an explanation.) LIBMTP_Get_Storage() : Resource temporarily unavailable OK. I think this is how all post 2.3 Android devices are going to be.
Since Ubuntu 13.04, storage access to external devices via MTP works out of the box via a GVFS-MTP module.
Related question: Are there any plans to improve mtp support on future Ubuntu releases? The issue seems to be fixed in packages for Ubuntu 12.04, so those can be used if you are brave enough to do it.
I grabbed them from launchpad.net/ubuntu/+source/libmtp/1.1.1-1 and created the packages for system (and the same for gmtp)rhythmbox still freezes and gives errors (LIBMTP_Send_Representative_Sample(): could not get object info.) when trying to access the nexus, and nautilus gives: Unable to mount Galaxy Nexus; Error initializing camera: -60: Could not lock the device. Also when copying a large file (with Nautilus) it will appear to copy very fast (50MB/s) but during that time it doesn't copy anything.
Only when the progress bar hits 100% it will start the real copy (and the interface hangs). Did all of this, but getting this message when trying to android-connect: fusermount: failed to open /etc/fuse.conf: Permission denied fusermount: option allow_other only allowed if 'user_allow_other' is set in /etc/even though I edited /etc/as instructed. This solution should work for all Android devices providing MTP functionality and probably all non-Android devices with MTP functionality like Windows Phones and Portable Media Players.
There has been some confusion, let's try to clear things up: at the top for more information.
To undo the changes if something goes wrong or if the device still isn't recognized you will have to manually install the original packages.
Head to the libmtp source overview and find your Ubuntu release.