pandora-first-run-wizard: fix blanking after time change for good
[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 # Greet the user.
29
30 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
31 # ----
32
33 # Reset ROOT's password to something random 
34
35 # (I know the image build sets the password to something pusdo-random)
36 # (ok, urandom is not 100% secure but it's good enough for our needs)
37
38 if [ $RESET_ROOT == "yes" ]; then
39         rootpwd=$(cat /dev/urandom|tr -dc "a-zA-Z0-9-_\$\?"|fold -w 30|head -n 1)
40 passwd "root" <<EOF
41 $rootpwd
42 $rootpwd
43 EOF
44         rootpwd=""
45 fi
46
47 # ----
48
49 # Ask the user to calibrate the touchscreen.
50
51 #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 
52 #       # Make sure we have a sane environment as this script will be run long before any /etc/profile stuff.
53 #       . /etc/profile.d/tslib.sh
54 #       # Delete the pointercal file (do we want to do that?)
55 #       # rm /etc/pointercal
56 #       # Spawn the ts_* tools as subprocesses that will return to the script.
57 #       echo Running ts_calibrate       
58 #       /usr/bin/ts_calibrate
59 #       wait
60 #       echo Running ts_test
61 #       /usr/bin/ts_test
62 #       wait
63 #fi
64
65 # ----
66
67 # Setup swap partition if the user has placed an SD with a swap partition on it.
68
69 #swap_part=$(sfdisk -l /dev/mmcblk? | grep swap | cut -d" " -f1)
70 #if [ x$swap_part != x ] ; then
71 #       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")
72 #       if [ "$use_swap" = "Use swap on $swap_part" ] ; then
73 #               swapon $swap_part
74 #                       echo "$swap_part none swap sw 0 0" >> /etc/fstab
75 #       fi
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\nThe screen might blank out after you changed the time.\nDon't panic. Simply press a button on the keyboard.\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\nThe screen might blank out after you changed the time.\nDon't panic. Simply press a button on the keyboard.\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
221 # 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.
222 update-rc.d -f samba remove
223 update-rc.d -f xinetd remove
224 update-rc.d -f avahi-daemon remove
225 update-rc.d -f apmd remove
226 update-rc.d -f usb-gadget remove
227 update-rc.d -f banner remove
228 update-rc.d -f portmap remove
229 update-rc.d -f mountnfs remove
230 update-rc.d -f blueprobe remove
231 update-rc.d -f dropbear remove
232 update-rc.d -f wl1251-init remove
233
234 # prevent wifi from being autoloaded on later kernels, let wl1251-init script do it
235 if ! grep -q 'blacklist wl1251_sdio' /etc/modprobe.conf 2> /dev/null; then
236   echo 'blacklist wl1251_sdio' >> /etc/modprobe.conf
237 fi
238 # we don't ship firmware for rtl8192cu, and it was reported not to work
239 # with the right firmware anyway (not verified though)
240 # vendor 8192cu is compiled instead for now
241 if ! grep -q 'blacklist rtl8192cu' /etc/modprobe.conf 2> /dev/null; then
242   echo 'blacklist rtl8192cu' >> /etc/modprobe.conf
243 fi
244
245 # add Midi Module and zram
246 echo snd-seq>>/etc/modules
247 echo zram>>/etc/modules
248
249 # get rid of some dirs in /media that OE creates but are unlikely to be used
250 rmdir /media/card /media/cf /media/mmc1 /media/net /media/realroot /media/union 2> /dev/null
251
252 # Write the control file so this script is not run on next boot 
253 # (hackish I know but I want the flexability to drop a new script in later esp. in the early firmwares).
254
255 touch /etc/pandora/first-boot
256 # Make the control file writeable by all to allow the user to delete to rerun the wizard on next boot.
257 chmod 0666 /etc/pandora/first-boot
258
259
260 # Let the user run optional config stuff.
261
262 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" "CPU-Speed and Overclocking-Settings" "startup" "Startup-Settings" "lcd" "LCD-Settings" --ok-label="Change selected Setting" --cancel-label="Continue to Boot"); do
263
264 case $mainsel in
265   "speed")
266   /usr/pandora/scripts/op_cpusettings.sh
267   ;;
268
269    "startup")
270   echo $username > /tmp/currentuser
271   /usr/pandora/scripts/op_startupmanager.sh
272   ;;
273
274    "lcd")
275   /usr/pandora/scripts/op_lcdsettings.sh
276   ;;
277
278 esac
279 done
280
281 # ----
282
283
284 # ----
285 else
286 poweroff
287 fi