aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/programs/Xserver/hw
diff options
context:
space:
mode:
Diffstat (limited to 'nx-X11/programs/Xserver/hw')
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Keyboard.c34
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/man/nxagent.111
2 files changed, 38 insertions, 7 deletions
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c
index 89e51b628..d264d1c96 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c
@@ -774,8 +774,33 @@ XkbError:
goto XkbError;
}
- model = strndup(nxagentKeyboard, i);
- layout = strdup(&nxagentKeyboard[i + 1]);
+ /*
+ The original nxagent only supports model/layout values
+ here. It uses these values together with the default rules
+ and empty variant and options. We use a more or less
+ compatible hack here: The special keyword rlmvo for model
+ means that the layout part of the string will contain a
+ full RMLVO config, separated by #, e.g.
+ rlmvo/base#pc105#de,us#nodeadkeys#lv3:rwin_switch
+ */
+ if (strncmp(nxagentKeyboard, "rlmvo/", 6) == 0)
+ {
+ const char * sep = "#";
+ char * rmlvo = strdup(&nxagentKeyboard[i+1]);
+ char * tmp = rmlvo;
+ /* strtok cannot handle empty fields, so use strsep */
+ rules = strdup(strsep(&tmp, sep));
+ model = strdup(strsep(&tmp, sep));
+ layout = strdup(strsep(&tmp, sep));
+ variant = strdup(strsep(&tmp, sep));
+ options = strdup(strsep(&tmp, sep));
+ free(rmlvo);
+ }
+ else
+ {
+ model = strndup(nxagentKeyboard, i);
+ layout = strdup(&nxagentKeyboard[i + 1]);
+ }
/*
* There is no description for pc105 on Solaris.
@@ -783,8 +808,8 @@ XkbError:
*/
#ifdef TEST
- fprintf(stderr, "nxagentKeyboardProc: Using keyboard model [%s] with layout [%s].\n",
- model, layout);
+ fprintf(stderr, "%s: Using [rules='%s',model='%s',layout='%s',variant='%s',options='%s'].\n",
+ __func__, rules, model, layout, variant, options);
#endif
#ifdef __sun
@@ -793,7 +818,6 @@ XkbError:
{
#ifdef TEST
fprintf(stderr, "nxagentKeyboardProc: WARNING! Keyboard model 'pc105' unsupported on Solaris.\n");
-
fprintf(stderr, "nxagentKeyboardProc: WARNING! Forcing keyboard model to 'pc104'.\n");
#endif
diff --git a/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 b/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1
index 84669ff36..938c2eb57 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1
+++ b/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1
@@ -603,7 +603,7 @@ start or resume a session in fullscreen mode (default: off)
.TP 8
.B keyboard=<string> or kbtype=<string>
-.BR query | clone | <model>/<layout>
+.BR query | clone | <model>/<layout> | rmlvo/<rules>#<model>#<layout>#<variant>#<options>
.RS 8
.TP 8
@@ -624,8 +624,15 @@ compatibility reasons it is not the default.
.TP 8
.I <model>/<layout>
use the given model and layout. You can not modify keyboard rules,
-variant or options. Instead preset values are used. These are
+variant or options this way. Instead preset values are used. These are
\fIbase\fR for rules and empty strings for variant and options.
+.TP 8
+.I rmlvo/<rules>#<model>#<layout>#<variant>#<options>
+configure the keyboard according to the rmlvo
+(Rules+Model+Layout+Variant+Options) description given after the / and
+separated by #. This can be used to fully pass the keyboard
+configuration of \fBnxagent\fR right after the start. Example:
+rmlvo/base#pc105#de,us#nodeadkeys#lv3:rwin_switch
.RE
.TP 8