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”分支。

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

E0200804 紫光输入法*①

E00E0804 微软拼音输入法

E0040804 智能abc输入法

E0050804 区位码输入法

E0010804 全拼输入法

E0100804 五笔输入法

00000409 英文输入法

E0030804 郑码输入法

E0020804 双拼输入法

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

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

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

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

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

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

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

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

  1. 【Linux】——在Xshell输入ssh root@公网ip进行远程连接Linux失败,显示(port 22): Connection failed的完美解决方法

    这里写目录标题 Connection failed-连接失败 解决方案(逐步解决1-2-3-4) 方法一: 方法二: 方法三: 方法四: Connection failed-连接失败 作为一位Linu ...

  2. Windows Server 远程桌面连接 复制失效 rdpclip.exe

    杀死rdpclip.exe进程 开始->运行->rdpclip.exe 参考:骑士互联 - 用户登录中心

  3. 远程监控技术计算机网络,计算机网络技术视角下的远程监控技术研究

    摘 要:随着计算机技术和网络技术的不断更新, 其在各个领域都不断发挥着越来越重要的作用.尤其是在现代化工业生产中, 更是展现出不可替代的优势.以网络为核心建立在计算机技术的基础上的新型远程监控技术, ...

  4. xshell进入桌面_Xshell怎么远程桌面连接Linux系统

    大部分人都只记得Windows和IOS系统,其实大家都把Linux系统遗忘了,导致很多人连怎么连接Linux系统都不太清楚明白.Windows系统可以用远程桌面,Linux系统怎么来远程桌面呢?下面就 ...

  5. Xrdp - 通过Windows的RDP连接Linux远程桌面(Ubuntu/CentOS/Redhat 7)(转载)

    您多久访问一次Linux桌面? 您使用什么工具来访问远程桌面? Xrdp是一个开源工具,允许用户通过Windows RDP访问Linux远程桌面. 除了Windows RDP之外,xrdp工具还接受来 ...

  6. 转:在windows通过Xrdp软件远程桌面连接Fedora

    从Windows机器远程桌面连接Fedora系统可以通过Xrdp软件来实现.这篇文章讲述了如何安装Xrdp和使用xrdp.从Windows中通过RDP协议远程桌面连接到linux系统是一件很困难的事情 ...

  7. 远程桌面使用linux,在Windows 系统下使用远程桌面连接Linux 系统主机的方法

    在使用此方法前请判断需要连接的Linux 系统主机拥有公网IP地址或在同一局域网内 本实例采用Raspberry(基于Debian)和Putty 1.使用SSH连接LInux 主机: 1.1启动Lin ...

  8. winserver下oracle好运维吗,在Windows 客户端下备份远程Linux服务器上的Oracle数据库...

    1.在Windows上安装Oracle客户端软件(比如:win32_11gR1_client版本最好跟服务器Oracle版本相同) 系统运维  www.osyunwei.com  温馨提醒:qihan ...

  9. 在 Windows 下远程桌面连接 Linux - XManager 篇

    XManager是一个简单易用的高性能的运行在Windows平台上的X-Server软件,而Gnome和KDE就是X-Client,Linux下的X-Server则为Xorg.它能把远端Unix/Li ...

最新文章

  1. 动态代理以及对应Spring中AOP源码分析
  2. linux常用关机命令及其区别-Shutdown halt reboot init
  3. RHEL6 安装ipvsadm-1.26
  4. 用c语言运行Linux命令,使用execv(C语言)从linux命令提示符运行命令
  5. C++中读取文件乱码问题
  6. IOS控件内容 对齐方式
  7. Starship Troopers(HDU 1011 树形DP)
  8. 冯永昌:云计算与大数据时代的量化投资
  9. java为什么使用TypeReference
  10. Vue:不使用webpack情况下将Cesium引入到Vue项目中
  11. 几个关于矩阵的定义 奇异值分解 谱分解
  12. Unity 移动摄像机到目标位置
  13. tabbar角标 小程序_关于小程序tabbar不支持传参的处理办法
  14. 女儿拿着小天才电话手表问我App启动流程
  15. 趁年轻,多尝试一些富有挑战的工作吧
  16. 【C#】EAN-13条形码生成与识别
  17. 隐马尔可夫模型 #博学谷IT学习技术支持#
  18. 浅谈智慧城市管廊综合管理平台的建设
  19. Unity 2D塔防
  20. uniapp 路由uni.navigateTo 传参

热门文章

  1. (三)nimlang web开发 index.html jester
  2. android权限设置在哪找,Android权限申请与打开权限设置页面
  3. python相比于c语言更静态_让python成为你工作当中的加速器,超越的不只是时间,小白赶紧看过来!!!...
  4. 改变世界的25本科普书
  5. 【附源码】计算机毕业设计java校园新闻发布系统设计与实现
  6. 计算机网络基础知识合集
  7. python鼠标画点连线_使用Matplotlib在Python中使用鼠标在图像上绘制点
  8. 360手机助手 无法android 4.2手机软件移动sd卡,360手机助手设置软件默认安装到SD卡中的教程...
  9. {}如何进行博客推广
  10. C++中accumulate的用法