mirror of
https://github.com/freebsd/freebsd-src.git
synced 2026-10-28 19:34:43 +01:00
bsdconfig: add datetime module for live system clock
Provide bsdconfig datetime (menu), date, and time to set the running system clock via dialog(1)/bsddialog(1) --calendar and --timebox with mustberoot. Unlike bsdinstall's time helper, this operates on the live system rather than a CHROOT-staged install target, and calls adjkerntz(8) after a successful change so the CMOS stays in sync. Reviewed by: bcr Differential Revision: https://reviews.freebsd.org/D58487
This commit is contained in:
1 parent
5e6c894510
commit
8cfe06ee44
15 files changed
+632
-2
No files matched your search
@@ -3,6 +3,7 @@
|
||||
PACKAGE= bsdconfig
|
||||
|
||||
SUBDIR= console \
|
||||
datetime \
|
||||
diskmgmt \
|
||||
docsinstall \
|
||||
dot \
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
.\" Copyright (c) 2012 Ron McDowell
|
||||
.\" Copyright (c) 2012-2013 Devin Teske
|
||||
.\" Copyright (c) 2012-2026 Devin Teske
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
@@ -23,7 +23,7 @@
|
||||
.\" ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
.\" POSSIBILITY OF SUCH DAMAGE.
|
||||
.\"
|
||||
.Dd June 9, 2026
|
||||
.Dd July 27, 2026
|
||||
.Dt BSDCONFIG 8
|
||||
.Os
|
||||
.Sh NAME
|
||||
@@ -95,6 +95,10 @@ listing.
|
||||
.Bl -tag -width ".Cm syscons_screenmap"
|
||||
.It Cm console
|
||||
Utilities to customize the behavior of the system console.
|
||||
.It Cm date
|
||||
Set the system date, preserving the current time-of-day.
|
||||
.It Cm datetime
|
||||
Set the system date and/or time on the running machine.
|
||||
.It Cm defaultrouter
|
||||
Shortcut to the Default Router/Gateway menu under networking.
|
||||
.It Cm diskmgmt
|
||||
@@ -207,6 +211,8 @@ Shortcut to the Screenmap menu under console for
|
||||
.It Cm vt_ttys
|
||||
Shortcut to the Ttys menu under console for
|
||||
.Xr vt 4 .
|
||||
.It Cm time
|
||||
Set the system time-of-day, preserving the current calendar date.
|
||||
.It Cm timezone
|
||||
Set the regional timezone of the local machine.
|
||||
.It Cm ttys
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
# Copyright (c) 2026 Devin Teske
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
|
||||
#
|
||||
# Title that will be shown in the bsdconfig menu.
|
||||
#
|
||||
menu_title="Date / Time"
|
||||
|
||||
#
|
||||
# A short descriptive line shown at the bottom of the bsdconfig menu. keep it
|
||||
# short because any line longer than the terminal width will be truncated.
|
||||
#
|
||||
menu_help="Set the system date and/or time"
|
||||
|
||||
#
|
||||
# Two-part variable that defines an action to take when `keyword' is passed on
|
||||
# a bsdconfig command line. Variable takes the form "keyword|command" and
|
||||
# multiple occurrences of the variable (with different `keyword's, or different
|
||||
# `keyword's AND `command's) are allowed. If `command' begins with a '/' then
|
||||
# the full path to the program is needed. If `command' begins with anything
|
||||
# else it is a path relative to the directory this INDEX file is in. `keyword'
|
||||
# can be i18n'ed but `command' is the name of a script.
|
||||
#
|
||||
menu_selection="datetime|datetime"
|
||||
menu_selection="date|date"
|
||||
menu_selection="time|time"
|
||||
|
||||
#
|
||||
# ------------ Items below this line do NOT need i18n translation ------------
|
||||
#
|
||||
# Name of the program to be run when this menu choice is selected. If it begins
|
||||
# with a '/' then the full path to the program is needed. If it begins with
|
||||
# anything else it is a path relative to the directory this INDEX file is in.
|
||||
#
|
||||
menu_program="datetime"
|
||||
@@ -0,0 +1,9 @@
|
||||
SUBDIR= include share
|
||||
|
||||
FILESDIR= ${LIBEXECDIR}/bsdconfig/085.datetime
|
||||
FILES= INDEX USAGE
|
||||
|
||||
SCRIPTSDIR= ${FILESDIR}
|
||||
SCRIPTS= date datetime time
|
||||
|
||||
.include <bsd.prog.mk>
|
||||
@@ -0,0 +1,10 @@
|
||||
# Autogenerated - do NOT edit!
|
||||
|
||||
DIRDEPS = \
|
||||
|
||||
|
||||
.include <dirdeps.mk>
|
||||
|
||||
.if ${DEP_RELDIR} == ${_DEP_RELDIR}
|
||||
# local dependencies - needed for -jN in clean tree
|
||||
.endif
|
||||
@@ -0,0 +1 @@
|
||||
.include "../Makefile.inc"
|
||||
@@ -0,0 +1,36 @@
|
||||
# Copyright (c) 2026 Devin Teske
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
|
||||
Usage: bsdconfig @PROGRAM_NAME@ [OPTIONS]
|
||||
|
||||
OPTIONS:
|
||||
-d Provide lots of debugging info on standard-out when running.
|
||||
-D file Send debugging info to file. If file begins with a plus-sign
|
||||
debug info is sent to both standard-out and file (minus the
|
||||
leading plus).
|
||||
-h Print this usage statement and exit.
|
||||
-S Secure X11 mode (implies `-X'). As root, always prompt-for
|
||||
and validate sudo(8) username/password before starting.
|
||||
-X Use Xdialog(1) in place of dialog(1).
|
||||
Executable
+73
@@ -0,0 +1,73 @@
|
||||
#!/bin/sh
|
||||
#-
|
||||
# Copyright (c) 2026 Devin Teske
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
#
|
||||
############################################################ INCLUDES
|
||||
|
||||
BSDCFG_SHARE="/usr/share/bsdconfig"
|
||||
. $BSDCFG_SHARE/common.subr || exit 1
|
||||
f_dprintf "%s: loading includes..." "$0"
|
||||
f_include $BSDCFG_SHARE/dialog.subr
|
||||
f_include $BSDCFG_SHARE/mustberoot.subr
|
||||
f_include $BSDCFG_SHARE/datetime/datetime.subr
|
||||
|
||||
BSDCFG_LIBE="/usr/libexec/bsdconfig" APP_DIR="085.datetime"
|
||||
|
||||
f_index_menusel_keyword $BSDCFG_LIBE/$APP_DIR/INDEX "$pgm" ipgm &&
|
||||
pgm="${ipgm:-$pgm}"
|
||||
|
||||
############################################################ MAIN
|
||||
|
||||
# Incorporate rc-file if it exists
|
||||
[ -f "$HOME/.bsdconfigrc" ] && f_include "$HOME/.bsdconfigrc"
|
||||
|
||||
#
|
||||
# Process command-line arguments
|
||||
#
|
||||
while getopts h$GETOPTS_STDARGS flag; do
|
||||
case "$flag" in
|
||||
h|\?) f_usage $BSDCFG_LIBE/$APP_DIR/USAGE "PROGRAM_NAME" "$pgm" ;;
|
||||
esac
|
||||
done
|
||||
shift $(( $OPTIND - 1 ))
|
||||
|
||||
#
|
||||
# Initialize
|
||||
#
|
||||
f_dialog_title "$msg_set_date"
|
||||
f_dialog_backtitle "${ipgm:+bsdconfig }$pgm"
|
||||
f_mustberoot_init
|
||||
|
||||
#
|
||||
# Set the system date (Cancel/ESC leaves the clock unchanged)
|
||||
#
|
||||
f_dialog_calendar_set_date
|
||||
|
||||
exit $SUCCESS
|
||||
|
||||
################################################################################
|
||||
# END
|
||||
################################################################################
|
||||
Executable
+154
@@ -0,0 +1,154 @@
|
||||
#!/bin/sh
|
||||
#-
|
||||
# Copyright (c) 2026 Devin Teske
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
#
|
||||
############################################################ INCLUDES
|
||||
|
||||
BSDCFG_SHARE="/usr/share/bsdconfig"
|
||||
. $BSDCFG_SHARE/common.subr || exit 1
|
||||
f_dprintf "%s: loading includes..." "$0"
|
||||
f_include $BSDCFG_SHARE/dialog.subr
|
||||
f_include $BSDCFG_SHARE/mustberoot.subr
|
||||
|
||||
BSDCFG_LIBE="/usr/libexec/bsdconfig" APP_DIR="085.datetime"
|
||||
f_include_lang $BSDCFG_LIBE/$APP_DIR/include/messages.subr
|
||||
|
||||
DATETIME_HELPFILE=$BSDCFG_LIBE/$APP_DIR/include/datetime.hlp
|
||||
|
||||
f_index_menusel_keyword $BSDCFG_LIBE/$APP_DIR/INDEX "$pgm" ipgm &&
|
||||
pgm="${ipgm:-$pgm}"
|
||||
|
||||
############################################################ FUNCTIONS
|
||||
|
||||
# dialog_menu_main
|
||||
#
|
||||
# Display the dialog(1)-based application main menu.
|
||||
#
|
||||
dialog_menu_main()
|
||||
{
|
||||
local prompt=
|
||||
local menu_list="
|
||||
'D' '$msg_date'
|
||||
'T' '$msg_time'
|
||||
'X' '$msg_exit'
|
||||
" # END-QUOTE
|
||||
local defaultitem= # Calculated below
|
||||
local hline="$hline_arrows_tab_enter"
|
||||
|
||||
local height width rows
|
||||
eval f_dialog_menu_size height width rows \
|
||||
\"\$DIALOG_TITLE\" \
|
||||
\"\$DIALOG_BACKTITLE\" \
|
||||
\"\$prompt\" \
|
||||
\"\$hline\" \
|
||||
$menu_list
|
||||
|
||||
# Obtain default-item from previously stored selection
|
||||
f_dialog_default_fetch defaultitem
|
||||
|
||||
local menu_choice
|
||||
menu_choice=$( eval $DIALOG \
|
||||
--title \"\$DIALOG_TITLE\" \
|
||||
--backtitle \"\$DIALOG_BACKTITLE\" \
|
||||
--hline \"\$hline\" \
|
||||
--ok-label \"\$msg_ok\" \
|
||||
--cancel-label \"\$msg_cancel\" \
|
||||
--help-button \
|
||||
--help-label \"\$msg_help\" \
|
||||
${USE_XDIALOG:+--help \"\"} \
|
||||
--default-item \"\$defaultitem\" \
|
||||
--menu \"\$prompt\" \
|
||||
$height $width $rows \
|
||||
$menu_list \
|
||||
2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
|
||||
)
|
||||
local retval=$?
|
||||
f_dialog_data_sanitize menu_choice
|
||||
f_dialog_menutag_store "$menu_choice"
|
||||
|
||||
# Only update default-item on success
|
||||
[ $retval -eq $DIALOG_OK ] && f_dialog_default_store "$menu_choice"
|
||||
|
||||
return $retval
|
||||
}
|
||||
|
||||
############################################################ MAIN
|
||||
|
||||
# Incorporate rc-file if it exists
|
||||
[ -f "$HOME/.bsdconfigrc" ] && f_include "$HOME/.bsdconfigrc"
|
||||
|
||||
#
|
||||
# Process command-line arguments
|
||||
#
|
||||
while getopts h$GETOPTS_STDARGS flag; do
|
||||
case "$flag" in
|
||||
h|\?) f_usage $BSDCFG_LIBE/$APP_DIR/USAGE "PROGRAM_NAME" "$pgm" ;;
|
||||
esac
|
||||
done
|
||||
shift $(( $OPTIND - 1 ))
|
||||
|
||||
#
|
||||
# Initialize
|
||||
#
|
||||
f_dialog_title "$msg_date_time"
|
||||
f_dialog_backtitle "${ipgm:+bsdconfig }$pgm"
|
||||
f_mustberoot_init
|
||||
|
||||
#
|
||||
# Launch application main menu
|
||||
#
|
||||
while :; do
|
||||
dialog_menu_main
|
||||
retval=$?
|
||||
f_dialog_menutag_fetch mtag
|
||||
f_dprintf "retval=%u mtag=[%s]" $retval "$mtag"
|
||||
|
||||
if [ $retval -eq $DIALOG_HELP ]; then
|
||||
f_show_help "$DATETIME_HELPFILE"
|
||||
continue
|
||||
elif [ $retval -ne $DIALOG_OK ]; then
|
||||
f_die
|
||||
fi
|
||||
|
||||
command=
|
||||
case "$mtag" in
|
||||
X) break ;;
|
||||
D) command=date ;; # Set Date
|
||||
T) command=time ;; # Set Time
|
||||
esac
|
||||
|
||||
if [ "$command" ]; then
|
||||
$BSDCFG_LIBE/$APP_DIR/$command ${USE_XDIALOG:+-X}
|
||||
else
|
||||
f_die 1 "$msg_unknown_date_time_menu_selection"
|
||||
fi
|
||||
done
|
||||
|
||||
exit $SUCCESS
|
||||
|
||||
################################################################################
|
||||
# END
|
||||
################################################################################
|
||||
@@ -0,0 +1,4 @@
|
||||
FILESDIR= ${LIBEXECDIR}/bsdconfig/085.datetime/include
|
||||
FILES= messages.subr datetime.hlp
|
||||
|
||||
.include <bsd.prog.mk>
|
||||
@@ -0,0 +1,19 @@
|
||||
These screens allow you to set the system date and time on the
|
||||
running system.
|
||||
|
||||
Date
|
||||
====
|
||||
|
||||
Choose Date to open a calendar pre-filled with the current local
|
||||
date. Confirming applies that calendar day while preserving the
|
||||
current time-of-day.
|
||||
|
||||
Time
|
||||
====
|
||||
|
||||
Choose Time to open a time box pre-filled with the current local
|
||||
time. Confirming applies that time-of-day while preserving the
|
||||
current calendar date.
|
||||
|
||||
Timezone is configured separately (bsdconfig timezone). Setting
|
||||
the clock here does not change which zone /etc/localtime names.
|
||||
@@ -0,0 +1,41 @@
|
||||
# Copyright (c) 2026 Devin Teske
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
|
||||
hline_arrows_tab_enter="Press arrows, TAB or ENTER"
|
||||
msg_cancel="Cancel"
|
||||
msg_date="Date"
|
||||
msg_date_time="Date / Time"
|
||||
msg_error="ERROR!"
|
||||
msg_exit="Exit"
|
||||
msg_help="Help"
|
||||
msg_ok="OK"
|
||||
msg_set_date="Set Date"
|
||||
msg_set_time="Set Time"
|
||||
msg_system_date_set="System date set to:\n\n%s"
|
||||
msg_system_time_set="System time set to:\n\n%s"
|
||||
msg_time="Time"
|
||||
msg_unable_to_set_date="Unable to set the system date."
|
||||
msg_unable_to_set_time="Unable to set the system time."
|
||||
msg_unknown_date_time_menu_selection="Unknown date/time menu selection"
|
||||
@@ -0,0 +1,4 @@
|
||||
FILESDIR= ${SHAREDIR}/bsdconfig/datetime
|
||||
FILES= datetime.subr
|
||||
|
||||
.include <bsd.prog.mk>
|
||||
@@ -0,0 +1,142 @@
|
||||
if [ ! "$_DATETIME_DATETIME_SUBR" ]; then _DATETIME_DATETIME_SUBR=1
|
||||
#
|
||||
# Copyright (c) 2026 Devin Teske
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
#
|
||||
############################################################ INCLUDES
|
||||
|
||||
BSDCFG_SHARE="/usr/share/bsdconfig"
|
||||
. $BSDCFG_SHARE/common.subr || exit 1
|
||||
f_dprintf "%s: loading includes..." datetime/datetime.subr
|
||||
f_include $BSDCFG_SHARE/dialog.subr
|
||||
|
||||
BSDCFG_LIBE="/usr/libexec/bsdconfig" APP_DIR="085.datetime"
|
||||
f_include_lang $BSDCFG_LIBE/$APP_DIR/include/messages.subr
|
||||
|
||||
############################################################ FUNCTIONS
|
||||
|
||||
# f_datetime_adjkerntz
|
||||
#
|
||||
# Best-effort CMOS sync after changing the system clock with date(1).
|
||||
#
|
||||
f_datetime_adjkerntz()
|
||||
{
|
||||
f_quietly adjkerntz -a
|
||||
}
|
||||
|
||||
# f_dialog_calendar_set_date
|
||||
#
|
||||
# Prompt with dialog(1) --calendar and set the system date, preserving the
|
||||
# current time-of-day. Returns dialog status (Cancel/ESC) without dying.
|
||||
#
|
||||
f_dialog_calendar_set_date()
|
||||
{
|
||||
local prompt="$msg_set_date"
|
||||
local hline="$hline_arrows_tab_enter"
|
||||
local cheight cwidth input_date ret_date retval
|
||||
local cur_tod setstr
|
||||
|
||||
f_dialog_calendar_size cheight cwidth \
|
||||
"$DIALOG_TITLE" "$DIALOG_BACKTITLE" "$prompt" "$hline"
|
||||
|
||||
input_date=$( date "+%d %m %Y" )
|
||||
ret_date=$( eval $DIALOG \
|
||||
--title \"\$DIALOG_TITLE\" \
|
||||
--backtitle \"\$DIALOG_BACKTITLE\" \
|
||||
--hline \"\$hline\" \
|
||||
--ok-label \"\$msg_ok\" \
|
||||
--cancel-label \"\$msg_cancel\" \
|
||||
--calendar \"\$prompt\" \
|
||||
$cheight $cwidth \
|
||||
$input_date \
|
||||
2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
|
||||
)
|
||||
retval=$?
|
||||
f_dialog_data_sanitize ret_date
|
||||
f_dprintf "retval=%u ret_date=[%s]" $retval "$ret_date"
|
||||
[ $retval -eq $DIALOG_OK ] || return $retval
|
||||
|
||||
cur_tod=$( date "+%H:%M:%S" )
|
||||
setstr=$( date -j -f "%d/%m/%Y %T" -- \
|
||||
"$ret_date $cur_tod" "+%Y%m%d%H%M.%S" ) ||
|
||||
f_die 1 "$msg_unable_to_set_date"
|
||||
|
||||
f_eval_catch "$0" date 'date "%s"' "$setstr" ||
|
||||
f_die 1 "$msg_unable_to_set_date"
|
||||
f_datetime_adjkerntz
|
||||
f_show_msg "$msg_system_date_set" "$( date )"
|
||||
return $SUCCESS
|
||||
}
|
||||
|
||||
# f_dialog_timebox_set_time
|
||||
#
|
||||
# Prompt with dialog(1) --timebox and set the system time, preserving the
|
||||
# current calendar date. Returns dialog status (Cancel/ESC) without dying.
|
||||
#
|
||||
f_dialog_timebox_set_time()
|
||||
{
|
||||
local prompt="$msg_set_time"
|
||||
local hline="$hline_arrows_tab_enter"
|
||||
local input_time ret_time retval
|
||||
local cur_day setstr
|
||||
|
||||
#
|
||||
# bsddialog(1) --timebox wants total rows (min 7), not dialog(1)-style
|
||||
# text height. Match bsdinstall time: autosize height, width 40.
|
||||
#
|
||||
input_time=$( date "+%H %M %S" )
|
||||
ret_time=$( eval $DIALOG \
|
||||
--title \"\$DIALOG_TITLE\" \
|
||||
--backtitle \"\$DIALOG_BACKTITLE\" \
|
||||
--hline \"\$hline\" \
|
||||
--ok-label \"\$msg_ok\" \
|
||||
--cancel-label \"\$msg_cancel\" \
|
||||
--timebox \"\$prompt\" \
|
||||
0 40 \
|
||||
$input_time \
|
||||
2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
|
||||
)
|
||||
retval=$?
|
||||
f_dialog_data_sanitize ret_time
|
||||
f_dprintf "retval=%u ret_time=[%s]" $retval "$ret_time"
|
||||
[ $retval -eq $DIALOG_OK ] || return $retval
|
||||
|
||||
cur_day=$( date "+%d/%m/%Y" )
|
||||
setstr=$( date -j -f "%d/%m/%Y %T" -- \
|
||||
"$cur_day $ret_time" "+%Y%m%d%H%M.%S" ) ||
|
||||
f_die 1 "$msg_unable_to_set_time"
|
||||
|
||||
f_eval_catch "$0" date 'date "%s"' "$setstr" ||
|
||||
f_die 1 "$msg_unable_to_set_time"
|
||||
f_datetime_adjkerntz
|
||||
f_show_msg "$msg_system_time_set" "$( date )"
|
||||
return $SUCCESS
|
||||
}
|
||||
|
||||
############################################################ MAIN
|
||||
|
||||
f_dprintf "%s: Successfully loaded." datetime/datetime.subr
|
||||
|
||||
fi # ! $_DATETIME_DATETIME_SUBR
|
||||
Executable
+73
@@ -0,0 +1,73 @@
|
||||
#!/bin/sh
|
||||
#-
|
||||
# Copyright (c) 2026 Devin Teske
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
#
|
||||
############################################################ INCLUDES
|
||||
|
||||
BSDCFG_SHARE="/usr/share/bsdconfig"
|
||||
. $BSDCFG_SHARE/common.subr || exit 1
|
||||
f_dprintf "%s: loading includes..." "$0"
|
||||
f_include $BSDCFG_SHARE/dialog.subr
|
||||
f_include $BSDCFG_SHARE/mustberoot.subr
|
||||
f_include $BSDCFG_SHARE/datetime/datetime.subr
|
||||
|
||||
BSDCFG_LIBE="/usr/libexec/bsdconfig" APP_DIR="085.datetime"
|
||||
|
||||
f_index_menusel_keyword $BSDCFG_LIBE/$APP_DIR/INDEX "$pgm" ipgm &&
|
||||
pgm="${ipgm:-$pgm}"
|
||||
|
||||
############################################################ MAIN
|
||||
|
||||
# Incorporate rc-file if it exists
|
||||
[ -f "$HOME/.bsdconfigrc" ] && f_include "$HOME/.bsdconfigrc"
|
||||
|
||||
#
|
||||
# Process command-line arguments
|
||||
#
|
||||
while getopts h$GETOPTS_STDARGS flag; do
|
||||
case "$flag" in
|
||||
h|\?) f_usage $BSDCFG_LIBE/$APP_DIR/USAGE "PROGRAM_NAME" "$pgm" ;;
|
||||
esac
|
||||
done
|
||||
shift $(( $OPTIND - 1 ))
|
||||
|
||||
#
|
||||
# Initialize
|
||||
#
|
||||
f_dialog_title "$msg_set_time"
|
||||
f_dialog_backtitle "${ipgm:+bsdconfig }$pgm"
|
||||
f_mustberoot_init
|
||||
|
||||
#
|
||||
# Set the system time (Cancel/ESC leaves the clock unchanged)
|
||||
#
|
||||
f_dialog_timebox_set_time
|
||||
|
||||
exit $SUCCESS
|
||||
|
||||
################################################################################
|
||||
# END
|
||||
################################################################################
|
||||
Reference in new issue
Block a user