Valid HTML 4.01 Transitional
This page is under construction.

Motorola Droid 3
Settings and Setup

Jim Carter, 2012-08-27

Change history:

Setup After Upgrading

These notes are very specific to jimc's preferences and configuration, but other readers can get an idea of the procedure which I've found to be efficient.

Since CyanogenMod-9 for Droid 3 is in alpha test mode, new distro images will be frequent, and usually it will be necessary to wipe data, to prevent inappropriate settings from the previous version from messing up the new one. After you have installed the new CyanogenMod, follow these procedures.

Setp Wizard

Basic Settings

Next step is to set a few settings to make the UI a little less annoying while you restore your apps and data. Hit Menu - Settings and pick:

Reinstalling Apps and Data

On your laptop, un-tar your backups of /data/app and /data/data . For people just getting started with UNIX/Linux, here's the procedure. This is copied off my screen using my filenames, and you will have to substitute your own.

mkdir -p /home/scratch/restore-0130 #Make a place to un-tar the backups.
cd /home/scratch/restore-0130
mkdir app # Extracting downloaded apps
cd app
tar xf ~jimc/upgrade/selen/files/
cd .. # Return to containing directory, extract data
mkdir data
cd data
tar xzf ~jimc/upgrade/selen/files/ # This one is compressed
cd ../app # Get ready to restore the apps.
ls -1 > ./ # Makes a list of your apps
chmod 755 ./

Use your favorite editor on ./ and exclude several items that are already installed or have other contraindications. Likely the already installed apps are specific to me, being carried over from Gingerbread. There's no reason to preserve them.

Now turn the list into a useful script, along these lines.

etc. etc. Remove items to be excluded.
for a in $apps ; do
echo === Installing $a
adb install $a

Execute the script. I always capture the script output and check carefully later to see if anything strange happened. On the phone, the apps all end up in /data/app owned by system:system, and the app's data directory is created, /data/data/${APP} owned by its paranoid UID and group, mode 751.

./ 2>&1 | tee /tmp/logfile

Now the real trick is to restore the data. In Android each app has its own user ID and group, as an aid to keeping a hostile app from stealing data from others and sending it to the mother ship. The UIDs are assigned in an arbitrary order which changes from one OS version to the next, so the UIDs in your backup will mostly be wrong, and most of the apps will not be able to read or write their data. Here's how I automated fixing the UIDs.

First, only a small subset of the data will be restored: I'll exclude apps that I didn't configure and didn't save a useful history in, and I'll also exclude apps that I put some investment into, but which I suspect have been upgraded in such a way that it would be dangerous to carry over settings from the previous incarnation. I have 129 directories backed up, but I'm restoring only these 27:

Specifically I excluded these items which look too scary to restore:

Create this script (suggestion: on your laptop and copy it). On the phone put it in /data/data and call it untar-data, mode 755. The next script expects to find it there. Link to premade script, but I'm not giving any warranties etc.

# $1 = name of tar file, from "tar cf $1 $2"
# $2 = basename of data directory.
# Copy this script to /data/data (executable)

cd /data/data
if [ ! -d $2 ] ; then
echo " On phone: missing directory $2 skipped"
exit 4
uid=`ls -ld $2 | awk '{print $2}'`
if [ -z "$uid" ] ; then
echo " On phone: can't determine UID of $2"
exit 4
tar xpf $1
# We chown $uid $1 because xargs runs the command once even with no input.
find $2 ! -type l ! -user system -print | xargs -n 25 chown $uid $1
find $2 ! -type l ! -user system -print | xargs -n 25 chgrp $uid $1
rm $1

(end of script)

Create this script, which I called send-data. Link to premade script, but I'm not giving any warranties etc.

etc. etc., fill in the list of app directories to be restored
for a in $apps ; do
echo === Restoring $a
if [ ! -d $a ] ; then
echo " Missing directory skipped"
tar cf $tfil $a
adb push $tfil /data/data/app.tar
adb shell "/data/data/untar-data /data/data/app.tar $a"

(end of script)

