3d82718276c14b9058060f18ae5c2a6a97027e66
[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 # Default error message (should a user hit cancel, validation fail etc.).
21 ERROR_WINDOW='zenity --title="Error" --error --text="Sorry! Please try again." --timeout 6'
22
23 RESET_ROOT="yes"
24
25 xset s off
26 xset -dpms
27
28 #Stop WiFi
29 rmmod board_omap3pandora_wifi wl1251_sdio wl1251
30
31 # Greet the user.
32
33 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 new 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
34 # ----
35
36 # Reset ROOT's password to something random 
37
38 # (I know the image build sets the password to something pusdo-random)
39 # (ok, urandom is not 100% secure but it's good enough for our needs)
40
41 if [ $RESET_ROOT == "yes" ]; then
42         rootpwd=$(cat /dev/urandom|tr -dc "a-zA-Z0-9-_\$\?"|fold -w 30|head -n 1)
43 passwd "root" <<EOF
44 $rootpwd
45 $rootpwd
46 EOF
47         rootpwd=""
48 fi
49
50 # ----
51
52 # Ask the user to calibrate the touchscreen.
53
54 #if zenity --question --title="Touchscreen calibration" --text="It is recommended to calibrate and test the device touchscreen.\n\nDo you wish to calibrate the touchscreen now?" --ok-label="Yes" --cancel-label="No"; then 
55 #       # Make sure we have a sane environment as this script will be run long before any /etc/profile stuff.
56 #       . /etc/profile.d/tslib.sh
57 #       # Delete the pointercal file (do we want to do that?)
58 #       # rm /etc/pointercal
59 #       # Spawn the ts_* tools as subprocesses that will return to the script.
60 #       echo Running ts_calibrate       
61 #       /usr/bin/ts_calibrate
62 #       wait
63 #       echo Running ts_test
64 #       /usr/bin/ts_test
65 #       wait
66 #fi
67
68 # ----
69
70 # Setup swap partition if the user has placed an SD with a swap partition on it.
71
72 #swap_part=$(sfdisk -l /dev/mmcblk? | grep swap | cut -d" " -f1)
73 #if [ x$swap_part != x ] ; then
74 #       use_swap=$(zenity --title="Enable swap?" --text "Swap partition found on SD card. Would you like to use it?\n\nWarning: This SD must remain in the system to use the swap." --list --radiolist --column " " --column "Answer" TRUE "Use swap on $swap_part" FALSE "Do not use swap")
75 #       if [ "$use_swap" = "Use swap on $swap_part" ] ; then
76 #               swapon $swap_part
77 #                       echo "$swap_part none swap sw 0 0" >> /etc/fstab
78 #       fi
79 #fi
80
81 # ----
82
83 # Setup the full name and username.
84
85 while ! name=$(zenity --title="Please enter your full name" --entry --text "Please enter your full name.") || [ "x$name" = "x" ] ; do
86         zenity --title="Error" --error --text="Please try again." --timeout 6
87 done
88
89 username_guess=$(echo "$name" | cut -d" " -f1 | tr A-Z a-z)
90
91 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
92         zenity --title="Error" --error --text="Please try again." --timeout 6
93 done
94
95 while ! useradd -c "$name,,," -G adm,audio,cdrom,netdev,plugdev,users,video,wheel "$username" ; do
96         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")
97 done
98
99 # ----
100
101 # Setup the users password.
102
103 password=""
104 while [ x$password = x ] ; do
105         password1=$(zenity --title=Password --entry --text="Please choose a new password." --hide-text)
106         password2=$(zenity --title=Confirm --entry --text="Confirm your new password." --hide-text)
107         if [ $password1 != $password2 ] ; then 
108                 zenity --title="Error" --error --text="The passwords do not match.\n\nPlease try again." --timeout 6
109         else 
110                 if [ x$password1 = x ] ; then
111                         zenity --title="Error" --error --text="Password cannot be blank!\n\nPlease try again." --timeout 6
112                 else
113                         password=$password1
114                 fi
115         fi
116 done
117
118 passwd "$username" <<EOF
119 $password
120 $password
121 EOF
122
123 # ----
124
125 # Pick a name for the OpenPandora.
126
127 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 
128         zenity --title="Error" --error --text="Please try again."
129 done
130
131
132 echo $hostname > /etc/hostname
133 hostname =$(sed 's/ /_/g' /etc/hostname)
134 echo $hostname > /etc/hostname
135 echo "127.0.0.1 localhost.localdomain localhost $hostname" > /etc/hosts
136 hostname -F /etc/hostname
137
138 # Set the correct user for Autologin and enable / disable it.
139
140 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         
141         # echo "PREFERED_USER=$username" > /etc/default/autologin
142         sed -i "s/.*default_user.*/default_user $username/g" /etc/slim.conf
143         sed -i 's/.*auto_login.*/auto_login yes/g' /etc/slim.conf
144 else
145         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 
146                 sed -i "s/.*default_user.*/default_user $username/g" /etc/slim.conf
147                 sed -i 's/.*auto_login.*/auto_login no/g' /etc/slim.conf
148         else
149                 sed -i "s/.*default_user.*/default_user/g" /etc/slim.conf
150                 sed -i 's/.*auto_login.*/auto_login no/g' /etc/slim.conf
151         fi
152 fi
153
154 # ----
155
156 # Select the default interface and setup SLiM to pass that as a sesion to ~./.xinitrc
157
158 selection=""
159 while [ x$selection = x ]; do
160 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." )
161 if [ x$selection = x ]; then
162   zenity --title="Error" --error --text="Please select a GUI." --timeout=6
163 fi
164 done
165
166 echo $selection
167
168 gui=$(grep $selection /etc/pandora/conf/gui.conf | awk -F\; '{print $3}')
169 stopcommand=$(grep $selection /etc/pandora/conf/gui.conf | awk -F\; '{print $4}')
170
171 echo $gui
172
173 if [ $gui ]; then 
174   sed -i "s/.*DEFAULT_SESSION=.*/DEFAULT_SESSION=$gui/g" /home/$username/.xinitrc
175   echo $selection selected as default interface
176   zenity --info --title="Selected session" --text "You selected $selection as default setting." --timeout 6
177 else
178   sed -i 's/.*DEFAULT_SESSION=.*/DEFAULT_SESSION=startxfce4/g' /home/$username/.xinitrc
179 fi
180
181 # ----
182
183 # Set the timezone and date/time
184
185 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
186         zenity --title="Error" --error --text="Please select your area." --timeout=6
187 done
188
189 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
190         zenity --title="Error" --error --text="Please select your location." --timeout=6
191 done
192
193 echo $timezone
194 rm /etc/localtime && ln -s /usr/share/zoneinfo/$area/$timezone /etc/localtime
195
196 #Make sure we clean up any leading zeros in the day (as Zenity freaks out)
197 date_d=`date +%d | sed 's/^0//'`
198 date_m=`date +%m | sed 's/^0//'`
199 date_y=`date +%Y`
200
201 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
202         zenity --title="Error" --error --text="Please select the date." --timeout 6
203 done
204
205 echo $date
206
207 time_h=`date +%H`
208 time_m=`date +%M`
209
210 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
211         zenity --title="Error" --error --text="Please input the time." --timeout 6
212 done
213
214 while ! date -d $time ; do
215         time=$(zenity --title="Enter current time" --entry --text "Please enter the time in 24hour format (HH:MM).\n" --entry-text "$time_h:$time_m")
216 done
217  
218 date +%Y%m%d -s $date
219 date +%H:%M -s $time
220 hwclock -u -w
221
222
223 #Let's ask the user about clockspeed
224 while ! cpusel=$(zenity --title="Optional settings" --width="400" --height="350" --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" "1100" "Clockspeed: 1,1Ghz, OPP5 (should be stable on 1GHz units)" "1000" "Clockspeed: 1GHz, OPP5 (most probably unstable on 600Mhz units)" "800" "Clockspeed: 800MHz, OPP5 (should be stable on all units)" "600" "Clockspeed: 600MHz, OPP3 (600 MHz units only)" --ok-label="Select CPU Profile" ); do
225     zenity --title="Error" --error --text="Please select your desired CPU Speed profile." --timeout=6
226 done
227
228 case $cpusel in
229   "1100")
230   echo 5 > /proc/pandora/cpu_opp_max
231   sed -i "s/.*maxopp.*/maxopp:5/g" /etc/pandora/conf/cpu.conf
232   sed -i "s/.*max:.*/max:1200/g" /etc/pandora/conf/cpu.conf
233   sed -i "s/.*default.*/default:1100/g" /etc/pandora/conf/cpu.conf
234   sed -i "s/.*safe.*/safe:1100/g" /etc/pandora/conf/cpu.conf
235   default_cpu=1100
236   ;;
237
238   "1000")
239   echo 5 > /proc/pandora/cpu_opp_max
240   sed -i "s/.*maxopp.*/maxopp:5/g" /etc/pandora/conf/cpu.conf
241   sed -i "s/.*max:.*/max:1100/g" /etc/pandora/conf/cpu.conf
242   sed -i "s/.*default.*/default:1000/g" /etc/pandora/conf/cpu.conf
243   sed -i "s/.*safe.*/safe:1000/g" /etc/pandora/conf/cpu.conf
244   default_cpu=1000
245   ;;
246
247   "800")
248   echo 5 > /proc/pandora/cpu_opp_max
249   sed -i "s/.*maxopp.*/maxopp:5/g" /etc/pandora/conf/cpu.conf
250   sed -i "s/.*max:.*/max:900/g" /etc/pandora/conf/cpu.conf
251   sed -i "s/.*default.*/default:800/g" /etc/pandora/conf/cpu.conf
252   sed -i "s/.*safe.*/safe:800/g" /etc/pandora/conf/cpu.conf
253   default_cpu=800
254   ;;
255
256
257
258   "600")
259   echo 3 > /proc/pandora/cpu_opp_max
260   sed -i "s/.*maxopp.*/maxopp:3/g" /etc/pandora/conf/cpu.conf
261   sed -i "s/.*max:.*/max:700/g" /etc/pandora/conf/cpu.conf
262   sed -i "s/.*default.*/default:600/g" /etc/pandora/conf/cpu.conf
263   sed -i "s/.*safe.*/safe:600/g" /etc/pandora/conf/cpu.conf
264   default_cpu=600
265   ;;
266
267 esac
268
269 # ----
270
271 # 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.
272 update-rc.d -f samba remove
273 update-rc.d -f xinetd remove
274 update-rc.d -f avahi-daemon remove
275 update-rc.d -f apmd remove
276 update-rc.d -f banner remove
277 update-rc.d -f portmap remove
278 update-rc.d -f mountnfs remove
279 update-rc.d -f blueprobe remove
280 update-rc.d -f dropbear remove
281 update-rc.d -f wl1251-init remove
282 # leave this one alone, needed for OTG host mode, powersaving should be ok on 3.2.39 at least
283 #update-rc.d -f usb-gadget remove
284
285 # prevent wifi from being autoloaded on later kernels, let wl1251-init script do it
286 if ! grep -q 'blacklist wl1251_sdio' /etc/modprobe.conf 2> /dev/null; then
287   echo 'blacklist wl1251_sdio' >> /etc/modprobe.conf
288 fi
289 # we don't ship firmware for rtl8192cu, and it was reported not to work
290 # with the right firmware anyway (not verified though)
291 # vendor 8192cu is compiled instead for now
292 if ! grep -q 'blacklist rtl8192cu' /etc/modprobe.conf 2> /dev/null; then
293   echo 'blacklist rtl8192cu' >> /etc/modprobe.conf
294 fi
295
296 # add Midi Module and zram
297 echo snd-seq>>/etc/modules
298 echo zram>>/etc/modules
299
300 # get rid of some dirs in /media that OE creates but are unlikely to be used
301 rmdir /media/card /media/cf /media/mmc1 /media/net /media/realroot /media/union 2> /dev/null
302
303 # Write the control file so this script is not run on next boot 
304 # (hackish I know but I want the flexability to drop a new script in later esp. in the early firmwares).
305
306 touch /etc/pandora/first-boot
307 # Make the control file writeable by all to allow the user to delete to rerun the wizard on next boot.
308 chmod 0666 /etc/pandora/first-boot
309
310 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
311   . /etc/profile
312   TSLIB_CONSOLEDEVICE=none op_runfbapp ts_calibrate
313   /usr/pandora/scripts/op_touchinit.sh
314 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
315       TSLIB_CONSOLEDEVICE=none op_runfbapp ts_calibrate
316   /usr/pandora/scripts/op_touchinit.sh  
317 done
318 fi
319
320
321
322 # Let the user run optional config stuff.
323
324 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
325
326 case $mainsel in
327   "speed")
328   /usr/pandora/scripts/op_cpusettings.sh
329   ;;
330
331    "startup")
332   echo $username > /tmp/currentuser
333   /usr/pandora/scripts/op_startupmanager.sh
334   ;;
335
336    "lcd")
337   /usr/pandora/scripts/op_lcdsettings.sh
338   ;;
339
340 esac
341 done
342 # ----
343
344
345 # ----
346 else
347 poweroff
348 fi