`
xiaoyu966
  • 浏览: 254483 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

XRDP在Windows下用远程桌面连接,键盘失效问题

阅读更多

============================================================================

原创作品,允许转载。转载时请务必以超链接形式标明原始出处、以及本声明。

请注明转自:http://yunjianfei.iteye.com/blog/

============================================================================

 

很久没上这个博客了,最近在做虚拟化方面的东西,有个需求是通过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文件,然后就可以输入了。

 

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

 

 

分享到:
评论

相关推荐

    解决关闭远程桌面连接后,鼠标、键盘、剪切板失效问题

    退出远程桌面连接的exe文件,使退出后服务器功能一切正常,防止鼠标、键盘、剪切板失效,可定时

    XRDP ununtu远程闪退解决办法

    XRDP 远程ubuntu出现windows远程桌面后闪退的现象解决办法

    Windows和Linux实现远程桌面连接

    对于远程桌面连接Linux,大家可能会第一时间想到使用VNC,,远程桌面Windows,大家第一时间会想到使用Windows自带的远程桌面。那么有没有办法,使得在Linux中可以远程Windows,在Windows中远程桌面Linux?今天就跟...

    xrdp源码Windows远程LINUX桌面

    XRDP LINUX远程桌面共享源码。C语言实现,代码简洁。功能强大。 适合C语言学习和RDP协议学习使用。

    windows远程桌面连接时,显示发生身份验证错误,给函数提供的身份无效.docx

    windows远程桌面连接时,显示发生身份验证错误,给函数提供的身份无效,不能远程桌面。 初次看到这个错误的时候懵了。访问给的地址一看,发现大概意思是不安全了,微软要更新一下 凭据安全支持提供程序协议 ...

    WSL2使用xrdp连接xfce4桌面详细配置教程.txt

    WSL2-Ubuntu20.04版本更换国内源,安装xfce4界面和xrdp,使用自带的远程桌面连接开启图形化桌面

    UOS安装XRDP远程

    UOS安装XRDP,使用windows远程自带RDP客户端远程

    cpp-xrdp一个开源的Microsoft远程桌面协议RDP服务器

    xrdp使用Microsoft远程桌面协议(RDP)为远程计算机提供图形登录。 xrdp接受来自各种RDP客户端的连接:FreeRDP,rdesktop,NeutrinoRDP和Microsoft远程桌面客户端(适用于Windows,Mac OS,iOS和Android)。

    远程桌面登录蓝色屏幕、不显示桌面怎么解决?

    不要急急忙忙的让机房值班给你重启机器,因为此时除了远程连接不可用,其他一切应用是不受影响的,网站依旧可以打开,FTP依旧可以上传下载,不属于紧急故 障。 解决办法1: 远程桌面连接-》选项-》高级-》去掉“主题...

    更改树莓派xrdp远程桌面默认端口.txt

    有些时候,比如防火墙限制、为了更安全等、不得已的情况下,必须更改tightvncserver xrdp远程桌面默认端口。

    修改远程桌面默认端口3389

    修改远程桌面连接端口: 1)读取注册表REG_DWORD值. 2)更改注册表REG_DWORD值. 3)联系方式(QQ:34596561 | E-mail:airen3339@163.com) ...根据更改远程连接端口的原理,即修改注册表两项REG_DWORD值,然后重启计算机即可完成

    Centos 6的远程桌面 Xrdp

    需要安装桌面服务,并且防火墙开启3389服务,然后安装 tigervnc-server-1.1.0-24.el6.x86_64 xrdp-0.6.1-5.el6.x86_64 #将mysqld 放入linux启动管理体系中 chkconfig --add xrdp #查看全部服务在各运行级状态 ...

    Centos7上安装远程桌面vncserver+xrdp

    本文档是我帮实验室老师安装centos7远程桌面的一个详细配置步骤记录,包含每一步的截图和说明,同时附加了我参考的几篇可靠博客。其中,我们在安装xrdp时,可能会遇到一些问题,比如说启动不了等,这些都可以在网上...

    详解如何在Ubuntu 20.04上安装Xrdp服务器(远程桌面)

    Xrdp 是一个微软远程桌面协议(RDP)的开源实现,它允许你通过图形界面控制远程系统。通过 RDP,你可以登录远程机器,并且创建一个真实的桌面会话,就像你登录本地机器一样。 这篇指南讲解如何在 Ubuntu 20.04 上...

    怎样在阿里云的centos7安装xrdp进行远程桌面访问

    1.配置前准备 升级更新(可选) 更新资源,避免资源过旧出现问题 # 升级更新(可选) ...需配置xrdp.ini,否则远程连接可能无法成功 vim /etc/xrdp/xrdp.ini 把max_bpp=32 改为max_bpp=24 原创文章 89获赞 126访

    修改远程桌面默认3389端口号为其他端口号

    我们知道,在Windows 2000/XP/2003系统中有一项功能,就是远程桌面,他可以使我们通过网络控制远程的服务器,就像操作本地计算机一样的方便。但是通过网络就难免会遭到黑客的攻击,现在几乎谁都知道远程桌面的端口为...

    windows远程桌面ubuntu

    windows远程桌面ubuntu:Windows远程桌面使用的是RDP协议,所以ubuntu上就要先安装Xrdp,在ubuntu软件中心搜索xrdp安装。 安装xrdp的同时会自动安装vnc4server,xbase-clients组件 或者终端命令行输入安装: sudo apt-...

    xrdp完美实现Windows远程访问Ubuntu 16.04 - sinolover的专栏 - CSDN博客1

    前言:在很多场景下,我们需要远程连接到Linux服务器(本文是Ubuntu),传统的连接主要分为两种。第一种:通过SSH服务(使用xshell等工具)来远程访问

Global site tag (gtag.js) - Google Analytics