Execute the script. You have to change to the data directory first because the script looks in the current directory for the stuff to be restored.

cd ./data
../send-data |& tee /tmp/errs #I put the script in the containing directory

Check for problems, fix, and restore them again. Edit the list of apps to include only the ones you're going to restore again. I had seven apps with weird symlinks, probably broken in a previous unsuccessful restoration attempt.

Here are the outcomes when I tried each app: Had to re-register, no content. But this was hosed in 01-12 and I never fixed it up. Had to re-pair all devices OK, bookmarks + current page! No contacts, no SOGo account No alarms Don't know what it contained. No calendar, no SOGo acct No contacts, no SOGo account
com.cadreworks.bible_le OK, books there, current page
com.eclipsim.gpsstatus2 OK, settings restored, GPS works
com.fsck.k9 OK, accounts are live
com.googlecode.andoku OK, finished games remembered
com.happydroid.bookmarks OK
com.neddashfox.nightclock OK
com.whatsapp OK, accounts are live OK, accounts are live
eu.kowalczuk.rsync4android ? (Dropbear is hosed)
jp.sblo.pandora.jota OK, prefs and curren page
net.healeys.lexic OK
org.connectbot OK, prefs and history saved
org.dmfs.caldav.lib Needed to reconfigure SOGo account
org.dmfs.carddav.sync Needed to reconfigure SOGo account
org.linphone Not tested yet
org.thetomahawk.spreadsheet No spreadsheets (may be hosed since 01-12) OK, prefs there. OK? I never set this up. OK, prefereces restored
X.509 Certificates Not restored, needed to reinstall
Wi-fi Connections Needed to reconfigure connections
Bluetooth Needed to re-pair everything

Setting the Settings

Now that the apps are restored it's time to set the rest of the settings. The current version of CM9 has fewer settings than CM7 (Gingerbread) had, and likely some of those will be brought forward in future versions. I've tagged these CM7 in these notes. Also, I'm listing only settings that I changed, with only a few exceptions.

My Desktop Icons

I've set for 3 pages of icons (labelled 0, 1, 2).

Page 0 (Left)
Andoku Lexic Solitaire
Gallery Camera
Page 1 (Center)
Kitchen Timer Settings Battery Usage Market
Clock Amazon Kindle Phone Tester
Night Clock Jota+ Text Edit Google Maps Music
Page 2 (Right)
AndFTP Wifi Analyzer GPS Status
Xabber Messaging OI Safe Google Search
K-9 Mail OpenVPN Set People Calendar
ConnectBot Terminal CadreBible RealCalc

Setting Up Dropbear

In CM9-12-24 Dropbear is not preinstalled as it usually is in CyanogenMod. And it wouldn't be installed in the stock image. If this is your situation, download a recent version of CyanogenMod that has it. Follow this procedure to extract it, executing on your Linux laptop or desktop machine. The procedure for Windows should be not too different. The procedure requires that the pocket computer be rooted with a working su (superuser) program and with adb running as root. If you have su but adb runs as an ordinary user, you can cope by modifying the procedure.

The example below shows extracting dropbear from This worked up to the 2012-01-12 version, but then there was some kind of ABI conflict which prevented dropbear from starting. As of the 2012-03-16 version, I obtained 7.2.0-RC1 for Droid 2 off the CyanogenMod Wiki Latest Version page (image is for Gingerbread), and once again the procedure described below worked.

mkdir /tmp/cm7sys #Pick any convenient name
cd /tmp/cm7sys
unzip ../ #Substitute name of CM image
find . -name "dropbear*" -ls #Gives the filenames shown below
adb remount
adb push ./system/xbin/dropbear /system/xbin/dropbear
adb push ./system/xbin/dropbearkey /system/xbin/dropbearkey
adb shell #Now you're executing on the pocket computer
chmod 755 /system/xbin/dropbear /system/xbin/dropbearkey
ls -l /system/xbin/dropbear /system/xbin/dropbearkey #To check your work
#Continue with the instructions below to set up your keys.

Summarizing the CyanogenMod wiki page on SSH:

