#!/bin/bash # written by Tobias Powalowski # adapted for Cinnarch by Alex Filgueira # adapted for Manjaro by Philip Müller abort() { DIALOG --yesno "${_abort}" 6 42 || return 0 [[ -e /tmp/.km ]] && rm -f /tmp/.km [[ -e /tmp/.keymap ]] && rm -f /tmp/.keymap [[ -e /tmp/.font ]] && rm -f /tmp/.font [[ -e /tmp/.km-running ]] && rm /tmp/.km-running clear exit 1 } # kernel_cmdline () # { # for param in $(/bin/cat /proc/cmdline); do # case "${param}" in # $1=*) echo "${param##*=}"; return 0 ;; # $1) return 0 ;; # *) continue ;; # esac # done # [ -n "${2}" ] && echo "${2}" # return 1 # } # DIALOG() # an el-cheapo dialog wrapper # # parameters: see dialog(1) # returns: whatever dialog did DIALOG() { dialog --backtitle "${TITLE}" --aspect 15 "$@" return $? } error_kmset() { DIALOG --msgbox "${_error}" 0 0 } dokeymap() { echo "${_scanning}" KEYMAPS= for i in $(find ${BASEDIR}/keymaps -follow -name "*.gz" | sed 's|^.*/||g' | sort); do KEYMAPS="${KEYMAPS} ${i} -" done CANCEL="" DIALOG --menu "${_select}" 22 60 16 ${KEYMAPS} 2>${ANSWER} || CANCEL="1" if [[ "${CANCEL}" = "1" ]]; then S_NEXTITEM="1" return 1 fi keymap=$(cat ${ANSWER}) echo ${keymap} > /tmp/.keymap # backward fix since filesystem 2013.03-1 don't ships vconsole.conf anymore echo "KEYMAP=us" > ${DESTDIR}/etc/vconsole.conf echo "FONT=" >> ${DESTDIR}/etc/vconsole.conf echo "FONT_MAP=" >> ${DESTDIR}/etc/vconsole.conf sed -i -e "s/^KEYMAP=.*/KEYMAP=\"$(cat /tmp/.keymap | sed -e 's/\..*//g')\"/g" ${DESTDIR}/etc/vconsole.conf if [[ "${keymap}" ]]; then DIALOG --infobox "{$_load} ${keymap}" 0 0 #loadkeys -q ${BASEDIR}/keymaps/${keymap} loadkeys -q ${keymap} > /dev/null 2>&1 || error_kmset # for openrc if [ -e /run/openrc ]; then # get keymap without extension (.map.gz) KEYMAP=$(echo ${keymap} | cut -f 1 -d ".") # get stored keymap CKMAP=$(cat ${DESTDIR}/etc/conf.d/keymaps | grep -w keymap= | cut -f 2 -d '"') # if stored keymap is different from current selected keymap, replace it if [ ! ${CKMAP} == ${KEYMAP} ]; then sed -i "s/keymap=\"${CKMAP}\"/keymap=\"${KEYMAP}\"/" ${DESTDIR}/etc/conf.d/keymaps fi fi fi # Setup x11 config file local KBLAYOUT=$(get_layout) local KEYMAP=$(cat /tmp/.keymap | sed -e 's/\..*//g') _write_x11_config_file S_NEXTITEM=2 } mainmenu() { if [[ -n "${S_NEXTITEM}" ]]; then DEFAULT="--default-item ${S_NEXTITEM}" else DEFAULT="" fi DIALOG ${DEFAULT} --backtitle "${TITLE}" --title "${_menu}" \ --menu "${_desc}" 17 58 13 \ "1" "${_keymap}" \ "2" "${EXIT}" 2>${ANSWER} case $(cat ${ANSWER}) in "1") dokeymap ;; "2") [[ -e /tmp/.km-running ]] && rm /tmp/.km-running clear exit 0 ;; *) abort ;; esac } : >/tmp/.keymap : >/tmp/.font : >/tmp/.km # do UID checking here so someone can at least get usage instructions if [ "$EUID" != "0" ]; then echo "error: This script must be run as root." exit 1 fi # force to use english export LANG=en_US.UTF-8 export LC_MESSAGES=en_US.UTF-8 # Translation #source /opt/livecd/functions [[ -r /opt/livecd/util-lng.sh ]] && source /opt/livecd/util-lng.sh LOCALE=$(get_country) # English source /opt/livecd/km-en.lng # Turkish if [ "${LOCALE}" = "tr_TR" ]; then source /opt/livecd/km-tr.lng fi ANSWER="/tmp/.km" TITLE="${_title}" BASEDIR="/usr/share/kbd" if [[ "${1}" = "--setup" ]]; then EXIT="${_return}" DESTDIR="/install" else EXIT="${_exit}" DESTDIR="" fi if [[ ! -d ${BASEDIR}/keymaps ]]; then echo "${_nokeymap} ${BASEDIR}/keymaps" >&2 exit 1 fi if [[ ! -d ${BASEDIR}/consolefonts ]]; then echo "${_nofonts} ${BASEDIR}/consolefonts" >&2 fi if [[ ! $(which loadkeys) ]]; then echo "${_loadkeys}" >&2 exit 1 fi if [[ ! $(which setfont) ]]; then echo "${_setfont}" >&2 exit 1 fi if [[ -e /tmp/.km-running ]]; then echo "${_km}" echo "${_tmp}" exit 1 fi : >/tmp/.km-running while true; do mainmenu done clear exit 0 # vim: set ts=4 sw=4 et: