diff --git a/kbdupdater b/kbdupdater new file mode 100755 index 0000000000000000000000000000000000000000..2a17dc8fb60d7a1a6f41256d0b43b14106a3009a --- /dev/null +++ b/kbdupdater @@ -0,0 +1,70 @@ +#!/bin/sh +# +# kbdupdater +# +# Keep the KGX's terminal keyboard layout in sync with the UI primary keyboard layout +# +# Source: https://git.qoto.org/m33/kbdupdater.git +# + +# DBUS lookup +DEST=org.freedesktop.locale1 +OBJ_PATH="/org/freedesktop/locale1" +KEY="VConsoleKeymap" + +# Path to keyboard layouts +SQUEEKBOARD_LAYOUT_PATH=/usr/share/squeekboard/keyboards +TERMINAL_LAYOUT=terminal.yaml +LOCAL_SQUEEKBOARD_PATH=$HOME/.local/share/squeekboard +LOCAL_SQUEEKBOARD_LAYOUT_PATH=$LOCAL_SQUEEKBOARD_PATH/keyboards + +# Contry code (empty by default = US) +CC="" + +################################################################################ + +# Get and parse the current country code +CC=`gdbus introspect --system --dest $DEST --object-path $OBJ_PATH --only-properties | grep "$KEY =" | awk -F"'" '{print $2}'` + +logger "kbdupdater: Country code=$CC" + +# Look for a template +if [ ! -e "$SQUEEKBOARD_LAYOUT_PATH/$CC+$TERMINAL_LAYOUT" ]; then + logger "kbdupdater: Error, no layout found" + exit 0 +fi + +# Ensure all directories are valid +if [ ! -d $LOCAL_SQUEEKBOARD_PATH ]; then + mkdir $LOCAL_SQUEEKBOARD_PATH + if [ $? -ne 0 ]; then + logger "kbdupdater: Error, can't create $LOCAL_SQUEEKBOARD_PATH" + exit 1 + fi +fi + +if [ ! -d $LOCAL_SQUEEKBOARD_LAYOUT_PATH ]; then + mkdir $LOCAL_SQUEEKBOARD_LAYOUT_PATH + if [ $? -ne 0 ]; then + logger "kbdupdater: Error, can't create $LOCAL_SQUEEKBOARD_LAYOUT_PATH" + exit 1 + fi +fi + +# Create/update/keep the current symlink to the template... + +if [ -f $LOCAL_SQUEEKBOARD_LAYOUT_PATH/$TERMINAL_LAYOUT ]; then + if [ `readlink $LOCAL_SQUEEKBOARD_LAYOUT_PATH/$TERMINAL_LAYOUT` = "$SQUEEKBOARD_LAYOUT_PATH/$CC+$TERMINAL_LAYOUT" ]; then +# logger "kbdupdater: Keyboard layout already up to date" + exit 0 + fi +fi + +logger "kbdupdater: Updating keyboard layout" +ln -s -f "$SQUEEKBOARD_LAYOUT_PATH/$CC+$TERMINAL_LAYOUT" $LOCAL_SQUEEKBOARD_LAYOUT_PATH/$TERMINAL_LAYOUT +if [ $? -ne 0 ]; then + logger "kbdupdater: Error, unable to update the kayboard layout" + exit 1 +fi + +exit 0