Miscellaneous Setup

My Web Home Page

I restored my backed-up web materials, that formerly were on the SDcard of Cupcake. I edited the home page removing the Google Gears hack; the version of Gears that I'm using is obsolete and needs to be upgraded, but not today. A URL of file:///sdcard/jimc-web/index.html was honored by the browser and was functional as my home page -- unlike on Cupcake where the developers, in a fit of unjustified paranoia, suppressed file URLs.

The only problem was that I use some symlinks to indices of contained directories, and FAT32 does not do symlinks. So I duplicated the referent pages instead, hiss, boo.

Setting Up Root and User Certificates

This is for CyanogenMod-9 based on Android-4.0 Ice Cream Sandwich. It is considerably improved over Gingerbread.

First copy the certificates to /sdcard. The app does not give you a choice of source directories; it must be the root of /sdcard, and the expected extension is .crt . Example: /sdcard/ca-mathnet-2024.crt

Navigate to Settings -> Security -> Credential Storage -> Install from SD Card. It shows a list of certificates that it found. Click on them one at a time to install. You can edit the friendly name. These certs will be honored for validating SSL partners.

For your personal certificate, use the web browser to open your Certificate Authority's web interface and do whatever it requires to elicit a PKCS#12 file, mime-type application/x-pkcs12. The browser has an association for this mime-type and will feed the cert to the certificate installer. You can edit the friendly name when installing.

When you connect to a web site that demands a certificate, the browser will show a list of installed user certs; you are supposed to pick one. On subsequent visits, that cert will be preselected in the connection dialog.

VPN Connection

