This page is being migrated to official  SHR User Manual. This manual then will be also available on website. Please don't enhance this page anymore, rather include your stuff into the user manual.


opkg package manager

opkg related tweaks can be found on the opkg page.

Bluetooth Network

Bluetooth with SHR

major (really major) speedup of suspend and wake up

Just type

klogd -c 1

into the console. This saves you from 3 seconds worth of console output on every resume.

If you like the effect of this command and want it to be executed at every startup, my Idea was you just have to log into your phone and type the following:

cat > /etc/init.d/resumespeedup << EOF
/sbin/klogd -c 1
chmod +x /etc/init.d/resumespeedup
ln -s ../init.d/resumespeedup /etc/rc1.d/S06resumespeedup
ln -s ../init.d/resumespeedup /etc/rc2.d/S06resumespeedup
ln -s ../init.d/resumespeedup /etc/rc3.d/S06resumespeedup
ln -s ../init.d/resumespeedup /etc/rc4.d/S06resumespeedup
ln -s ../init.d/resumespeedup /etc/rc5.d/S06resumespeedup

You will have the same effect by changing the kernel parameter loglevel to 1.

fix your echo problem

this is an unofficial patch, but if you have this problem and you'd like to use your FR as a phone ;) try to apply this:

Since it really does wonders - does it make sense to make this fix standard? [user:peterpall]

According to DocScrutinizer this has been added to FSO sometime in January. Adding these Lines manually will only worsen speech quality (at least to me it did). [user:blindcoder]

Allowing ssh access over wlan

NOTE: This is out of date for recent versions of SHR, which has replaced dropbear with openssh.

Initially the SHR image is configured to allow ssh access only over USB networking, not using WLAN.
This behaviour can be changed by editing the file /etc/default/dropbear that determines at which IP address the ssh daemon ("dropbear") does listen:

Replace the line

DROPBEAR_PORT=`ip addr list usb0 | awk 'BEGIN { FS="[ /]+" } /inet / { print  $3 }'`:22                                      

which configures ssh to only listen on the usb0 IP, by the line


where ssh works over any interface or IP. Using the line

DROPBEAR_PORT=`ip addr list eth0 | awk 'BEGIN { FS="[ /]+" } /inet / { print  $3 }'`:22                                      

ssh only listens on the wifi IP, instead: HOWEVER it requires that wifi be connected and have an IP before dropbear is started, which is normally during bootup, several steps BEFORE networking is started... NOTE: the longer forms also will break SSH if you have multiple IP addresses on a single interface. The most reliable means of controlling access is using iptables to firewall the device, rather than changing service startup parameters dynamically at boot time.

WARNING! Only do this if you've also set a root password using the passwd command! [user:blindcoder]


navit itselves is easily installed:

opkg install navit


Navigation software is useless without appropriate maps.

For navit there are several options here. See the wiki of the navit project for details.

Turn off auto-suspend

If you don't want your phone to automatically suspend after some time of inactivity, in /etc/frameworkd.conf set the timeout for suspending in the odeviced.idlenotifier section to 0, which turns it off:

suspend = 0

With SHR-Settings

To begin with, make sure you disable screen blanking and suspend in the illume power settings (Wrench->Power). Then open SHR settings, click on 'Power', disable auto-suspend by dragging the slider and set the suspend time to 0. You may have to keep the shr-settings application open.

Make your hardware keyboard work under X

just replace /etc/X11/Xserver by this one:;a=blob_plain;f=packages/xserver-kdrive-common/xserver-kdrive-common/openmoko/Xserver;h=a26c5c2d702dd427529f5c67e94058456bc49407

Then you will be annoyed by the dimming,because typing with the keyboard isn't taken into account by the framework, so the next step is to comment this part in /etc/freesmartphone/oevents/rules.yaml

#    trigger: IdleState()
#    filters: HasAttr(status, "idle_dim")
#    actions: SetDisplayBrightness("pcf50633_bl", 20)
#    trigger: IdleState()
#    filters: HasAttr(status, "idle_prelock")
#    actions: SetDisplayBrigh#tness("pcf50633_bl", 0)

System lacks lots of functionality after a kernel update

Normally the reason for this is that the dependency list of kernel modules is still missing for the new kernel
Just execute a

depmod -a

and reboot. The system should now work again.

If you want to make your phone recalculate the module dependencies automatically from now on type in the following:

cat > /etc/init.d/moduledepends << EOF
if cmp /proc/version /var/lib/kernelversion; then
   echo Not recalculating the module dependencies: Kernel has not changed.
   echo Recalculating the kernel module dependencies...
   depmod -a
   cp /proc/version /var/lib/kernelversion

