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