CyanogenMod-6 comes with OpenVPN preinstalled. (Not sure when it came in; I think CyanogenMod-5.) If you have the stock Android, a rooted phone, and a tun.ko module compatible with your kernel (that's the hard part), you can install OpenVPN from the Market. Recommended to just upgrade to CyanogenMod.

I installed OpenVPN Settings and OpenVPN Installer by Freidrich Schäuffelhut, from the Market (free; the latter is ad supported). The two OpenVPN GUI packages don't look promising; they appear to attempt to install their own binaries, two different ones.

CyanogenMod-7 includes the OpenVPN binary, the tun.ko network tunnel module, and a settings module, found in Settings / Wireless and Net / VPN Settings / Add VPN / Add OpenVPN. I believe that stock Android-2.2 does not have any of this, but you can install them from Market packages. To load tun.ko requires root access, that is, r00t your phone.

On CM7 I was able to create a configuration that would connect; however, the provided configuration does not pull settings like the MTU from the gateway, and the cipher and HMAC algo must match exactly and cannot be pulled, but there is no way to influence them in the client, so no data can be transferred and the connection eventually dies.

These are the specific complaints, in the unlikely case that you are able to adjust the gateway to match what the stock client wants to do. The client wants a MTU of 1541 bytes; it does not do LZO compression; it uses the BF-CBC cipher (Blowfish?), and it uses SHA1 for HMAC.

On CM9 you will need to use the OpenVPN Installer by Friedrich Schläuffelhut, which you execute as an application. It does (automatically) an extensive sequence of steps that require superuser privilege, installing the binary. Now execute OpenVPN Settings by the same author. It opens with a settings-type dialog. It wants to see /sdcard/openvpn/ populated with certs and *.ovpn. The latter is the configuration file extension expected by this program. I installed these files from /etc/openvpn on Jacinth, which works:


Here are some details:

XMPP/Jabber Client

On Cupcake I used Jabiru as a XMPP client, but it appears to be discontinued. I replaced it with Xabber by Redsolution (free). When you add an account, the server is the realm that is being served. If the realm is a domain name, and that domain has a SRV record for XMPP, it will be honored, but if not, specify the actual server's hostname (or IP) in Custom Host.

I also tried Beem and Yaxim as XMPP clients, but I had trouble getting them to work with my server.

All the XMPP clients require a saved password, hiss, boo! This is going to be a security hazard and a royal pain in the arse when I change my password.

Multimedia Checkout

Results of my standard web browser test:

Type Class Result
JPEG Image Shown properly
PNG Image Shown properly
GIF Image Shown properly
PDF Text Downloaded; you start EBookDroid (reader) by clicking the notification
WAV Audio Downloaded, click notification, it plays
OGG Audio URL was sent to the music player, which dies
MP3 Audio URL was sent to the music player, which plays it
Theora Video URL was sent to the music player, which dies
SWF Video Downloaded, click notification, nothing happens
RPZA Video Downloaded, click notification, says this video cannot be played
AVI Video Downloaded, click notification, says this video cannot be played
Java Applet Was not executed
M3U Playlist Unrecognized by browser
ZPL Playlist Unrecognized by browser and music player

Using the Pocket Computer as a Media Player

This is using the stock player, and not through the web browser. It is not possible to type in a URL in the media player; you have to go through the web browser, or else deposit music files on the SD card by other means.

Procedure to copy media without wires: Get a SSH session on Selen, display on laptop. Using the laptop's web browser, get the URL to the TAR file of the desired album; see below for accepted formats. It will be about 60 to 70Mb each. On Selen:

cd /sdcard/Music
wget -O - $URL | tar xf -

How does the music player know where the music is? Execute Dev Tools, pick Media Provider, hit Scan SD Card. It takes a few seconds to scan /mnt/sdcard (doesn't scan /sdcard-ext). On the HTC Dream /sdcard would be the external card, and you could unmount it, then remount, and the indexer could be run. But that is impossible on the Droid 3.

The Music app offers (requires) you to link it to a cloud account, for which Google's service is either the most convenient or the only one that is feasible. It is, however, possible to skip actually using Google's music service.

To play the music: My albums include pre-made playlists, with tracks in the correct order. Start the music app. Pick the Playlist tab. Long-press on a playlist filename. Pick Play from the context menu.

Alternatively, pick the Album tab. Click on an album's name. The list of tracks is shown, not necessarily sorted lexically, in the form of a playlist. Click on one track and it will be played; or more typical for my usage, hit Menu / Play All. A shortcut for this action is to long-click on the album's name and pick Play.

The playlist is expected (or at least is acceptable) in M3U format (extension .m3u). The content may/must be relative filenames, relative to the playlist. The content may be in Ogg Vorbis or MP3 format; others are promised but I did not test them.

If the playlist contains a URL to a streaming audio site, it is removed! Hiss, boo!

Playing Streaming Audio

So far I have not found a really satisfactory player for streaming audio. The scenario goes like this:

Hit the URL of the form http://host/basename.mp3 . It will be passed to the music player, which will play it! At least it will play KUSC, but it will not play Jimc's OTA stream: it plays a few seconds of content, then reports Cannot play this kind of audio file. Reason: KUSC is sending out Icecast, while Jacinth is sending plain MP3. The music player will play Jacinth's Icecast service.

Mounting the SD Card

I partitioned my SD card with (in order) VFAT, swap, and ext4 partitions. The VFAT partition is mounted at boot; the others aren't. I deferred the issue of getting them mounted, to this point.

The intended design in CyanogenMod-6.1 (I am not sure how much of this is inherited from the stock Android-2.2 Froyo) is that the scripts in /system/etc/init.d/* are executed one by one (in lexical order) as a very early step in booting. Once all of these finish, vold starts (though I haven't found the invocation). One of these scripts is 05mountsd. It waits up to 6 seconds for /dev/block/mmcblk0 to appear. It goes through the partitions on this device, and the first one of type 83 (any Linux filesystem) is checked and mounted, if there is one.

The fly in the ointment is that vold creates the inodes for both /dev/block/mmcblk0* etc and /dev/block/vold/179:[0-9] etc (the same referents). Thus 05mountsd waits however long, exits having done nothing, and vold then creates the devices.

I did these hacks:

Once I have CyanogenMod-7.0 running on my new pocket computer, I should verify that the same issues are present, and should send this in as a bug report.

Restoring User Data from Cupcake

Now that I have CyanogenMod stabilized, I want to restore user data from Cupcake, wherever the format is compatible or reasonably hackable. In particular, I want my contacts back. Here is a list of saved databases. On Android, an extension of .db always cues a SQLite database.


I re-created these by hand; no need to restore.


(Haven't found the Froyo file yet)


This is /data/data/ . The database has 1 table called assets10 with one row per installed program. It represents the actual state on the machine and should not be messed with. Restore by re-installing missing programs from the market. [Done.]


This is /data/data/ . The only relevant table in here is the bookmarks. I have rebuilt my bookmarks by hand; no need to restore, or to save the old database.

This is /data/data/ . Some (but not all) items from the main settings app are saved here. The XML schema is very similar, but the keys differ considerably. It would be a big mistake to restore this file. I've set it all up by hand according to CyanogenMod's current capabilities. OK to overwrite the saved file from Cupcake.


In Cupcake the format is about as distant from vCards as you can get: separate tables for many of the aspects such as the phone numbers, street addresses, and photos. In NCCN (Froyo) the database is found in /data/data/ which has a different but equally messy format. It won't be possible to just copy the contacts, even by a minorly clever Perl script.

The correct solution is cloud sync, but my Sogo server was not ready to take the Cupcake information.

Am I going to have to stupidly re-enter everything by hand, using the database dump as input?

Brainwave: if someone upgrades without wiping data, it may be able to convert the database format.

cd $cdb
ls -l #Note the owner, group and mode of contacts2.db
mv contacts2.db Xcontacts2.hideme
adb push contacts.db $cdb/contacts.db #Do this on connected laptop
chown app_3:app_3 contacts.db #Use same owner, group and mode as contacts2.db
chmod 660 contacts.db
Reboot the pocket computer

And wonder of wonders, it comes through and imports all the old contacts. The old contacts.db and Xcontacts2.hideme are still there; remove them when contacts have been spot-checked for accuracy. You don't want it trying to convert the old database a second time.


This is /data/data/ . This is where SMS messages are saved. I clear threads as soon as I'm finished with them so the database is empty. No need to restore, no need to save the old one.


This is /data/data/ . The one table in this database is completely empty, both the saved and new version. No need to restore or to save the old one.

Backup Script

On Cupcake I had a script that copied all relevant stuff to /sdcard/BackupRoot, and a cockamamie procedure would transfer it (by sneakernet) to the backup server. On my normal Linux boxes I have a script called backup-host which I execute from the central site by SSH, and I hope to make that work equivalently on the Android machine.

Untoward Events

Poor Battery Life

Since starting with CyanogenMod I've noticed that my pocket computer eats battery and the percent charge changes non-smoothly. Other people report the same issue. Here's a thread on poor battery life with Gingerbread on OG Droid (OP: tkrug, 2011-05-21).

I have a lot of anecdotal data and curses; here's a record of my objective test, before resetting the battery stats.

No Home - No Receive Syndrome

After I installed CyanogenMod-6.1, I got these very annoying symptoms:

Forum postings suggest that this is a syndrome, and a fix for one element fixes the others too.

Cause and Solution: I was using the non-tiny version of Google Apps. When I did a factory reset, re-flashed CyanogenMod-6, and used (the correct Google Apps for HTC Dream), it ran the setup wizard as it should, the Home button goes to the home screen, I can receive incoming calls, and the UI has stopped crashing. The following material is kept for historical interest.

In a Google search for cyanogenmod home button not working, this forum post (OP jsam69, 2010-09-01) indicates that re-flashing the Cyanogenmod image will fix it. Works for some people, not for others. Another item in the same thread from (anonymous) says to run the terminal emulator, type bin and press the home button. Doesn't say what's supposed to happen then.

In another thread (2011-06-13), the problem was caused by restoring apps using Titanium Backup and indiscriminately restoring the data for everything. They haven't found out which app's data is poisonous but it appears to be a system app.

At the end of this thread, the person says he went into recovery and fixed permissions and this helped. The Amon_Ra Recovery has an action item to fix permissions; basically this sets a bunch of directories to mode 755, where some of them formerly were not world readable. (Didn't help me.)

OP WaVeS (dated 2010-04-28) says he has lost his home button. One respondent says he had this symptom repeatedly (on a G1). Boot into recovery (power off, hold down home and power on). Do a full wipe, then reboot. Fixed the problem every time. (What you're really after is to wipe cache and data.) It didn't help me.

OP says if he blows cold air onto the home button, it would work. Do a factory reset and reflash the image. It works again. Another procedure: Install AnyCut from the market. Execute it. Run Setup Wizard. Go through the procedure. This should fix your dial (green), home, hangup (red) keys gone wacko.

JoshuaE says (paraphrasing): Make /data/data/ available on a real machine. Use sqlite to insert a record with name=device_provisioned value=1. Copy it back to the original location. Reboot.

My experience: Booted into Recovery, wiped cache, Dalvik cache, and Factory reset/data (which I think includes the 2 caches). The Home key worked in Recovery (other people's symptoms suggest corrosion in the Home key). This wiped my bookmarks (and other settings) but didn't cure the Home key problem.

More drastic: Boot into recovery. Wipe data factory reset. (Also wipes the cache.) Flash CyanogenMod. Flash Google Apps (MDPI). Reboot. Outcome: it did not run the setup wizard. This doesn't seem to be on the phone. The home key is still inoperative.

Got into Koushik's ROM Manager and hit Fix Permissions. (And rebooted afterward.) It changed 64 files and dirs always to mode 755; some had more restrictive permissions before. Home key is still inoperative.

Comparing JoshuaE's fix and actual phone behavior, the problem is that the setup wizard is not being run, and the software is insufficiently idiotproof against missing values. Another syndrome element is that the market and map apps do not appear in the launcher page. Nonetheless, all of these are present in the Google Apps (MDPI) image ( I had an idea to obtain the APK's and install them separately, but this is obviously bogus.

More Plans to Recover

More on the home key - receive calls syndrome. Doing the right thing, i.e. wipe and reflash, was ineffective on repeated trials. I'm going to try several lines of attack. Of course it's perverse to stick with the G1 when the current OS version won't fit on it, and it's definitely on the agenda to get a new phone, but it's also not prudent, and it's a waste of a good learning experience, to accelerate that step. So, here's what I'm going to try in the short term.

Miscellaneous Tidbits

Top 10 phone models

As of 2011-08-25 by count of CyanogenMod installations (in thousands):

Model Installs Comment
bravo 67.8 Mid level phone by Motorola for AT&T.
umss_jordan 20.9
morrison 26.2
supersonic 26.1
passion 22.6
blade 20.5 Low-end phone by ZTC
sholes 17.5 The OG (original) Droid
buzz 16.9
galaxysmtd 15.8
encore 14.9
Other 109.7
Total 358.9 (All official CyanogenMod installs)


Items detected in logcat output:

This was for diagnosing the home key syndrome, but it provided a number of useful tidbits:

How to install Debian on CyanogenMod

You need an ext[34] partition. There's a chroot program called "Run Linux", and you can bind mount. Get the picture?

List of 30 indispensible apps (francophone)

Several that I already picked are on this list, and several on the list look like I will want them.

Android Bootscript System

Link to a writeup about the Android bootscript system.

Boot Init Scripts

At some early point, something kicks off the scripts in /system/etc/init.d (probably using runparts):


Shows a banner at the start of the logcat information; it spells out cyanogenmod in unreadable ASCII art.


Sets kernel parms from /etc/sysctl.conf, which exists but is empty.


Sets audio parameters, picking the init file according to the hardware model.


If existing, execs then removes /data/


Loads (modprobe) modules listed in the script, currently just ipv6.


Identifies the first partition of type 83 on the SD card (if any), runs e2fsck, and mounts it on /sd-ext . But it did not find /dev/block/mmcblk0 .


Executes each of these scripts, if existing:

  • /sd-ext/
  • /sd-ext/userinit.d/* (using run-parts)
  • /data/local/

Open Issues

Formerly Open Issues Now Finished