chmod +x /etc/init.d/moduledepends
ln -s ../init.d/moduledepends /etc/rc1.d/S00moduledepends
ln -s ../init.d/moduledepends /etc/rc2.d/S00moduledepends
ln -s ../init.d/moduledepends /etc/rc3.d/S00moduledepends
ln -s ../init.d/moduledepends /etc/rc4.d/S00moduledepends
ln -s ../init.d/moduledepends /etc/rc5.d/S00moduledepends

Make your WIFI more reliable

The WIFI tries to save as much power as possible. If you want it to be more powerful and thus to be able to communicate under circumstances in which it normally won't do the following:

After boot or before connecting do:

wmiconfig -i eth0 --power maxperf

of course you need to find wmiconfig or to compile it. The one of unstable works:

opkg install



It makes sense to set the timezone right, since it enables

  • Daylight saving
  • The agps functionality: Your GPS knows where you have been last, and the time => which satellites to search for first, and can get a fix as fast as possible.
  • The "sync time with GPS" button in the settings program to work correctly.

Just install one of these:



opkg install tzdata-europe

Then create a symlink named /etc/localtime which points to the appropriate file in /usr/share/zoneinfo. For example, if you're in France., the following command will link the correct zoneinfo file to your /etc/localtime, giving you the correct time:

ln -sf /usr/share/zoneinfo/Europe/Paris /etc/localtime

Afterwards, edit /etc/timezone if necessary

Local timezone work instantly for the current boot when:

export TZ

For a permanent timezone change edit /etc/profile and change to:


The time itselves

Setting date/time from your linux box:

ssh "date -u -s `date -u +%m%d%H%M%Y.%S`"

Sync the hardware clock with the system time to make your change persist over reboots:

hwclock --systohc

Is this better?:

hwclock --utc --systohc

Alternatively in shr-unstable there is a button in the time settings part of the settings program that syncs the time with the GPS - or via ntp with a computer in the internet.

If this updates the hardware clock as well I haven't tested.

upgrading from minimal to the full image

Don't know if I have missed a package, but AFAIK upgrading is simple:

opkg update
opkg task-shr-apps task-shr-games task-shr-gtk

Some Applications not visible in launcher

There's a mistake in the *.desktop file, instead of having the category "Applications" it has the category "Application". You can fix this in one of two ways, either edit the *.desktop file in /usr/share/applications or edit /etc/xdg/menus/, scroll down to the bottom and add "<Category>Application</Category>" to the <Or> section of the "Accessories" <menu>.

Use OM.2008 GTK-Theme

opkg install
opkg -force-depends install
echo "include \"/usr/share/themes/Moko/gtk-2.0/gtkrc\"" > /home/root/.gtkrc-2.0

Upgrading the GSM Firmware

WARNING: there are chances to _completely_ brick your GSM modem on messing around with FLUID! Please watch out for typos!

first, log into your openmoko running SHR version 20080216 or greater.

next, we're going to shut down all of the processes accessing the ttySAC0 device. to find a list of programs accessing the device, perform the following:

root@om-gta01 ~ $ lsof | grep ttySAC0
gsm0710mu 1075       root    7u   CHR     204,64           82 /dev/ttySAC0

This shows you the gsm0710muxd daemon is running, and using the GSM device. now, on the SHR distro, and other FSO based distros, gsm0710muxd is started by frameworkd, and framework is started by ophonekitd, so to shut down this process, we're going to:

root@om-gta01 ~ $ /etc/init.d/frameworkd stop
Stopping framework daemon: stopped process in pidfile '/var/run/' (pid 1036)
root@om-gta01 ~ $

The pid number above does not matter. Now, we're going to check again to make sure gsm0710muxd is not running, and no other processes are touching the modem.

root@om-gta01 ~ $ lsof | grep ttySAC0
root@om-gta01 ~ $

OK! its now safe to start working on flashing the GSM firmware.

First, we're going to install and on your device:

root@om-gta01 ~ $ opkg install

Installing fluid (0.0+svn20070817-r2) to root...
Configuring fluid
root@om-gta01 ~ $ opkg install
Multiple packages (s3c24xx-gpio and s3c24xx-gpio) providing same name marked HOLD or PREFER.  Using latest.
Multiple packages (s3c24xx-gpio and s3c24xx-gpio) providing same name marked HOLD or PREFER.  Using latest.
Upgrading s3c24xx-gpio on root from 1.0+svnr4130-r2 to 1.0+svnr4130-r2.1...
Configuring s3c24xx-gpio
root@om-gta01 ~ $ 

Next, we're going to download the new GSM firmware we want to flash to the device:

root@om-gta01 ~ $ wget

We're now ready to lobotomize your unit! this is the step that can fail graphically, and possibly toast your unit. YOU HAVE BEEN WARNED AGAIN!

root@om-gta01 ~ $ echo 0 >/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on
root@om-gta01 ~ $ echo 1 >/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on
root@om-gta01 ~ $ s3c24xx-gpio b7=0
root@om-gta01 ~ $ echo "AT@POFF" >/dev/ttySAC0

Next, we're going to launch FLUID.

root@om-gta01 ~ $ cd /usr/sbin
root@om-gta01 /usr/sbin $ FLUID_PORT=/dev/ttySAC0 FLUID_FLOWCONTROL=h fluid.exe -oO -b 115200 -f /home/root/calypso-moko11-beta1.m0
FLUID Revision 2.27, (23 Aug 2004). Copyright Texas Instruments, 2001-2004.
Reading image file: '/home/root/calypso-moko11-beta1.m0' (2138kB) ok
Bootloader: (reset target) 

Log in again from a second SSH prompt, and manually start the modem:

root@om-gta01 ~ $ s3c24xx-gpio b7=1
root@om-gta01 ~ $ 

Now, switch back to the ssh session you have FLUID launched on. you should see something like the following:

root@om-gta01 /usr/sbin $ FLUID_PORT=/dev/ttySAC0 FLUID_FLOWCONTROL=h fluid.exe -oO -b 115200 -f /home/root/calypso-moko11-beta1.m0 
FLUID Revision 2.27, (23 Aug 2004). Copyright Texas Instruments, 2001-2004.
Reading image file: '/home/root/calypso-moko11-beta1.m0' (2138kB) ok
Bootloader: (reset target) (fluid, version 3) ok
Checksumming (269 * 8kB = 2152kB):  ok
Flash Detect: (0xEC, 0x22A0) Samsung K5A3240CT ok
Program: (35 sectors, 269*8k=2152k) (*******************) ok
root@om-gta01 /usr/sbin $ 

You will likely have to wait for the "Program" step to complete.

To verify that everything went well, we're going to manually send some commands to the modem. in one of your SSH sessions, type the following:

root@om-gta01 /usr/sbin $ cat /dev/ttySAC0

now, in the other session, we're going to send commands to the modem.

root@om-gta01 ~ $ echo -en 'AT\r' >/dev/ttySAC0
root@om-gta01 ~ $ echo -en 'AT+CGMR\r' >/dev/ttySAC0

in the first session, you should see something like the following:

root@om-gta01 /usr/sbin $ cat /dev/ttySAC0  
AT-Command Interpreter ready
+CGMR: "GSM: gsm_ac_gp_fd_pu_em_cph_ds_vc_cal35_ri_36_amd8_ts0-Moko11b1"


hit control-C in the first session to stop the output of the modem. you're done! at this point, reboot your phone.

shr unstable

There is a great rework of shr-unstable in progress right now. So if you want to really use the phone use shr-testing instead for now: shr-testing works and is quite stable+usable.

If you want to track the leading edge, though, due to the experimental nature of shr-unstable some tweaks might be necessary.

No launcher icons

The fix is easy:

opkg install menu-freesmartphone
rm /usr/share/applications/exposure.desktop
opkg install e-wm-menu

Now restart the X server. All Icons should be back again.

using the simple screen lock instead of shr-today

Some users don't like the new shr-today and they want back the simple lock (where just a small part of the screen is hidden). First, you have to change idle_screen in /etc/phonefsod.conf (this prevents opening shr-today when pressing AUX):

# when to show idle screen
# a list of comma separated flags with the following meaning:
# aux: toggle idle screen by pressing AUX
# lock: automatically show idle screen in idle_lock idle state
# phone: do even show it during active calls
idle_screen = none

Go to illume-config -> Input -> Key Bindings, select "XF86Phone" in the left list and "Desktop Simple Lock" in the right list (without unselecting "XF86Phone"). After applying the change, pressing AUX invokes the simple lock screen.

Already deployed in shr

Make your GSM more reliable

Under some unknown circumstances you may suffer from the famous Bug if you have a GSM module with a specific firmware. It makes the GSM chip oscillating between registered and not registered about every minute, if GSM deep sleep is enabled. There's a workaround which disables deep sleep:

Add the following to the ogsmd section of /etc/frameworkd.conf file:

ti_calypso_deep_sleep = never

This fix is deployed by default on SHR. If you don't need this fix (It is only needed for very few GSM modules with the said firmware version) you can delete this line and save some additional power.