first-run-wizard.sh: Moved touchscreen calibration to beginning.
[openpandora.oe.git] / recipes / pandora-system / pandora-first-run-wizard / first-run-wizard.sh
1 #!/bin/sh
2
3 # Initially based on the scripts by JohnX/Mer Project - http://wiki.maemo.org/Mer/
4 # Reworked for the OpenPandora - John Willis/Michael Mrozek
5
6 # You can start the wizard from the shell using 'xinit ./first-boot-init.sh'
7
8 export LANG=en_GB.UTF-8
9 export GTK2_RC_FILES=/usr/share/themes/Xfce/gtk-2.0/gtkrc
10 xmodmap /etc/skel/.pndXmodmap
11
12 # Ensure there is a wheel group for sudoers to be put into.
13 # TODO: Do this somewhere better.
14 groupadd wheel
15
16 # We load up a background image here.
17 export WALLPAPER='/usr/share/xfce4/backdrops/op-firstrun.png'
18 hsetroot -center $WALLPAPER
19
20 # Find out what unit the user has.
21 pnd_version=$(dmesg | grep OMAP3 | grep ES | awk '{print $3}')
22 es_version=$(dmesg | grep OMAP3 | grep ES | awk '{print $4}')
23 if [ "$pnd_version" == "OMAP3630" ]; then
24     pnd_version="1GHz"
25 fi
26   if [ "$pnd_version" == "OMAP3430/3530" ]; then
27     pnd_version="Rebirth"
28   if [ "$es_version" == "ES2.1" ]; then
29     pnd_version="Classic"
30   fi
31 fi
32
33 # Default error message (should a user hit cancel, validation fail etc.).
34 ERROR_WINDOW='zenity --title="Error" --error --text="Sorry! Please try again." --timeout 6'
35
36 RESET_ROOT="yes"
37
38 xset s off
39 xset -dpms
40
41 #Stop WiFi
42 rmmod board_omap3pandora_wifi wl1251_sdio wl1251
43
44 # Greet the user.
45
46 if zenity --question --title="Pandoras Box has been opened." --text="Welcome!\n\nPandora's Box has been opened.\n\nThis wizard will help you setting up your $pnd_version OpenPandora handheld before the first use.\n\nYou will be asked a few simple questions to personalise and configure your device.\n\nDo you want to set up your unit now or shut the unit down and do it later?" --ok-label="Start now" --cancel-label="Shutdown" ; then
47 # ----
48
49 # Calibrate touchscreen.
50
51 if zenity --question --title="Calibrate Touchscreen" --text="It is recommended to calibrate the touchscreen to make sure it accurately works.\n\nIf you do so, you will see a moving crosshair.\nUse the stylus to press the crosshair as accurate as possible.\n\nYou can always (re-)calibrate it from the Settings-Menu later in the OS as well." --ok-label="Calibrate Touchscreen" --cancel-label="Don't calibrate it"; then
52   . /etc/profile
53   TSLIB_CONSOLEDEVICE=none op_runfbapp ts_calibrate
54   /usr/pandora/scripts/op_touchinit.sh
55 while ! zenity --question --title="Check Calibration" --text="Your new calibration setting has been applied.\n\nPlease check if the touchscreen is now working properly.\nIf not, you might want to try a recalibration.\n\n(Hint: use the nubs to press the button if the touchscreen is way off)" --ok-label="The touchscreen is fine" --cancel-label="Recalibrate"; do
56       TSLIB_CONSOLEDEVICE=none op_runfbapp ts_calibrate
57   /usr/pandora/scripts/op_touchinit.sh  
58 done
59 fi
60
61 # Reset ROOT's password to something random 
62
63 # (I know the image build sets the password to something pusdo-random)
64 # (ok, urandom is not 100% secure but it's good enough for our needs)
65
66 if [ $RESET_ROOT == "yes" ]; then
67         rootpwd=$(cat /dev/urandom|tr -dc "a-zA-Z0-9-_\$\?"|fold -w 30|head -n 1)
68 passwd "root" <<EOF
69 $rootpwd
70 $rootpwd
71 EOF
72         rootpwd=""
73 fi
74
75 # ----
76
77 # Setup the full name and username.
78
79 while ! name=$(zenity --title="Please enter your full name" --entry --text "Please enter your full name.") || [ "x$name" = "x" ] ; do
80         zenity --title="Error" --error --text="Please try again." --timeout 6
81 done
82
83 username_guess=$(echo "$name" | cut -d" " -f1 | tr A-Z a-z)
84
85 while ! username=$(zenity --title="Enter your username" --entry --text "Please choose a short username.\n\nIt should be all lowercase and contain only letters and numbers." --entry-text "$username_guess") || [ "x$username" = "x" ] ; do
86         zenity --title="Error" --error --text="Please try again." --timeout 6
87 done
88
89 while ! useradd -c "$name,,," -G adm,audio,cdrom,netdev,plugdev,users,video,wheel "$username" ; do
90         username=$(zenity --title="Please check username" --entry --text "Please ensure that your username consists of only\nletters and numbers and is not already in use on the system." --entry-text "$username")
91 done
92
93 # ----
94
95 # Setup the users password.
96
97 password=""
98 while [ x$password = x ] ; do
99         password1=$(zenity --title=Password --entry --text="Please choose a new password." --hide-text)
100         password2=$(zenity --title=Confirm --entry --text="Confirm your new password." --hide-text)
101         if [ $password1 != $password2 ] ; then 
102                 zenity --title="Error" --error --text="The passwords do not match.\n\nPlease try again." --timeout 6
103         else 
104                 if [ x$password1 = x ] ; then
105                         zenity --title="Error" --error --text="Password cannot be blank!\n\nPlease try again." --timeout 6
106                 else
107                         password=$password1
108                 fi
109         fi
110 done
111
112 passwd "$username" <<EOF
113 $password
114 $password
115 EOF
116
117 # ----
118
119 # Pick a name for the OpenPandora.
120
121 while ! hostname=$(zenity --title="Name your Pandora" --entry --text "Please choose a name for your OpenPandora.\n\nIt should only contain letters, numbers and dashes, no spaces." --entry-text "$username-openpandora") || [ "x$hostname" = "x" ]; do 
122         zenity --title="Error" --error --text="Please try again."
123 done
124
125
126 echo $hostname > /etc/hostname
127 hostname =$(sed 's/ /_/g' /etc/hostname)
128 echo $hostname > /etc/hostname
129 echo "127.0.0.1 localhost.localdomain localhost $hostname" > /etc/hosts
130 hostname -F /etc/hostname
131
132 # Set the correct user for Autologin and enable / disable it.
133
134 if zenity --question --title="Autologin" --text="If you like, you can setup your Pandora to autologin into the system at startup.\nWhile this is more convenient for most users, it features a potential security issue, as no password will be needed to access your desktop and personal files.\n\nDo you wish to automatically login at startup?" --ok-label="Yes" --cancel-label="No"; then         
135         # echo "PREFERED_USER=$username" > /etc/default/autologin
136         sed -i "s/.*default_user.*/default_user $username/g" /etc/slim.conf
137         sed -i 's/.*auto_login.*/auto_login yes/g' /etc/slim.conf
138 else
139         if zenity --question --title="User" --text="Do you wish to have your username automatically populated in the login screen?\n\nNote: This is ideal if you're the only user of the OpenPandora but wish to disable autologin and use a password." --ok-label="Yes" --cancel-label="No"; then 
140                 sed -i "s/.*default_user.*/default_user $username/g" /etc/slim.conf
141                 sed -i 's/.*auto_login.*/auto_login no/g' /etc/slim.conf
142         else
143                 sed -i "s/.*default_user.*/default_user/g" /etc/slim.conf
144                 sed -i 's/.*auto_login.*/auto_login no/g' /etc/slim.conf
145         fi
146 fi
147
148 # ----
149
150 # Select the default interface and setup SLiM to pass that as a sesion to ~./.xinitrc
151
152 selection=""
153 while [ x$selection = x ]; do
154 selection=$(cat /etc/pandora/conf/gui.conf | awk -F\; '{print $1 "\n" $2 }' | zenity --width=500 --height=310 --title="Select the Default GUI" --list --column "Name" --column "Description" --text "You can now select your preferred GUI - the GUI that will be loaded automatically on startup of the unit.\n\nYou can either select XFCE4, which is a full desktop environment (similar to a normal PC).\nOr you could select MiniMenu, which is a minimal UI similar to gaming devices.\n\nIf you select the last choice (GUISwitch), you will be prompted to choose a GUI each time you boot your Pandora.\n\nThis setting can always be changed later by running the Startup-Settings." )
155 if [ x$selection = x ]; then
156   zenity --title="Error" --error --text="Please select a GUI." --timeout=6
157 fi
158 done
159
160 echo $selection
161
162 gui=$(grep $selection /etc/pandora/conf/gui.conf | awk -F\; '{print $3}')
163 stopcommand=$(grep $selection /etc/pandora/conf/gui.conf | awk -F\; '{print $4}')
164
165 echo $gui
166
167 if [ $gui ]; then 
168   sed -i "s/.*DEFAULT_SESSION=.*/DEFAULT_SESSION=$gui/g" /home/$username/.xinitrc
169   echo $selection selected as default interface
170   zenity --info --title="Selected session" --text "You selected $selection as default setting." --timeout 6
171 else
172   sed -i 's/.*DEFAULT_SESSION=.*/DEFAULT_SESSION=startxfce4/g' /home/$username/.xinitrc
173 fi
174
175 # ----
176
177 # Set the timezone and date/time
178
179 while ! area=$(zenity --list --title "Select your time zone" --text="Please select your area" --column="Select your area" --print-column=1 "Africa" "America" "Asia" "Australia" "Europe" "Pacific" --width=500 --height=260) || [ "x$area" = "x" ] ; do
180         zenity --title="Error" --error --text="Please select your area." --timeout=6
181 done
182
183 while ! timezone=$(ls -1 /usr/share/zoneinfo/$area | zenity ---width=500 --height=200 --title="Select your closest location" --list --column "Closest Location" --text "Please select the location closest to you") || [ "x$timezone" = "x" ] ; do
184         zenity --title="Error" --error --text="Please select your location." --timeout=6
185 done
186
187 echo $timezone
188 rm /etc/localtime && ln -s /usr/share/zoneinfo/$area/$timezone /etc/localtime
189
190 #Make sure we clean up any leading zeros in the day (as Zenity freaks out)
191 date_d=`date +%d | sed 's/^0//'`
192 date_m=`date +%m | sed 's/^0//'`
193 date_y=`date +%Y`
194
195 while ! date=$(zenity --calendar --text="Please select the current date" --title "Please select the current date" --day=$date_d --month=$date_m --year=$date_y --date-format="%Y%m%d" --width=500) || [ "x$date" = "x" ] ; do
196         zenity --title="Error" --error --text="Please select the date." --timeout 6
197 done
198
199 echo $date
200
201 time_h=`date +%H`
202 time_m=`date +%M`
203
204 while ! time=$(zenity --title="Enter current time" --entry --text "Please enter the time in 24hour format (HH:MM).\n" --entry-text "$time_h:$time_m") || [ "x$time" = "x" ] ; do
205         zenity --title="Error" --error --text="Please input the time." --timeout 6
206 done
207
208 while ! date -d $time ; do
209         time=$(zenity --title="Enter current time" --entry --text "Please enter the time in 24hour format (HH:MM).\n" --entry-text "$time_h:$time_m")
210 done
211  
212 date +%Y%m%d -s $date
213 date +%H:%M -s $time
214 hwclock -u -w
215
216
217 # Let the user choose his desired clockspeed.
218
219 if [ "$pnd_version" == "1GHz" ]; then 
220       cpusel=$(zenity --title="Optional settings" --width="400" --height="300" --list --column "id" --column "Please select" --hide-column=1 --text="The CPU of the Pandora supports different speed settings.\nHigher speeds might make some units unstable and decrease the lifetime of your CPU.\n\nBelow are some quick profiles which will help you to configure your system the way you like it.\n" "1200" "Clockspeed: 1,2Ghz, OPP4 (probably unstable)" "1100" "Clockspeed: 1,1Ghz, OPP4 (should be stable)" "1000" "Clockspeed: 1GHz, OPP4 (Default Speed)" --ok-label="Select CPU Profile" )
221     else
222       cpusel=$(zenity --title="Optional settings" --width="400" --height="300" --list --column "id" --column "Please select" --hide-column=1 --text="The CPU of the Pandora supports different speed settings.\nHigher speeds might make some units unstable and decrease the lifetime of your CPU.\n\nBelow are some quick profiles which will help you to configure your system the way you like it.\n" "900" "Clockspeed: 900Mhz, OPP5 (probably unstable)" "800" "Clockspeed: 800Mhz, OPP5 (should be stable)" "600" "Clockspeed: 600MHz, OPP3 (Default Speed)" --ok-label="Select CPU Profile" )
223     fi
224     
225     case $cpusel in
226         "1200")
227         echo 4 > /proc/pandora/cpu_opp_max
228         sed -i "s/.*maxopp.*/maxopp:4/g" /etc/pandora/conf/cpu.conf
229         sed -i "s/.*max:.*/max:1300/g" /etc/pandora/conf/cpu.conf
230         sed -i "s/.*default.*/default:1200/g" /etc/pandora/conf/cpu.conf
231         sed -i "s/.*safe.*/safe:1200/g" /etc/pandora/conf/cpu.conf
232         sync
233         /usr/pandora/scripts/op_cpuspeed.sh -n 1200
234         zenity --info --title="CPU Speed set" --text "The maximum CPU Speed has been set to 1,2GHz." --timeout 6
235         ;;
236     
237         "1100")
238         echo 4 > /proc/pandora/cpu_opp_max
239         sed -i "s/.*maxopp.*/maxopp:4/g" /etc/pandora/conf/cpu.conf
240         sed -i "s/.*max:.*/max:1200/g" /etc/pandora/conf/cpu.conf
241         sed -i "s/.*default.*/default:1100/g" /etc/pandora/conf/cpu.conf
242         sed -i "s/.*safe.*/safe:1100/g" /etc/pandora/conf/cpu.conf
243         sync
244         /usr/pandora/scripts/op_cpuspeed.sh -n 1100
245         zenity --info --title="CPU Speed set" --text "The maximum CPU Speed has been set to 1,1GHz." --timeout 6
246         ;;
247
248         "1000")
249         echo 4 > /proc/pandora/cpu_opp_max
250         sed -i "s/.*maxopp.*/maxopp:4/g" /etc/pandora/conf/cpu.conf
251         sed -i "s/.*max:.*/max:1100/g" /etc/pandora/conf/cpu.conf
252         sed -i "s/.*default.*/default:1000/g" /etc/pandora/conf/cpu.conf
253         sed -i "s/.*safe.*/safe:1000/g" /etc/pandora/conf/cpu.conf
254         sync
255         /usr/pandora/scripts/op_cpuspeed.sh -n 1000
256         zenity --info --title="CPU Speed set" --text "The maximum CPU Speed has been set to 1GHz." --timeout 6
257         ;;      
258
259         "900")
260         echo 5 > /proc/pandora/cpu_opp_max
261         sed -i "s/.*maxopp.*/maxopp:5/g" /etc/pandora/conf/cpu.conf
262         sed -i "s/.*max:.*/max:950/g" /etc/pandora/conf/cpu.conf
263         sed -i "s/.*default.*/default:900/g" /etc/pandora/conf/cpu.conf
264         sed -i "s/.*safe.*/safe:900/g" /etc/pandora/conf/cpu.conf
265         sync
266         /usr/pandora/scripts/op_cpuspeed.sh -n 900
267         zenity --info --title="CPU Speed set" --text "The maximum CPU Speed has been set to 900MHz." --timeout 6
268         ;;
269         
270         "800")
271         echo 5 > /proc/pandora/cpu_opp_max
272         sed -i "s/.*maxopp.*/maxopp:5/g" /etc/pandora/conf/cpu.conf
273         sed -i "s/.*max:.*/max:900/g" /etc/pandora/conf/cpu.conf
274         sed -i "s/.*default.*/default:800/g" /etc/pandora/conf/cpu.conf
275         sed -i "s/.*safe.*/safe:800/g" /etc/pandora/conf/cpu.conf
276         sync
277         /usr/pandora/scripts/op_cpuspeed.sh -n 800
278         zenity --info --title="CPU Speed set" --text "The maximum CPU Speed has been set to 800MHz." --timeout 6
279         ;;
280
281
282         "600")
283         echo 3 > /proc/pandora/cpu_opp_max
284         sed -i "s/.*maxopp.*/maxopp:3/g" /etc/pandora/conf/cpu.conf
285         sed -i "s/.*max:.*/max:700/g" /etc/pandora/conf/cpu.conf
286         sed -i "s/.*default.*/default:600/g" /etc/pandora/conf/cpu.conf
287         sed -i "s/.*safe.*/safe:600/g" /etc/pandora/conf/cpu.conf
288         sync
289         /usr/pandora/scripts/op_cpuspeed.sh -n 600
290         zenity --info --title="CPU Speed set" --text "The maxmimum CPU Speed has been set to 600Mhz." --timeout 6
291         ;;
292
293 esac
294
295 # ----
296
297 # NOTE: This is just a temporary fix! These daemons should be removed from startup in the OE recipes. Until the time is found, we'll do it from here.
298 update-rc.d -f samba remove
299 update-rc.d -f xinetd remove
300 update-rc.d -f avahi-daemon remove
301 update-rc.d -f apmd remove
302 update-rc.d -f banner remove
303 update-rc.d -f portmap remove
304 update-rc.d -f mountnfs remove
305 update-rc.d -f blueprobe remove
306 update-rc.d -f dropbear remove
307 update-rc.d -f wl1251-init remove
308 # leave this one alone, needed for OTG host mode, powersaving should be ok on 3.2.39 at least
309 #update-rc.d -f usb-gadget remove
310
311 # prevent wifi from being autoloaded on later kernels, let wl1251-init script do it
312 if ! grep -q 'blacklist wl1251_sdio' /etc/modprobe.conf 2> /dev/null; then
313   echo 'blacklist wl1251_sdio' >> /etc/modprobe.conf
314 fi
315 # we don't ship firmware for rtl8192cu, and it was reported not to work
316 # with the right firmware anyway (not verified though)
317 # vendor 8192cu is compiled instead for now
318 if ! grep -q 'blacklist rtl8192cu' /etc/modprobe.conf 2> /dev/null; then
319   echo 'blacklist rtl8192cu' >> /etc/modprobe.conf
320 fi
321
322 # add Midi Module and zram
323 echo snd-seq>>/etc/modules
324 echo zram>>/etc/modules
325
326 # get rid of some dirs in /media that OE creates but are unlikely to be used
327 rmdir /media/card /media/cf /media/mmc1 /media/net /media/realroot /media/union 2> /dev/null
328
329 # Write the control file so this script is not run on next boot 
330 # (hackish I know but I want the flexability to drop a new script in later esp. in the early firmwares).
331
332 touch /etc/pandora/first-boot
333 # Make the control file writeable by all to allow the user to delete to rerun the wizard on next boot.
334 chmod 0666 /etc/pandora/first-boot
335
336
337
338
339
340 # Let the user run optional config stuff.
341
342 while mainsel=$(zenity --title="Optional settings" --width="400" --height="300" --list --column "id" --column "Please select" --hide-column=1 --text="This concludes the mandatory part of the First Boot Wizard.\n\nYou can now either continue to boot the system or change some more settings.\n\n\nThank you for buying the OpenPandora. Enjoy using the device." "speed" "Advanced CPU-Speed and Overclocking-Settings" "startup" "Advanced Startup-Settings" "lcd" "LCD-Settings" --ok-label="Change selected Setting" --cancel-label="Finish Setup"); do
343
344 case $mainsel in
345   "speed")
346   /usr/pandora/scripts/op_cpusettings.sh
347   ;;
348
349    "startup")
350   echo $username > /tmp/currentuser
351   /usr/pandora/scripts/op_startupmanager.sh
352   ;;
353
354    "lcd")
355   /usr/pandora/scripts/op_lcdsettings.sh
356   ;;
357
358 esac
359 done
360 # ----
361
362 rm /tmp/nocleanwarn
363 # ----
364 else
365 poweroff
366 fi