Resolution switching without reconnecting.

- Based on https://github.com/jsorg71/xrdp/tree/dynamic_monitor
- Tested with xorgxrdp
- Tested with vnc
- Only works with single monitor.
- Update documentation to clarify the difference between MSTSC and
Microsoft Remote Desktop.
- Does not include compatibility with /gfx at this time, which is still
in testing.
- Updates to include ms-rdpedisp.h header for the 2.2.2 specification of
the protocol.
- Adds new dynamic_monitor_layout struct that shares the number of
monitors with xrdp_client_info.h
- Does not allow for BPP changes because the RDP protocol doesn't
support it.
- Option to disable feature as NeutrinoRDP doesn't support it (It was
based on FreeRDP 1.0.1 which didn't yet have this feature.)
- Add CLIENT_MONITOR_DATA_MAXIMUM_MONITORS constant and reference
spec definition.

Depends on https://github.com/neutrinolabs/xorgxrdp/pull/183
This commit is contained in:
Christopher Pitstick
2018-10-15 21:42:13 -07:00
parent 3a9d62b05c
commit deb66ce766
16 changed files with 499 additions and 69 deletions
+28
View File
@@ -492,6 +492,10 @@ lxrdp_set_param(struct mod *mod, const char *name, const char *value)
{
settings->nla_security = g_text2bool(value);
}
else if (g_strcmp(name, "enable_dynamic_resizing") == 0)
{
settings->desktop_resize = g_text2bool(value);
}
else
{
LOG(LOG_LEVEL_WARNING, "lxrdp_set_param: unknown name [%s] value [%s]", name, value);
@@ -599,6 +603,27 @@ lxrdp_suppress_output(struct mod *mod, int suppress,
return 0;
}
/******************************************************************************/
static int
lxrdp_server_version_message(struct mod *mod)
{
return 0;
}
/******************************************************************************/
static int
lxrdp_server_monitor_resize(struct mod *mod, int width, int height)
{
return 0;
}
/******************************************************************************/
static int
lxrdp_server_monitor_full_invalidate(struct mod *mod, int width, int height)
{
return 0;
}
/******************************************************************************/
static void
lfreerdp_begin_paint(rdpContext *context)
@@ -2074,6 +2099,9 @@ mod_init(void)
mod->mod_check_wait_objs = lxrdp_check_wait_objs;
mod->mod_frame_ack = lxrdp_frame_ack;
mod->mod_suppress_output = lxrdp_suppress_output;
mod->mod_server_version_message = lxrdp_server_version_message;
mod->mod_server_monitor_resize = lxrdp_server_monitor_resize;
mod->mod_server_monitor_full_invalidate = lxrdp_server_monitor_full_invalidate;
mod->inst = freerdp_new();
mod->inst->PreConnect = lfreerdp_pre_connect;
+7 -2
View File
@@ -82,8 +82,13 @@ struct mod
int (*mod_frame_ack)(struct mod *mod, int flags, int frame_id);
int (*mod_suppress_output)(struct mod *mod, int suppress,
int left, int top, int right, int bottom);
tintptr mod_dumby[100 - 11]; /* align, 100 minus the number of mod
functions above */
int (*mod_server_monitor_resize)(struct mod *mod,
int width, int height);
int (*mod_server_monitor_full_invalidate)(struct mod *mod,
int width, int height);
int (*mod_server_version_message)(struct mod *mod);
tintptr mod_dumby[100 - 14]; /* align, 100 minus the number of mod
functions above */
/* server functions */
int (*server_begin_update)(struct mod *v);
int (*server_end_update)(struct mod *v);