[X2Go-Commits] [x2goserver] 01/01: setting keyboard layout by agent start and resuming for kdrive sessions.

git-admin at x2go.org git-admin at x2go.org
Fri Aug 5 18:39:09 CEST 2022


This is an automated email from the git hooks/post-receive script.

x2go pushed a commit to branch master
in repository x2goserver.

commit 40ce0b2d7cb59a94f66fd1979e72299a95b01e7d
Author: Oleksandr Shneyder <o.shneyder at phoca-gmbh.de>
Date:   Fri Aug 5 11:38:58 2022 -0500

    setting keyboard layout by agent start and resuming for kdrive sessions.
---
 debian/changelog                  |  1 +
 x2goserver/bin/x2goresume-session | 16 ++++++++++++++--
 x2goserver/bin/x2gostartagent     | 25 ++++++++++++-------------
 3 files changed, 27 insertions(+), 15 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 0e7efd72..87c17b1b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -473,6 +473,7 @@ x2goserver (4.1.0.4-0x2go1.2) UNRELEASED; urgency=medium
     - Setting keyboard layout in rootless X2GoKdrive sessions.
     - x2gostartagent: save the XDMCP server in the session id.
     - x2gotermin atesession: don't terminate x2goruncommand on XDMCP sessions.
+    - setting keyboard layout by agent start and resuming for kdrive sessions.
 
   [ Orion Paplowski ]
   * New upstream version (4.1.0.4):
diff --git a/x2goserver/bin/x2goresume-session b/x2goserver/bin/x2goresume-session
index 3f00a24e..9b0ec35c 100755
--- a/x2goserver/bin/x2goresume-session
+++ b/x2goserver/bin/x2goresume-session
@@ -333,13 +333,25 @@ if kill -HUP "${x2go_agent_pid}" &>'/dev/null'; then
 	"${x2go_lib_path}/x2goresume" "${x2go_client}" "${session_name}" "${gr_port}" "${sound_port}" "${fs_port}" >'/dev/null'
 	"${x2go_lib_path}/x2gosyslog" "${0}" 'notice' "client ${x2go_client} has successfully resumed session with ID ${session_name}"
 
+	typeset x2go_display="$(cut -d '-' -f '2' <<< "${session_name}")"
 	# set client-side keyboard model, type, variant, etc.
 	if [[ "${set_kbd}" != '0' ]] && [[ "${kbd_type_val}" = 'auto' ]]; then
-		typeset x2go_display="$(cut -d '-' -f '2' <<< "${session_name}")"
 		export DISPLAY=":${x2go_display}.0"
 		x2gosetkeyboard "${session_name}" &>'/dev/null' &
 	fi
-
+	if [[ "${set_kbd}" != '0'  &&  "${kbd_type_val}" != 'auto' ]]; then
+		typeset xkbmap="$(sed -e 's/\\//' -e 's/\// /' -e 's/(/ /'  -e 's/)/ /'<<< "${kbd_type_val}")"
+		typeset model="$(awk '{print $1}' <<< "${xkbmap}")"
+		typeset layout="$(awk '{print $2}' <<< "${xkbmap}")"
+		typeset variant="$(awk '{print $3}' <<< "${xkbmap}")"
+		typeset xkbmap_arg="-model ${model} -layout ${layout}"
+		if [[ "${variant}" != "" ]]; then
+			xkbmap_arg="${xkbmap_arg} -variant ${variant}"
+		fi
+		export DISPLAY=":${x2go_display}.0"
+		setxkbmap ${xkbmap_arg}
+		echo "!!!!!SETTING LAYOUT ${x2go_display} ${xkbmap_arg}  ----  ${xkbmap}  ------- ${kbd_type_val}!!!!!!"
+	fi
 	# resume x2godesktopsharing, if it has been in use before the session got suspended
 	x2gofeature 'X2GO_DESKTOPSHARING' &>'/dev/null' && x2goresume-desktopsharing "${session_name}" || true
 
diff --git a/x2goserver/bin/x2gostartagent b/x2goserver/bin/x2gostartagent
index 24d88f64..ddf4c75b 100755
--- a/x2goserver/bin/x2gostartagent
+++ b/x2goserver/bin/x2gostartagent
@@ -262,7 +262,6 @@ for ((retry = 0; retry < max_retry; ++retry)); do
 			SESSION_NAME="${SESSION_NAME}_${X2GOXDMCP}"
 		fi
 
-
 		# sanitize session name
 		SESSION_NAME="$(perl -pe 's/[^a-zA-Z0-9\.\_\-\@]//g' <<< "${SESSION_NAME}")"
 
@@ -478,6 +477,17 @@ if [[ "${X2GO_STYPE}" = 'A' ]]; then
 	AGENTBIN='x2gokdrive'
 fi
 
