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