[ -n "$DRACUT_SYSTEMD" ] && exit 0
-if [ -x $systemdutildir/systemd-vconsole-setup ]; then
- $systemdutildir/systemd-vconsole-setup "$@"
+if [ -x "$systemdutildir"/systemd-vconsole-setup ]; then
+ "$systemdutildir"/systemd-vconsole-setup "$@"
fi
[ -e /etc/vconsole.conf ] && . /etc/vconsole.conf
if [ "${UNICODE}" = 1 ]; then
printf '\033%%G' >&7
- stty -F ${dev} iutf8
+ stty -F "${dev}" iutf8
else
printf '\033%%@' >&7
- stty -F ${dev} -iutf8
+ stty -F "${dev}" -iutf8
fi
}
[ "${UNICODE}" = 1 ] && utf_switch=-u
+ # shellcheck disable=SC2086
loadkeys -q ${utf_switch} ${KEYMAP} ${EXT_KEYMAPS}
}
set_font() {
- local dev=$1
- local trans=''
- local uni=''
-
- [ -z "${FONT}" ] && FONT=${DEFAULT_FONT}
- [ -n "${FONT_MAP}" ] && trans="-m ${FONT_MAP}"
- [ -n "${FONT_UNIMAP}" ] && uni="-u ${FONT_UNIMAP}"
-
- setfont ${FONT} -C ${dev} ${trans} ${uni}
+ setfont "${FONT-${DEFAULT_FONT}}" \
+ -C "${1}" \
+ ${FONT_MAP:+-m "${FONT_MAP}"} \
+ ${FONT_UNIMAP:+-u "${FONT_UNIMAP}"}
}
dev_close() {
dev_open() {
local dev=$1
- exec 6< ${dev} \
- && exec 7>> ${dev}
+ exec 6< "${dev}" \
+ && exec 7>> "${dev}"
}
dev=/dev/${1#/dev/}
-devname=${dev#/dev/}
[ -c "${dev}" ] || {
echo "Usage: $0 device" >&2
exit 1
}
-dev_open ${dev}
+dev_open "${dev}"
for fd in 6 7; do
if ! [ -t ${fd} ]; then
done
set_keyboard
-set_terminal ${dev}
-set_font ${dev}
+set_terminal "${dev}"
+set_font "${dev}"
set_keymap
dev_close
# called by dracut
install() {
+ declare -A KEYMAPS
+
if dracut_module_included "systemd"; then
unset FONT
unset KEYMAP
+ # shellcheck disable=SC1090
[[ -f "$dracutsysrootdir"/etc/vconsole.conf ]] && . "$dracutsysrootdir"/etc/vconsole.conf
fi
I18N_CONF="/etc/locale.conf"
VCONFIG_CONF="/etc/vconsole.conf"
- # This is from 10redhat-i18n.
findkeymap() {
- local MAPS=$1
- local MAPNAME=${1%.map*}
- local map
- [[ ! -f $dracutsysrootdir$MAPS ]] \
- && MAPS=$(find $dracutsysrootdir${kbddir}/keymaps -type f -name ${MAPNAME} -o -name ${MAPNAME}.map -o -name ${MAPNAME}.map.\*)
-
- for map in $MAPS; do
- KEYMAPS="$KEYMAPS $map "
- case $map in
- *.gz) cmd="zgrep" ;;
- *.bz2) cmd="bzgrep" ;;
- *) cmd="grep" ;;
+ # shellcheck disable=SC2064
+ trap "$(shopt -p nullglob globstar)" RETURN
+ shopt -q -s nullglob globstar
+
+ local -a MAPS
+ local MAPNAME
+ local INCLUDES
+ local MAP
+ local CMD
+ local FN
+
+ if [[ -f $dracutsysrootdir$1 ]]; then
+ MAPS=("$1")
+ else
+ MAPNAME=${1%.map*}
+ MAPS=("$dracutsysrootdir""${kbddir}"/keymaps/**/"${MAPNAME}"{,.map{,.*}})
+ fi
+
+ for MAP in "${MAPS[@]}"; do
+ [[ -f $MAP ]] || continue
+ [[ -v KEYMAPS["$MAP"] ]] && continue
+
+ KEYMAPS["$MAP"]=1
+
+ case "$MAP" in
+ *.gz) CMD="zgrep" ;;
+ *.bz2) CMD="bzgrep" ;;
+ *) CMD="grep" ;;
esac
- for INCL in $($cmd "^include " $map | while read _ a _ || [ -n "$a" ]; do echo ${a//\"/}; done); do
- for FN in $(find $dracutsysrootdir${kbddir}/keymaps -type f -name $INCL\*); do
+ readarray -t INCLUDES < <("$CMD" '^include ' "$MAP" | while read -r _ a _ || [ -n "$a" ]; do echo "${a//\"/}"; done)
+
+ for INCL in "${INCLUDES[@]}"; do
+ for FN in "$dracutsysrootdir""${kbddir}"/keymaps/**/"$INCL"*; do
[[ -f $FN ]] || continue
- strstr "$KEYMAPS" " $FN " || findkeymap $FN
+ [[ -v KEYMAPS["$FN"] ]] || findkeymap "$FN"
done
done
done
# FIXME: double check
# shellcheck disable=SC2068
- for item in $@; do
- item=(${item/:/ })
+ for item in "$@"; do
+ read -r -a item <<< "${item/:/ }"
for map in ${item[1]//,/ }; do
- map=(${map//-/ })
+ read -r -a map <<< "${map//-/ }"
if [[ -f "$dracutsysrootdir${item[0]}" ]]; then
value=$(grep "^${map[0]}=" "$dracutsysrootdir${item[0]}")
value=${value#*=}
echo "${map[1]:-${map[0]}}=${value}"
fi
+ unset map
done
done
}
inst_multiple setfont loadkeys kbd_mode stty
if ! dracut_module_included "systemd"; then
- inst ${moddir}/console_init.sh /lib/udev/console_init
- inst_rules ${moddir}/10-console.rules
+ inst "${moddir}"/console_init.sh /lib/udev/console_init
+ inst_rules "${moddir}"/10-console.rules
inst_hook cmdline 20 "${moddir}/parse-i18n.sh"
fi
}
install_all_kbd() {
- local rel f
+ local _src _line
for _src in "${KBDSUBDIRS[@]}"; do
inst_dir "${kbddir}/$_src"
rm -f -- "${initdir}${kbddir}/consoletrans/utflist"
find "${initdir}${kbddir}/" -name README\* -delete
find "${initdir}${kbddir}/" -name '*.gz' -print -quit \
- | while read line || [ -n "$line" ]; do
+ | while read -r _line || [ -n "$_line" ]; do
inst_multiple gzip
done
find "${initdir}${kbddir}/" -name '*.bz2' -print -quit \
- | while read line || [ -n "$line" ]; do
+ | while read -r _line || [ -n "$_line" ]; do
inst_multiple bzip2
done
}
install_local_i18n() {
local map
- eval $(gather_vars ${i18n_vars})
- [ -f $dracutsysrootdir$I18N_CONF ] && . $dracutsysrootdir$I18N_CONF
- [ -f $dracutsysrootdir$VCONFIG_CONF ] && . $dracutsysrootdir$VCONFIG_CONF
+ # shellcheck disable=SC2086
+ eval "$(gather_vars ${i18n_vars})"
+ # shellcheck disable=SC1090
+ [ -f "$dracutsysrootdir"$I18N_CONF ] && . "$dracutsysrootdir"$I18N_CONF
+ # shellcheck disable=SC1090
+ [ -f "$dracutsysrootdir"$VCONFIG_CONF ] && . "$dracutsysrootdir"$VCONFIG_CONF
shopt -q -s nocasematch
if [[ ${UNICODE} ]]; then
return 1
}
- findkeymap ${KEYMAP}
+ findkeymap "${KEYMAP}"
for map in ${EXT_KEYMAPS}; do
ddebug "Adding extra map: ${map}"
- findkeymap ${map}
+ findkeymap "${map}"
done
- for keymap in ${KEYMAPS}; do
- inst_opt_decompress ${keymap}
+ for keymap in "${!KEYMAPS[@]}"; do
+ inst_opt_decompress "${keymap}"
done
- inst_opt_decompress ${kbddir}/consolefonts/${DEFAULT_FONT}.*
+ inst_opt_decompress "${kbddir}"/consolefonts/"${DEFAULT_FONT}".*
- if [[ ${FONT} ]] && [[ ${FONT} != ${DEFAULT_FONT} ]]; then
+ if [[ ${FONT} ]] && [[ ${FONT} != "${DEFAULT_FONT}" ]]; then
FONT=${FONT%.psf*}
- inst_opt_decompress ${kbddir}/consolefonts/${FONT}.*
+ inst_opt_decompress "${kbddir}"/consolefonts/"${FONT}".*
fi
if [[ ${FONT_MAP} ]]; then
FONT_MAP=${FONT_MAP%.trans}
# There are three different formats that setfont supports
- inst_simple ${kbddir}/consoletrans/${FONT_MAP} \
- || inst_simple ${kbddir}/consoletrans/${FONT_MAP}.trans \
- || inst_simple ${kbddir}/consoletrans/${FONT_MAP}_to_uni.trans \
+ inst_simple "${kbddir}"/consoletrans/"${FONT_MAP}" \
+ || inst_simple "${kbddir}"/consoletrans/"${FONT_MAP}".trans \
+ || inst_simple "${kbddir}"/consoletrans/"${FONT_MAP}"_to_uni.trans \
|| dwarn "Could not find FONT_MAP ${FONT_MAP}!"
fi
if [[ ${FONT_UNIMAP} ]]; then
FONT_UNIMAP=${FONT_UNIMAP%.uni}
- inst_simple ${kbddir}/unimaps/${FONT_UNIMAP}.uni
+ inst_simple "${kbddir}"/unimaps/"${FONT_UNIMAP}".uni
fi
if dracut_module_included "systemd" && [[ -f $dracutsysrootdir${I18N_CONF} ]]; then
inst_simple ${I18N_CONF}
else
- mksubdirs ${initdir}${I18N_CONF}
- print_vars LC_ALL LANG >> ${initdir}${I18N_CONF}
+ mksubdirs "${initdir}"${I18N_CONF}
+ print_vars LC_ALL LANG >> "${initdir}"${I18N_CONF}
fi
if ! dracut_module_included "systemd"; then
- mksubdirs ${initdir}${VCONFIG_CONF}
- print_vars KEYMAP EXT_KEYMAPS UNICODE FONT FONT_MAP FONT_UNIMAP >> ${initdir}${VCONFIG_CONF}
+ mksubdirs "${initdir}"${VCONFIG_CONF}
+ print_vars KEYMAP EXT_KEYMAPS UNICODE FONT FONT_MAP FONT_UNIMAP >> "${initdir}"${VCONFIG_CONF}
fi
return 0