+XKBMAP=''
+if [[ "${X2GO_SET_KBD}" != '0'  &&  "${X2GO_KBD_TYPE}" != 'auto' &&  "${AGENTBIN}" = 'x2gokdrive'  ]]; then
+    XKBMAP="$(sed -e 's/\// /' -e 's/(/ /'  -e 's/)/ /'<<< "${X2GO_KBD_TYPE}")"
+    XKBMODEL="$(awk '{print $1}' <<< "${XKBMAP}")"
+    XKBLAYOUT="$(awk '{print $2}' <<< "${XKBMAP}")"
+    XKBVARIANT="$(awk '{print $3}' <<< "${XKBMAP}")"
+    XKBMAP="-xkb-model ${XKBMODEL} -xkb-layout ${XKBLAYOUT}"
+    if [[ "${XKBVARIANT}" != "" ]]; then
+       XKBMAP="${XKBMAP} -xkb-variant ${XKBVARIANT}"
+    fi
+fi
 
 X2GO_AGENT_PID='0'
 if [[ "${X2GO_STYPE}" = 'S' ]]; then
@@ -489,7 +499,7 @@ if [[ "${X2GO_STYPE}" = 'S' ]]; then
 else
 	# set NX_TEMP to /tmp, make sure agent starts when pam_tmpdir.so is in use
 	"${X2GO_LIB_PATH}/x2gosyslog" "${0}" 'debug' "started nxagent: NX_TEMP=/tmp \"${AGENTBIN}\" X2GO_NXAGENT_OPTIONS ('${X2GO_NXAGENT_OPTIONS}') NOLISTOPT ('${NOLISTOPT}') X2GODPIOPTION_ ('${X2GODPIOPTION_}') XDMCPPOPT ('${XDMCPOPT}') -SESSION_TYPE ('-${SESSION_TYPE}') NOEXITPARAM ('${NOEXITPARAM}') -auth \"XAUTHORITY\" ('\"${XAUTHORITY}\"') agent_geometry ('${agent_geometry}') -name \"SESSION_WINDOW_TITLE\" ('\"${SESSION_WINDOW_TITLE}\"') \"NX_AGENT\" ('\"${NX_AGENT}\"') 2>\"SESSION_LOG\"  [...]
-	NX_TEMP='/tmp' "${AGENTBIN}" ${X2GO_NXAGENT_OPTIONS} ${NOLISTOPT} ${X2GODPIOPTION_} ${XDMCPOPT} -${SESSION_TYPE} ${NOEXITPARAM} -auth "${XAUTHORITY}" ${agent_geometry} -name "${SESSION_WINDOW_TITLE}" "${NX_AGENT}" 2>"${SESSION_LOG}" &
+	NX_TEMP='/tmp' "${AGENTBIN}" ${X2GO_NXAGENT_OPTIONS} ${NOLISTOPT} ${X2GODPIOPTION_} ${XDMCPOPT} ${XKBMAP} -${SESSION_TYPE} ${NOEXITPARAM} -auth "${XAUTHORITY}" ${agent_geometry} -name "${SESSION_WINDOW_TITLE}" "${NX_AGENT}" 2>"${SESSION_LOG}" &
 fi
 
 X2GO_AGENT_PID="${!}"
@@ -509,17 +519,6 @@ if [[ "${X2GO_SET_KBD}" = '0' ]] || [[ "${X2GO_KBD_TYPE}" != 'auto' ]]; then
 	mkdir -p -- "${SESSION_DIR}/keyboard"
 fi
 
-if [[ "${X2GO_SET_KBD}" != '0'  &&  "${X2GO_KBD_TYPE}" != 'auto' &&  "${X2GO_STYPE}" = 'A'  ]]; then
-    XKBMAP="$(sed -e 's/\// /' -e 's/(/ /'  -e 's/)/ /'<<< "${X2GO_KBD_TYPE}")"
-    XKBMODEL="$(awk '{print $1}' <<< "${XKBMAP}")"
-    XKBLAYOUT="$(awk '{print $2}' <<< "${XKBMAP}")"
-    XKBVARIANT="$(awk '{print $3}' <<< "${XKBMAP}")"
-    XKBMAP="setxkbmap -model ${XKBMODEL} -layout ${XKBLAYOUT}"
-    if [[ "${XKBVARIANT}" != "" ]]; then
-       XKBMAP="${XKBMAP} -variant ${XKBVARIANT}"
-    fi
-    DISPLAY=:${X2GO_PORT} ${XKBMAP}
-fi
 
 if ps -p "${X2GO_AGENT_PID}" &>'/dev/null'; then
 	"${X2GO_LIB_PATH}/x2gosyslog" "${0}" 'notice' "successfully started X2Go Agent session with ID ${SESSION_NAME}"

--
Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2goserver.git


More information about the x2go-commits mailing list