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 # 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
26 if [ "$pnd_version" == "OMAP3430/3530" ]; then
28 if [ "$es_version" == "ES2.1" ]; then
34 /usr/pandora/scripts/op_tvout.sh
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'
45 rmmod board_omap3pandora_wifi wl1251_sdio wl1251
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
52 # Calibrate touchscreen.
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
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
64 # Reset ROOT's password to something random
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)
69 if [ $RESET_ROOT == "yes" ]; then
70 rootpwd=$(cat /dev/urandom|tr -dc "a-zA-Z0-9-_\$\?"|fold -w 30|head -n 1)
80 # Setup the full name and username.
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
86 username_guess=$(echo "$name" | cut -d" " -f1 | tr A-Z a-z)
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
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")
98 # Setup the users 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
107 if [ x$password1 = x ] ; then
108 zenity --title="Error" --error --text="Password cannot be blank!\n\nPlease try again." --timeout 6
115 passwd "$username" <<EOF
122 # Pick a name for the OpenPandora.
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."
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
135 # Set the correct user for Autologin and enable / disable it.
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
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
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
153 # Select the default interface and setup SLiM to pass that as a sesion to ~./.xinitrc
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
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}')
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
175 sed -i 's/.*DEFAULT_SESSION=.*/DEFAULT_SESSION=startxfce4/g' /home/$username/.xinitrc
180 # Set the timezone and date/time
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
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
191 rm /etc/localtime && ln -s /usr/share/zoneinfo/$area/$timezone /etc/localtime
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//'`
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
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
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")
215 date +%Y%m%d -s $date
220 # Let the user choose his desired clockspeed.
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" )
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" )
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
325 # add Midi Module and zram
326 echo snd-seq>>/etc/modules
327 echo zram>>/etc/modules
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
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).
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
343 # Let the user run optional config stuff.
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
349 /usr/pandora/scripts/op_cpusettings.sh
353 echo $username > /tmp/currentuser
354 /usr/pandora/scripts/op_startupmanager.sh
358 /usr/pandora/scripts/op_lcdsettings.sh