XRDP在Windows下用远程桌面连接,键盘失效问题
很久没上这个博客了,最近在做虚拟化方面的东西,有个需求是通过windows远程连接Linux桌面,采用的是xrdp。安装和使用xrdp都比较容易,这里就不讲了。
在使用xrdp的时候,遇到过一个问题,就是用windows远程桌面工具连接Linux桌面的时候,xrdp的界面出来了,但是键盘输入没有任何反应。经过仔细排查,阅读其源码,还有用tcpdump抓包分析,最后找到了解决方案。下面简单的讲一下问题的原理以及解决方案。
========================第一部分 XRDP keymap原理=======================
windows的远程桌面连接使用的是RDP协议。在使用其连接xrdp服务端时,会发一个connect-initial的包。里面包含了windows主机的各种信息,例如hostname等。
xrdp接收到包之后,会进行解析,其中有个函数 xrdp_sec_in_mcs_data, 其中有几行如下:
/* get keylayout */
s->p = s->data;
in_uint8s(s, 39);
in_uint32_le(s, client_info->keylayout);