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@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