============================================================================
原创作品,允许转载。转载时请务必以超链接形式标明原始出处、以及本声明。
请注明转自: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 远程ubuntu出现windows远程桌面后闪退的现象解决办法
XRDP 远程ubuntu出现ubuntu或windows远程桌面后闪退的现象解决办法
对于远程桌面连接Linux,大家可能会第一时间想到使用VNC,,远程桌面Windows,大家第一时间会想到使用Windows自带的远程桌面。那么有没有办法,使得在Linux中可以远程Windows,在Windows中远程桌面Linux?今天就跟...
XRDP LINUX远程桌面共享源码。C语言实现,代码简洁。功能强大。 适合C语言学习和RDP协议学习使用。
windows远程桌面连接时,显示发生身份验证错误,给函数提供的身份无效,不能远程桌面。 初次看到这个错误的时候懵了。访问给的地址一看,发现大概意思是不安全了,微软要更新一下 凭据安全支持提供程序协议 ...
WSL2-Ubuntu20.04版本更换国内源,安装xfce4界面和xrdp,使用自带的远程桌面连接开启图形化桌面
UOS安装XRDP,使用windows远程自带RDP客户端远程
xrdp使用Microsoft远程桌面协议(RDP)为远程计算机提供图形登录。 xrdp接受来自各种RDP客户端的连接:FreeRDP,rdesktop,NeutrinoRDP和Microsoft远程桌面客户端(适用于Windows,Mac OS,iOS和Android)。
不要急急忙忙的让机房值班给你重启机器,因为此时除了远程连接不可用,其他一切应用是不受影响的,网站依旧可以打开,FTP依旧可以上传下载,不属于紧急故 障。 解决办法1: 远程桌面连接-》选项-》高级-》去掉“主题...
有些时候,比如防火墙限制、为了更安全等、不得已的情况下,必须更改tightvncserver xrdp远程桌面默认端口。
修改远程桌面连接端口: 1)读取注册表REG_DWORD值. 2)更改注册表REG_DWORD值. 3)联系方式(QQ:34596561 | E-mail:airen3339@163.com) ...根据更改远程连接端口的原理,即修改注册表两项REG_DWORD值,然后重启计算机即可完成
需要安装桌面服务,并且防火墙开启3389服务,然后安装 tigervnc-server-1.1.0-24.el6.x86_64 xrdp-0.6.1-5.el6.x86_64 #将mysqld 放入linux启动管理体系中 chkconfig --add xrdp #查看全部服务在各运行级状态 ...
本文档是我帮实验室老师安装centos7远程桌面的一个详细配置步骤记录,包含每一步的截图和说明,同时附加了我参考的几篇可靠博客。其中,我们在安装xrdp时,可能会遇到一些问题,比如说启动不了等,这些都可以在网上...
Xrdp 是一个微软远程桌面协议(RDP)的开源实现,它允许你通过图形界面控制远程系统。通过 RDP,你可以登录远程机器,并且创建一个真实的桌面会话,就像你登录本地机器一样。 这篇指南讲解如何在 Ubuntu 20.04 上...
1.配置前准备 升级更新(可选) 更新资源,避免资源过旧出现问题 # 升级更新(可选) ...需配置xrdp.ini,否则远程连接可能无法成功 vim /etc/xrdp/xrdp.ini 把max_bpp=32 改为max_bpp=24 原创文章 89获赞 126访
我们知道,在Windows 2000/XP/2003系统中有一项功能,就是远程桌面,他可以使我们通过网络控制远程的服务器,就像操作本地计算机一样的方便。但是通过网络就难免会遭到黑客的攻击,现在几乎谁都知道远程桌面的端口为...
windows远程桌面ubuntu:Windows远程桌面使用的是RDP协议,所以ubuntu上就要先安装Xrdp,在ubuntu软件中心搜索xrdp安装。 安装xrdp的同时会自动安装vnc4server,xbase-clients组件 或者终端命令行输入安装: sudo apt-...
前言:在很多场景下,我们需要远程连接到Linux服务器(本文是Ubuntu),传统的连接主要分为两种。第一种:通过SSH服务(使用xshell等工具)来远程访问