archboot/usr/bin/archboot-km.sh

175 lines
4.8 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"
2022-11-27 19:06:11 +01:00
VCONSOLE="/usr/lib/systemd-vconsole-setup"
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 16:06:22 +01:00
KEYMAPS="be Belarusian bg Bulgarian br Brazil ca Canada cz Czech de German dk Danish en English es Spanish et Estonian fa Iran fi Finnish fr French gr Greek hu Hungarian it Itaiian lt Lithuanian lv Latvian mk Macedonian nl Dutch no Norwegian pl Polish pt Portuguese ro Romanian ru Russian sk Slovak sr Serbian sv Swedish uk Ukrainian us USA"
2011-02-04 18:15:22 +01:00
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-27 16:34:08 +01:00
for i in $(${KEYMAP} | grep -w "${ANSWER}" | grep -v 'mac' | grep -v 'amiga' | grep -v 'sun' | grep -v 'atari'); 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-27 16:06:22 +01:00
DIALOG --menu "Select A Keymap Layout:" 18 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
2022-11-27 17:12:01 +01:00
DIALOG --infobox "Loading keymap: ${keymap}" 0 0
sed -i -e "s#KEYMAP=.*#KEYMAP=${keymap}#g" /etc/vconsole.conf
2022-11-27 19:06:11 +01:00
${VCONSOLE}
2022-11-27 18:12:04 +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
2022-11-27 16:06:22 +01:00
DIALOG --infobox "Detected big screen using size 32 font now ..." 3 50
2022-11-27 14:46:20 +01:00
font="latarcyrheb-sun32"
2022-11-27 16:58:12 +01:00
sleep 1
2011-02-04 18:15:22 +01:00
fi
2022-11-27 14:46:20 +01:00
if [[ "${SIZE}" == "16" ]]; then
2022-11-27 16:06:22 +01:00
DIALOG --infobox "Detected normal screen using size 16 fonts..." 3 50
FONTS="eurlatgr Europe latarcyrheb-sun16 Worldwide"
2022-11-27 16:58:12 +01:00
sleep 1
2022-11-27 14:46:20 +01:00
CANCEL=
#shellcheck disable=SC2086
2022-11-27 16:06:22 +01:00
DIALOG --menu "\n Select Console Font:\n\n Font Name Region" 12 40 14 ${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:53:56 +01:00
DIALOG --infobox "Loading console font ${font} ..." 3 50
2022-11-27 14:46:20 +01:00
echo "${font}" > /tmp/.font
2022-11-27 16:08:22 +01:00
sed -i -e "s#FONT=.*#FONT=${font}#g" /etc/vconsole.conf
2022-11-27 19:06:11 +01:00
${VCONSOLE}
2022-11-27 16:58:12 +01:00
sleep 1
2022-11-27 17:12:01 +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: