archboot/usr/bin/archboot-km.sh

182 lines
4.7 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
2008-10-20 22:39:25 +02:00
# written by Tobias Powalowski <tpowa@archlinux.org>
ANSWER="/tmp/.km"
2008-12-17 12:09:15 +01:00
TITLE="Arch Linux Keymap And Console Font Setting"
2008-10-20 22:39:25 +02:00
BASEDIR="/usr/share/kbd"
2022-11-26 17:48:52 +01:00
KEYMAP="localectl list-keymaps --no-pager"
if [[ "${1}" = "--setup" ]]; then
2011-02-04 18:15:22 +01:00
EXIT="Return to Main Menu"
2009-01-31 19:44:09 +01:00
else
2011-02-04 18:15:22 +01:00
EXIT="Exit"
2009-01-31 19:44:09 +01:00
fi
2008-10-20 22:39:25 +02:00
abort()
{
2011-02-04 18:15:22 +01:00
DIALOG --yesno "Abort Keymap And Console Font Setting?" 6 42 || return 0
[[ -e /tmp/.keymap ]] && rm -f /tmp/.keymap
[[ -e /tmp/.font ]] && rm -f /tmp/.font
2022-11-25 21:03:18 +01:00
[[ -e /tmp/.km-running ]] && rm /tmp/.km-running
2011-02-04 18:15:22 +01:00
clear
exit 1
2008-10-20 22:39:25 +02:00
}
2008-12-17 12:09:15 +01:00
# DIALOG()
# an el-cheapo dialog wrapper
#
# parameters: see dialog(1)
# returns: whatever dialog did
DIALOG() {
2011-02-04 18:15:22 +01:00
dialog --backtitle "${TITLE}" --aspect 15 "$@"
return $?
2008-10-20 22:39:25 +02:00
}
2008-12-17 12:09:15 +01:00
error_kmset()
2008-10-20 22:39:25 +02:00
{
2011-02-04 18:15:22 +01:00
DIALOG --msgbox "An error occured, your current keymap was not changed." 0 0
2008-10-20 22:39:25 +02:00
}
dokeymap() {
2022-11-27 11:21:40 +01:00
KEYMAPS=""
2022-11-27 10:36:34 +01:00
# get list of 2 sign locale
# ${KEYMAP} | grep -v '...' | grep "^[a-z]"
2022-11-27 11:21:40 +01:00
KEYMAP_LIST="be bg br ca cf cz de dk en es et fa fi fr gr hu ie il is it la lt lv mk nl no pl pt ro ru se sg sk sr sv ua uk us"
for i in ${KEYMAP_LIST}; do
2011-02-04 18:15:22 +01:00
KEYMAPS="${KEYMAPS} ${i} -"
done
CANCEL=""
2022-01-26 11:38:16 +01:00
#shellcheck disable=SC2086
2022-11-27 11:21:40 +01:00
DIALOG --menu "Select A Keymap Region:" 22 30 16 ${KEYMAPS} 2>${ANSWER} || CANCEL="1"
2022-11-26 14:45:36 +01:00
if [[ "${CANCEL}" = "1" ]]; then
S_NEXTITEM="1"
return 1
fi
2022-11-26 17:48:52 +01:00
ANSWER=$(cat ${ANSWER})
2022-11-27 11:21:40 +01:00
KEYMAPS=""
2022-11-26 17:48:52 +01:00
for i in $(${KEYMAP} | grep -w "${ANSWER}"); do
2022-11-26 14:45:36 +01:00
KEYMAPS="${KEYMAPS} ${i} -"
done
2022-11-26 17:48:52 +01:00
#shellcheck disable=SC2086
2022-11-26 18:26:51 +01:00
DIALOG --menu "Select A Keymap Layout:" 16 40 12 ${KEYMAPS} 2>${ANSWER} || CANCEL="1"
if [[ "${CANCEL}" = "1" ]]; then
2011-02-04 18:15:22 +01:00
S_NEXTITEM="1"
return 1
fi
2022-11-26 17:48:52 +01:00
#shellcheck disable=SC2086
2011-02-04 18:15:22 +01:00
keymap=$(cat ${ANSWER})
2022-01-21 11:18:35 +01:00
echo "${keymap}" > /tmp/.keymap
if [[ "${keymap}" ]]; then
2011-02-04 18:15:22 +01:00
DIALOG --infobox "Loading keymap: ${keymap}" 0 0
2022-11-25 21:03:18 +01:00
localectl set-keymap "${keymap}" || error_kmset
echo "${keymap}" > /tmp/.keymap
2011-02-04 18:15:22 +01:00
fi
2008-12-17 12:09:15 +01:00
S_NEXTITEM=2
2008-10-20 22:39:25 +02:00
}
doconsolefont() {
2022-11-27 14:46:20 +01:00
# check for fb size
FB_SIZE="$(dmesg | grep "x[0-9][0-9][0-9]x" | cut -d 'x' -f 1 | sed -e 's#.* ##g')"
if [[ "${FB_SIZE}" -gt '2000' ]]; then
SIZE="32"
else
SIZE="16"
2022-11-26 17:48:52 +01:00
fi
#shellcheck disable=SC2086
2022-11-27 14:46:20 +01:00
if [[ "${SIZE}" == "32" ]]; then
font="latarcyrheb-sun32"
2011-02-04 18:15:22 +01:00
fi
2022-11-27 14:46:20 +01:00
if [[ "${SIZE}" == "16" ]]; then
FONTS="eurlatgr - latarcyrheb-sun16 -"
CANCEL=
#shellcheck disable=SC2086
2022-11-27 14:51:11 +01:00
DIALOG --menu "Select A Console Font:" 8 40 10 ${FONTS} 2>${ANSWER} || CANCEL=1
2022-11-27 14:46:20 +01:00
if [[ "${CANCEL}" = "1" ]]; then
S_NEXTITEM="2"
return 1
2011-02-04 18:15:22 +01:00
fi
2022-11-27 14:46:20 +01:00
#shellcheck disable=SC2086
font=$(cat ${ANSWER})
2011-02-04 18:15:22 +01:00
fi
2022-11-27 14:46:20 +01:00
echo "${font}" > /tmp/.font
2022-11-27 14:51:11 +01:00
DIALOG --infobox "Loading console font ${font} ..." 3 40
2022-11-27 14:46:20 +01:00
for i in $(seq 1 6); do
setfont "${BASEDIR}/consolefonts/${font}".psfu.gz -C "/dev/tty${i}" > /dev/null 2>&1
done
# set serial console if used too!
if tty | grep -q /dev/ttyS; then
SERIAL="$(tty)"
setfont "${BASEDIR}/consolefonts/${font}".psfu.gz -C "/dev/${SERIAL}" > /dev/null 2>&1
fi
echo "${font}" > /tmp/.font
sleep 3
2008-12-17 12:09:15 +01:00
S_NEXTITEM=3
2008-10-20 22:39:25 +02:00
}
mainmenu() {
if [[ -n "${S_NEXTITEM}" ]]; then
2011-02-04 18:15:22 +01:00
DEFAULT="--default-item ${S_NEXTITEM}"
else
DEFAULT=""
fi
2022-01-26 11:38:16 +01:00
#shellcheck disable=SC2086
2022-01-22 09:36:13 +01:00
DIALOG ${DEFAULT} --backtitle "${TITLE}" --title " MAIN MENU " \
2022-04-04 08:30:02 +02:00
--menu "Use the UP and DOWN arrows to navigate menus.\nUse TAB to switch between buttons and ENTER to select." 11 58 13 \
2011-02-04 18:15:22 +01:00
"1" "Set Keymap" \
"2" "Set Consolefont" \
"3" "${EXIT}" 2>${ANSWER}
2022-11-26 17:48:52 +01:00
#shellcheck disable=SC2086
2011-02-04 18:15:22 +01:00
case $(cat ${ANSWER}) in
"1")
dokeymap
;;
"2")
doconsolefont
;;
"3")
[[ -e /tmp/.km-running ]] && rm /tmp/.km-running
2011-02-04 18:15:22 +01:00
clear
exit 0 ;;
*)
abort ;;
esac
2008-10-20 22:39:25 +02:00
}
: >/tmp/.keymap
: >/tmp/.font
if [[ ! -d ${BASEDIR}/keymaps ]]; then
2011-02-04 18:15:22 +01:00
echo "Cannot load keymaps, as none were found in ${BASEDIR}/keymaps" >&2
exit 1
2008-10-20 22:39:25 +02:00
fi
if [[ ! -d ${BASEDIR}/consolefonts ]]; then
2011-02-04 18:15:22 +01:00
echo "Cannot load consolefonts, as none were found in ${BASEDIR}/consolefonts" >&2
2008-10-20 22:39:25 +02:00
fi
if [[ ! $(which localectl) ]]; then
echo "'localectl' binary not found!" >&2
2011-02-04 18:15:22 +01:00
exit 1
2008-10-20 22:39:25 +02:00
fi
if [[ ! $(which setfont) ]]; then
2011-02-04 18:15:22 +01:00
echo "'setfont' binary not found!" >&2
exit 1
2008-10-20 22:39:25 +02:00
fi
if [[ -e /tmp/.km-running ]]; then
2011-02-04 18:15:22 +01:00
echo "km already runs on a different console!"
echo "Please remove /tmp/.km-running first to launch tz!"
exit 1
2008-10-20 22:39:25 +02:00
fi
: >/tmp/.km-running
2008-12-17 12:09:15 +01:00
while true; do
2011-02-04 18:15:22 +01:00
mainmenu
2008-10-20 22:39:25 +02:00
done
clear
exit 0
2011-02-04 18:15:22 +01:00
# vim: set ts=4 sw=4 et: