Exchanging files between Linux and Android should be trivial, right? Well, it's not. There are several ways to copy files from/to your Andbox, using a cable or Wi-Fi.
When you connect your device via USB cable, Linux may see it either as
an external USB drive or as an MTP device, i.e. a multimedia
player. In the first case,
udev mounts the device somewhere,
/media/guido/DEVICE. Exchanging files is now trivial:
Linux~$ rsync -av --delete -i ~/Documents/MyStuff/ /media/guido/DEVICE/MyStuff/
If the Andbox is connected via MTP, more trickery might be required.
Some Linux versions will mount the device using
for instance, my phone's internal storage is accessible at this
You may want to make a directory like the above more accessible
creating a symbolic link, but unfortunately this directory is only
temporary. In fact, the next time you plug your Andbox, the string
mtp:host is bound to change.
Linux:~$ ln -s /run/user/1000/gvfs/mtp\:host\=%5Busb%3A001%2C111%5D/Internal\ Storage/ Phone Linux:~$ cd Phone Linux:~/Phone$ ls -l totale 481K 32K drwx------ 1 guido guido 32K lug 29 13:09 Alarms/ 32K drwx------ 1 guido guido 32K mar 2 2012 Android/ 0 drwx------ 1 guido guido 0 ago 26 11:59 Backups/ 32K drwx------ 1 guido guido 32K mag 20 2014 baidu/ 0 drwx------ 1 guido guido 0 ott 6 19:57 bluetooth/ 32K drwx------ 1 guido guido 32K mar 23 2015 CallRecordings/ 512 -rw------- 1 guido guido 145 lug 29 12:46 customized-capability.xml 32K drwx------ 1 guido guido 32K lug 29 13:10 DCIM/ 0 drwx------ 1 guido guido 0 ott 9 12:40 Download/ 0 drwx------ 1 guido guido 0 dic 31 1999 LOST.DIR/ 32K drwx------ 1 guido guido 32K lug 29 14:33 MIUI/ 0 drwx------ 1 guido guido 0 lug 31 10:00 Music/ 0 drwx------ 1 guido guido 0 ago 3 11:03 Notifications/ 0 drwx------ 1 guido guido 0 set 22 14:54 Pictures/ 32K drwx------ 1 guido guido 32K mar 12 2014 Ringtones/ 32K drwx------ 1 guido guido 32K gen 7 2013 svox/ 32K drwx------ 1 guido guido 32K gen 9 2013 System/ 0 drwx------ 1 guido guido 0 ott 15 14:40 tmp/ Linux:~/Phone$ _
You will immediately notice that accessing the Andbox file system is quite slow.
In other cases, nothing happens. To access files on the device, you'll have to use programs that deal with MTP:
Provides MTP Tools, i.e. command line utilities to manage files, albums, playlists etc. on the device.
A graphical program to perform the same actions as MTP Tools.
In my personal experience, copying files with MTP has proven to be unreliable and error-prone. Copying files is also possible via ADB commands, which appear to be quite reliable. The following two commands copy (push) a file from Linux to the Andbox, and the other way around (pull):
Linux:~$ adb push file.txt /mnt/sdcard/directory/ Linux:~$ adb pull /mnt/sdcard/directory/file.txt
In the latter example, please note you must not add a dot at the end
of the command: it's not the same as the Linux command
If you want to keep a directory synchronised between the Linux box and
the Andbox, in theory the command
adb sync should suffice. In
practice, I never managed to make it work.
Fortunately, there's a nice tool called
written in Python and it's released under the Apache License at this
get it by cloning the GIT repository, then copy the command to a
directory included in your
Linux:~$ git clone https://github.com/google/adb-sync Linux:~$ mv adb-sync/adb-sync ~/bin/ Linux:~$ _
adb-sync works in a similar manner as standard
Linux:~$ adb-sync --delete SYNC-ME/ /mnt/sdcard/SYNC-ME/ Sync: local SYNC-ME, remote /mnt/sdcard/SYNC-ME/ Scanning and diffing... Warning: could not parse 'd---rwxr-x 2 system sdcard_r \ 32768 Oct 19 10:54 /mnt/sdcard/SYNC-ME/'. Push: /mnt/sdcard/SYNC-ME/ Push: /mnt/sdcard/SYNC-ME//file1.txt Push: /mnt/sdcard/SYNC-ME//file2.txt Push: /mnt/sdcard/SYNC-ME//file3.txt Total: 0 KB/s (0 bytes in 0.640s) Linux:~$ _
fatsort(from Linux box)
Let's suppose you copied a bunch of music files to your device. You run your music player and open the directory containing the files. Surprise: they're not sorted, and are displayed in (apparently) random order!
It's the way the VFAT filesystem works, on Andboxes and MP3 players
fatsort, a great tool available here:
It's a command line program for Linux that sorts VFAT file systems on connected devices.
Plug the USB cable and mount the device. As root, run the
Linux:~# fdisk -l ... Disk /dev/sdd: 15.9 GB, 15925772288 bytes 1 heads, 32 sectors/track, 972032 cylinders, total 31105024 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/sdd1 32 30777343 15388656 c W95 FAT32 (LBA)
In the above example,
/dev/sdd1 is the Android VFAT file
system. To sort the files therein, check the consistency of the file
system and run
Linux:~# fsck.vfat -a /dev/sdb1 dosfsck 3.0.16, 01 Mar 2013, FAT32, LFN 0x41: Dirty bit is set. Fs was not properly unmounted and some data may be corrupt. Automaticaly removing dirty bit. Performing changes. /dev/sdb1: 8060 files, 856099/1921702 clusters Linux:~# fatsort -f /dev/sdb1 FATSort Utility 0.9.15 by Boris Leidner <fatsort(at)formenos.de> File system: FAT32. Sorting directory / Sorting directory /CTR/ Sorting directory /Foto/ Sorting directory /Guido/ ... Linux:~# _
fatsort should be run on unmounted file systems,
but the above works and is reasonably safe.
This is the most traditional way to upload and download files to/from a server. Among the several available, I picked up Swiftp FTP Server:
also available on F-Droid.
This application is released under the GPL and runs on the
non-standard port 2121, so it can run on unrooted Andboxes. (21 is a
privileged port.) In the Login settings, set user and password for
uploads and downloads, or anonymous login for download only. In the
latter case, username and password are ``ftp'', ``guest''. Take note
of your Andbox's IP adress and, from the Linux box, start an ftp
session. The default remote directory is
Linux:~$ ftp 22.214.171.124 2121 Connected to 126.96.36.199. 220 SwiFTP 2.10.2 ready Name (188.8.131.52:guido): ftp 331 Send password Password: 230 Access granted Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 200 PORT OK 150 Opening ASCII mode data connection for file list drwxr-xr-x 1 owner group 40 Oct 23 08:23 .android_secure drwxr-xr-x 1 owner group 32768 Sep 16 16:09 .MySecurityData drwxr-xr-x 1 owner group 32768 Jul 29 13:09 Alarms drwxr-xr-x 1 owner group 32768 Mar 02 2012 Android ... drwxr-xr-x 1 owner group 32768 Oct 19 10:55 tmp -rw-r--r-- 1 owner group 145 Jul 29 12:46 customized-capability.xml 226 Data transmission OK ftp> put foo.dat local: foo.dat remote: foo.dat 200 PORT OK 150 Data socket ready 226 Transmission complete ftp> bye ftp> 221 Goodbye Linux:~$ _
Another way of getting files from your Andbox is making it a Web server. Among the several free http servers available, I suggest that you install ServDroid that is quite straightforward to use:
Configuring ServDroid is very simple. Copy the files you want to make available to
then start ServDroid and point a browser to port 8080 of your Andbox's IP.