1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > linux远程windows无法输入 XRDP在Windows下用远程桌面连接 键盘失效有关问题

linux远程windows无法输入 XRDP在Windows下用远程桌面连接 键盘失效有关问题

时间:2022-06-09 17:33:07

相关推荐

linux远程windows无法输入 XRDP在Windows下用远程桌面连接 键盘失效有关问题

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);

s->p = s->data;

keylayout对应的是键盘映射,也就是我们说的输入法。这里就是问题发生的原因了,xrdp源码会根据这里取得的client_info->keylayout,通过调用函数get_keymaps 去读取对应的keymap文件。查看一下xrdp自带的几种keymap文件,如下:

[root@localhost xrdp]# ls -lrt /etc/xrdp/km-*

-rw-r--r-- 1 root root 8760 04-19 15:50 /etc/xrdp/km-041d.ini

-rw-r--r-- 1 root root 9169 04-19 15:50 /etc/xrdp/km-0419.ini

-rw-r--r-- 1 root root 8732 04-19 15:50 /etc/xrdp/km-0410.ini

-rw-r--r-- 1 root root 8744 04-19 15:50 /etc/xrdp/km-040c.ini

-rw-r--r-- 1 root root 8756 04-19 15:50 /etc/xrdp/km-0407.ini

-rw-r--r-- 1 root root 8461 05-21 10:20 /etc/xrdp/km-0409.ini

[root@localhost xrdp]#

======================第二部分 windows 输入法顺序======================

下面介绍一下每种输入法对应的keylayout。

Windows系统下,在注册表编辑器(在“开始/运行”对话框中输入“REGEDIT”)中展开,“HKEY_CURRENT_USER\Keyboard Layout\Preload”分支。

我的第一项是E004,代表的是搜狗输入法。具体的输入法对应的编码如下:

E004 紫光输入法*①

E00E0804 微软拼音输入法

E0040804 智能abc输入法

E0050804 区位码输入法

E0010804 全拼输入法

E0100804 五笔输入法

00000409 英文输入法

E0030804 郑码输入法

E0020804 双拼输入法

00000804 中文输入法(简体)-美式键盘

*①注:E004这个不一定是紫光的,他可能是谷歌、搜狗、智能陈桥、拼音加加Plus、紫光中的任一种(还可能是与这些输入法输入状态栏一样的其他拼音输入法),这个取决于你系统先安装这几个输入法中的哪一个,那个就是E004

通过调整HKEY_CURRENT_USER\Keyboard Layout\Preload中的1,2,3就可以调整输入法顺序了。

========================第三部分 解决问题========================

通过第二部分,知道了我的windows系统第一输入法是E004, 而在Linux系统下Xrdp默认的keymap文件中,是没有“km-E004.ini”这个文件的,这就导致xrdp无法读取keymap文件,无法进行键盘映射,从而导致了我们无法再xrdp界面中输入。

这样,我们把windows注册表中HKEY_CURRENT_USER\Keyboard Layout\Preload中的1,编辑成00000409, 即英文输入法,这样,xrdp就会去读取“km-0409.ini” keymap文件,然后就可以输入了。

需要注意的是,修改注册表之后,记得重启系统。或者是注销一下,让其起作用。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。