date_m=`date +%m | sed 's/^0//'`
date_y=`date +%Y`
- 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
- zenity --title="Error" --error --text="Please select the date." --timeout 6
+ date=""
+ while [ "x$date" = "x" ] ; do
+ 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) || exit 1
done
echo $date
time_h=`date +%H`
time_m=`date +%M`
- while ! time=$(zenity --title="Enter actual 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
- zenity --title="Error" --error --text="Please input the time." --timeout 6
+ while true; do
+ time=$(zenity --title="Enter actual 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") || exit 1
+ if test -n "$time" && date -d "$time"; then
+ break;
+ fi
+ zenity --title="Error" --error --text="Please input the time." --timeout 6
done
- while ! date -d $time ; do
- time=$(zenity --title="Enter actual 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")
- done
+ # take care of screensaver first
+ screensaver_enabled=true
+ if xset q | grep -A2 'Screen Saver' | grep -q 'timeout:.*\<0\>.*cycle'; then
+ screensaver_enabled=false
+ fi
+ xset s off
+
date +%Y%m%d -s $date
date +%H:%M -s $time
+ hwclock -u -w
+
+ if $screensaver_enabled; then
+ xset s on
+ fi
;;
esac
-done
\ No newline at end of file
+done