I started this document at the end of 2014, over 15 years after my previous HOWTOs. In the meantime, GNU/Linux on the desktop has basically failed, but a GNU-less Linux variant has gained a large market share in the mobile industry. It's Android: a partially open platform, based on the Linux kernel and a mix of open and closed programs (``apps''). As a matter of fact, Android is by far the most widespread Linux distribution, even though most of its users don't even know they're using Linux!
(A pocket-size Unix system that one can get for less than 100 bucks. Amazing! If they'd told me about it in the early '90s, I would have dismissed it as cheap science fiction.)
I purchased an Android phone and a mid-spec Android tablet, and I wondered if I could do something interesting with them --- apart from making phone calls and browsing the net, that is. Android is meant to be very easy to use, and no trickery is required for normal use. The thing is, I'm not a normal user: I'm a GNU/Linux sysadmin, and just scratching the surface is not enough for me. So I started experimenting and gathering information.
This guide is meant to be a quick reference for GNU/Linux users who want to use their Android device in less-than-trivial ways, and want their Linux and Android boxes to talk to each other. Most vendors provide drivers and ancillary programs for Microsoft Windows or Apple OS X only, but a GNU/Linux system is perfectly capable of interacting with Android devices. With a bit of hacking, as usual.
In the following, I will share a few tricks I have collected:
I work on a GNU/Linux Mint box, but I'll try and be
distribution-agnostic. I'll concentrate on Free and Open Source
Software (FOSS) whenever possible, and I'll take standard, unrooted
Android devices into account. By the way: ``rooting'' means tweaking
your Andbox to gain root permissions, as you would do in Linux with
sudo
. ``Unrooted'' means ``not tweaked''.
Since Android is very fragmented (hey, it's Linux after all!) and several versions are available, I'll just provide information that is applicable to what I own: Android 4.0.4, 4.1.1, and 5.0.1 on ARM architecture. All examples and code in this HOWTO were actually tested on my devices; hopefully, they should work on your device too. If you want me to cover more Android versions, I'll be glad to receive new equipment; or just tips. Equipment is preferred :-)
Currently, the majority of Android devices are ARM based; others are based on x86 or MIPS CPUs, in both 32 and 64 bit flavours. This is not a significant difference: most applications are written in Java with no native code, so they are CPU-agnostic. Instructions in this HOWTO should work for these Android versions, too. I guess that relevant differences concern security policies.
Should you have trouble with your Android device, I suggest that you refer to Android forums. Among the many available, I find the following especially helpful:
Besides: if you find any errors in this guide, please report them to me.
Thoughout this HOWTO, all instances of ``Linux'' actually mean ``GNU/Linux''. The GNU part is very important, and I'm very grateful to GNU for its fantastic programs. ``Andbox'' will stand for ``Android device''.
I shall assume that you are a reasonably competent Linux user: you must be able to open a terminal, issue commands, become root, edit files, compile and install software. No spoon-feeding here.
As far as Android expertise is concerned, only the very basics are required. You are expected to be able to perform common tasks such as installing software, enabling USB debugging, using Bluetooth, and so on. Nothing special, really: in general, you'll have to be able to find out where options are in your device. I would be glad to provide information, but unfortunately no identical menus or screens can be found across different devices of different brands and different Android releases. You will have to figure it out yourself.
Finally: rooting your device might be desirable, but it's not necessary as far as this HOWTO is concerned. Root permissions are normally forbidden in Android, unless an enlightened vendor decides otherwise. I will mention a great program that needs root access (Webkey), but the rest of recommended software will not need it. By the way: in the following, I'll use the appropriate term ``program'' or ``application'', not the marketing term ``app''. (Yep, I'm an old and grumpy guy.)