3 # Initially based on the scripts by JohnX/Mer Project - http://wiki.maemo.org/Mer/
4 # Reworked for the OpenPandora - John Willis/Michael Mrozek
6 # You can start the wizard from the shell using 'xinit ./first-boot-init.sh'
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
12 # Ensure there is a wheel group for sudoers to be put into.
13 # TODO: Do this somewhere better.
16 # We load up a background image here.
17 export WALLPAPER='/usr/share/xfce4/backdrops/op-firstrun.png'
18 hsetroot -center $WALLPAPER
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'
29 rmmod board_omap3pandora_wifi wl1251_sdio wl1251
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
36 # Reset ROOT's password to something random
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)
41 if [ $RESET_ROOT == "yes" ]; then
42 rootpwd=$(cat /dev/urandom|tr -dc "a-zA-Z0-9-_\$\?"|fold -w 30|head -n 1)
52 # Ask the user to calibrate the touchscreen.
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
63 # echo Running ts_test
70 # Setup swap partition if the user has placed an SD with a swap partition on it.
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
77 # echo "$swap_part none swap sw 0 0" >> /etc/fstab
83 # Setup the full name and username.
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
89 username_guess=$(echo "$name" | cut -d" " -f1 | tr A-Z a-z)
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
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")
101 # Setup the users 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
110 if [ x$password1 = x ] ; then
111 zenity --title="Error" --error --text="Password cannot be blank!\n\nPlease try again." --timeout 6
118 passwd "$username" <<EOF
125 # Pick a name for the OpenPandora.
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."
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
138 # Set the correct user for Autologin and enable / disable it.
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
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
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
156 # Select the default interface and setup SLiM to pass that as a sesion to ~./.xinitrc
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
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}')
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
178 sed -i 's/.*DEFAULT_SESSION=.*/DEFAULT_SESSION=startxfce4/g' /home/$username/.xinitrc
183 # Set the timezone and date/time
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
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
194 rm /etc/localtime && ln -s /usr/share/zoneinfo/$area/$timezone /etc/localtime
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//'`
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
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
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")
218 date +%Y%m%d -s $date
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
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
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
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
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
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 usb-gadget remove
277 update-rc.d -f banner remove
278 update-rc.d -f portmap remove
279 update-rc.d -f mountnfs remove
280 update-rc.d -f blueprobe remove
281 update-rc.d -f dropbear remove
282 update-rc.d -f wl1251-init remove
284 # prevent wifi from being autoloaded on later kernels, let wl1251-init script do it
285 if ! grep -q 'blacklist wl1251_sdio' /etc/modprobe.conf 2> /dev/null; then
286 echo 'blacklist wl1251_sdio' >> /etc/modprobe.conf
288 # we don't ship firmware for rtl8192cu, and it was reported not to work
289 # with the right firmware anyway (not verified though)
290 # vendor 8192cu is compiled instead for now
291 if ! grep -q 'blacklist rtl8192cu' /etc/modprobe.conf 2> /dev/null; then
292 echo 'blacklist rtl8192cu' >> /etc/modprobe.conf
295 # add Midi Module and zram
296 echo snd-seq>>/etc/modules
297 echo zram>>/etc/modules
299 # get rid of some dirs in /media that OE creates but are unlikely to be used
300 rmdir /media/card /media/cf /media/mmc1 /media/net /media/realroot /media/union 2> /dev/null
302 # Write the control file so this script is not run on next boot
303 # (hackish I know but I want the flexability to drop a new script in later esp. in the early firmwares).
305 touch /etc/pandora/first-boot
306 # Make the control file writeable by all to allow the user to delete to rerun the wizard on next boot.
307 chmod 0666 /etc/pandora/first-boot
310 # Let the user run optional config stuff.
312 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="Continue to Boot"); do
316 /usr/pandora/scripts/op_cpusettings.sh
320 echo $username > /tmp/currentuser
321 /usr/pandora/scripts/op_startupmanager.sh
325 /usr/pandora/scripts/op_lcdsettings.sh