Tips and Tricks

Here are some helpful hints that will come in handy while testing ubuntu touch. Feel free to add more!

Switch from RO to RW

  • Switch from RO to RW (to install additional packages for example):
    • Remount RW

    $ adb shell
    $ mount -o remount,rw /
  • or touch writable_image

    $ adb shell touch /userdata/.writable_image
    $ adb reboot

Take a screenshot

This is helpful for bug reporting. If you are using a build post 90 you are running with MIR by default.


Install phablet-tools package and use the phablet-screenshot command. Ensure your device is connected to your pc before running, with the screen on and displaying the screenshot you wish to take.

   $ phablet-screenshot /tmp/dump.png

Warning /!\ This does not work with maguro due to a bug in the gpu, capturing the frame buffer kills the device.

Warning /!\ Because of how the script works (by dumping the framebuffer directly), you may potentially experience invalid images or otherwise fail to get a screenshot.


   $ adb shell /system/bin/screencap /data/screenshot.png
   $ adb pull /data/screenshot.png ~/screenshot.png

You can resize with convert from package imagemagick:

   $ convert screenshot.png -resize 50% screenshot.png

Which build am I running?

  • Find out what build you are running

   $ adb shell cat /etc/media-info

Or for the details of the build (version of android part/version of ubuntu part)

root@ubuntu-phablet:/# system-image-cli -i
current build number: 80
device name: mako
channel: devel-proposed
last update: 2013-10-04 09:59:14
version version: 80
version ubuntu: 20131003.2
version device: 20131003.2

Enable MIR by default

   $ adb shell touch /home/phablet/.display-mir
   $ adb reboot

   to switch back:

   $ adb shell rm /home/phablet/.display-mir
   $ adb reboot
  • MIR is running if no surfaceflinger process is running and the socket /tmp/mir_socket is present
  • Tag bugs that exist only in MIR with mir-only
  • MIR is running as default as of build 90. All versions released after 1.0 including 1.0 use MIR by default

Enable gprs if it doesn't come up automatically

  • GPRS A simple work around while this is not working is to do:

   $ adb shell restart network-manager

Turn back on intro

  • Turn back on the initial demo that instructs how to use the phone via swiping

dbus-send --system --print-reply --dest=org.freedesktop.Accounts /org/freedesktop/Accounts/User32011 org.freedesktop.DBus.Properties.Set string:com.canonical.unity.AccountsService string:demo-edges variant:boolean:true

Retracing a crash on phone

In case you don't want to submit a crash to Launchpad to let them be handled by Ubuntu retracers, a way to generate nice stack trace from crash files in /var/crash/ and usable by developers is to use apport retrace directly on the phone.

  1. Switch the device to RW mode
  2. Install apport-retrace:  apt-get install apport-retrace 

  3. Enable ddebs repository to install debug symbol packages

  4. Run apport-cli on a crash files in /var/crash, for example:
    •   $ apport-cli /var/crash/_usr_lib_arm-linux-gnueabihf_upstart-app-launch_zg-report-app.32011.crash

      4.1. To the question Send problem report to the developers? answer E: Examine locally

      4.2. To the question This will launch apport-retrace in a terminal window to examine the crash. answer 3: Update /var/crash/_usr_lib_arm-linux-gnueabihf_upstart-app-launch_zg-report-app.32011.crash with fully symbolic stack trace. Alternatively you can also get into an interactive gdb shell with all symbols loaded for in-depth debugging.

  5. Let apport proceed ...

Note: Make sure the phone is not blacked because in suspend mode, it will takes an infinite amount of time to do anything.

Retracing a phone crash on desktop

You'll first need some apt sources for apport to download -dbg and -dbgsym packages from. The configurations we use for the production retracers can be found in the Daisy project, so grab those:

   bzr branch lp:daisy

You'll need the following packages on your desktop:

  • apport-retrace
  • gdb-multiarch

Next, on the phone, tell apport to collect some additional information for the crash. This adds the packaging information and runs any hooks:

   $ apport-cli /var/crash/your_crash_file.crash

Hit view (V), then hit keep (K).

Finally, on your desktop, pull the crash from your phone and retrace your crash:

   $ apport-retrace -S ~/bzr/daisy/retracer/config -o updated_crash_file.crash /var/crash/your_crash_file.crash

updated_crash_file.crash should now have full Stacktrace and ThreadStacktrace fields.

If you do this more than once it's helpful to use a permanent cache directory with e. g. -C ~/.cache/apport/ or something similar. The next time you retrace a crash it can then re-use the already downloaded debs, ddebs, and indexes.

You can throw that at Launchpad by running apport-cli updated_crash_file.crash, then hitting S to send the report.

Disable Screen Timeout


  $ powerd-cli display on bright

Add APN Settings

'Note you'll need to be in r/w mode for this to work'

If you need to edit your APN settings for some reason, currently you have to manually edit the ofono config files. Perform the following:

  • Shell into your phone or open a terminal
  • Stop network manager and ofono

stop network-manager
stop ofono
  • Find your proper APN settings from your provider
  • Use the APN name as the AccessPointName in your gprs config file. The file is found at /var/lib/ofono/<Identity>/gprs

    • For example, for an ATT straight talk sim, this is a copy of the file that will work. Notice AccessPointName=tfdata matches the APN value given by straighttalk (att) below.


  • Reboot your phone
  • Enjoy working mobile data


In general, check your MVNO's website for the settings information. You can use the required settings for any device, such as an android. Ignore the instructions and copy the information. It will look similar to the following:


NAME net10
APN tfdata

You only need the 'APN' field data to replace the AccessPointName= value in the gprs file.

Straight Talk Sim (Walmart)

The straight talk card might be using tmobile or att network. Here's the full APN details from for each.

Straight Talk (ATT)

APN tfdata
MMS_APN tfdata

Straight Talk (Tmobile)

APN wap.tracfone
MMS_APN wap.tracfone


Running autopilot tests

CMAKE enabled source

Use the click-buddy tool from phablet-tools (apt-get install phablet-tools) to build a click package and provision your device. For example for calendar app,

bzr branch lp:ubuntu-clock-app
cd ubuntu-clock-app


click-buddy --dir .


click-buddy --dir . --provision

The --provision will push the click package to the device and ready it to run tests. Both will build a click package in the base directory.

Via installed click package

phablet-click-test-setup --click $click_package

If the autopilot test suite is already on the device, you can run it like so. Connect the phone to your PC and run:

phablet-test-run -v TEST_NAME

The -v option gives more verbose output about failures and what is going on while testing, but isn't required for running. Replace TEST_NAME with the application test suite name you want to test. For example,

phablet-test-run -v calendar_app

or even something specific like

phablet-test-run -v calendar_app.tests.test_weekview.TestWeekView

Install a Package from Source

Sometimes we need to test the behavior of the bleeding-edge code that the developers are actively working on. To do this we take advantage of the Debian packaging system by building a package from source on the device and installing it there. Here we'll run through an example of installing lp:ubuntu-system-settings from source on a device. You'll need to set up for a writeable image. Do this as the phablet user and make a workspace for your codez:

  $ adb shell
  $ su phablet
  $ mkdir ~/workspace

We'll need a few packages to begin:

  $ sudo apt-get install -y bzr devscripts equivs

Now get trunk as if you were on your local machine.

  $ cd ~/workspace
  $ bzr branch lp:ubuntu-system-settings

This installs all the packages necessary to build/run, should take a while for packages with lots of dependencies.

  $ cd ~/workspace/ubuntu-system-settings
  $ sudo mk-build-deps -i debian/control

Modify the changelog to ensure that our built package will take priority over any installed version of the package.

  $ dch -R

This opens an editor on the debian/changelog in the project directory (note that I had some trouble saving this file under nano, so vi is recommended):

  ubuntu-system-settings (0.1+13.10.20131002-0ubuntu2) UNRELEASED; urgency=low
   -- phablet <phablet@ubuntu-phablet>  Wed, 02 Oct 2013 12:52:50 +0000
  ubuntu-system-settings (0.1+13.10.20131002-0ubuntu1) saucy; urgency=low
    [ Sebastien Bacher ]
    * click: the installed-size info is in kib, not in bytes.

Note that our new changelog entry bears an incremented version number. Fill in something like "Test build." for a changelog entry (behind the asterisk), then exit and save the changelog.

Now build the package (live the life of a dev for a few mins Wink ;) ).

  $ debuild -us -uc

The .deb has been deposited in the parent directory. Install it like you'd install any deb Smile :) . Note that we may have built multiple deb files--if you find that you're not able to install a .deb due to a dependency issue, look for that dependency here first. In this case we'll discover that we need to install the 'libsystemsettings1' .deb before installing 'ubuntu-system-settings'.

  phablet@ubuntu-phablet:~/workspace/ubuntu-system-settings$ ls ..
  phablet:~/workspace/ubuntu-system-settings$ sudo dpkg -i ubuntu-system-settings_0.1+13.10.20131002-0ubuntu2_armhf.deb

Lastly verify that we're using the right package--the highlighted version should match the version of the new changelog entry we noted above.

  phablet@ubuntu-phablet:~/workspace/ubuntu-system-settings$ apt-cache policy ubuntu-system-settings
    Installed: 0.1+13.10.20131002-0ubuntu2
    Candidate: 0.1+13.10.20131002-0ubuntu2
    Version table:
   *** 0.1+13.10.20131002-0ubuntu2 0
          100 /var/lib/dpkg/status
       0.1+13.10.20131002-0ubuntu1 0
          500 saucy/universe armhf Packages

NOTE: do consult with your developers about additional steps necessary to see the behavior of your built package on a device--if it's a system service, e.g., it may need to be killed and restarted, or you may need a new session to see changes in unity itself. Every package is different!

Get a list of installed click packages

  click list

Typing in just click will show you other commands you might be interested in for click packages

Debug an application via command line

To debug an application on the device, start it using the start application command. Application is an upstart user session and you need to be phablet user in order for this to work properly. From your pc, shell in, become phablet user, and run the start application command. Shown below is an example running the filemanager.

   adb shell
   sudo -i -u phablet
   start application APP_ID=com.ubuntu.filemanager_filemanager_${version}

To run other applications, change the APP_ID to the application name. Using click list is helpful for finding the proper name.

The console output will be logged in /home/phablet/.cache/upstart/. For example, for filemanager as shown above the log exists in /home/phablet/.cache/upstart/application-click-com.ubuntu.filemanager_filemanager_0.1.1.80.log.

Play a video from the command line

The general scheme for starting the media player from the command line via upstart is:

  start application APP_ID=mediaplayer-app APP_URIS="file_name"

This can be used for other apps by changing the APP_ID.

QATeam/TouchTesting/Tips (last edited 2014-08-05 17:55:49 by nskaggs)