============================================================================
原创作品,允许转载。转载时请务必以超链接形式标明原始出处、以及本声明。
请注明转自: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文件,然后就可以输入了。
需要注意的是,修改注册表之后,记得重启系统。或者是注销一下,让其起作用。
相关推荐
XRDP(Remote Desktop Protocol)是一种远程桌面协议,允许用户远程连接到另一台计算机,并访问其桌面环境。然而,在 Ubuntu 16.04 系统上,使用 XRDP 远程桌面连接时,可能会遇到闪退的问题。本文将介绍解决 XRDP ...
退出远程桌面连接的exe文件,使退出后服务器功能一切正常,防止鼠标、键盘、剪切板失效,可定时
XRDP 远程ubuntu出现windows远程桌面后闪退的现象解决办法
【UOS XRDP远程连接详解】 UOS,全称Unity Operating System,是中国自主研发的一款操作系统,支持AMD64、ARM64以及MIPS64el架构。为了实现与Windows系统的远程桌面连接,UOS提供了XRDP(X Windows Remote Desktop ...
【描述】:在多种场景中,远程连接到Linux服务器,尤其是Ubuntu,是常见的需求。通常有两种主要方式,一是通过SSH服务(例如xshell)进行无界面的命令行访问;二是使用可视化界面,就像Windows的远程桌面工具,提供...
XRDP(X Remote Desktop Protocol)是一款开源的远程桌面服务软件,专为Linux系统设计,用于实现Windows用户通过RDP(Remote Desktop Protocol)协议访问Linux桌面环境。RDP是由微软开发的一种协议,允许用户通过...
在使用Windows远程桌面连接时,有时可能会遇到一个棘手的问题,即显示“发生身份验证错误,给函数提供的身份无效”。这个错误通常是由于安全更新或安全策略的要求,特别是涉及到凭据安全支持提供程序协议(CredSSP)...
安装XRDP及其依赖,然后在Windows上使用内置的远程桌面客户端连接。步骤如下: 1. 在Linux系统上安装XRDP和必要的图形环境,如Xfce。 2. 启动XRDP服务。 3. 在Windows的“远程桌面”应用中输入Linux服务器的IP。 4. ...
Ubuntu 远程桌面(xrdp)是一种基于 RDP 协议的远程桌面连接解决方案,通过安装 xrdp 组件和配置 xfce 桌面环境,可以实现在 Windows、iOS 等平台上远程连接 Ubuntu 主机。下面详细介绍 Ubuntu 12.04 和 14.04 两个...
远程桌面连接功能是Windows操作系统提供的一种远程访问工具,允许用户通过网络从一台计算机(客户端)控制另一台计算机(服务器端)。这个功能基于Microsoft Terminal Services(终端服务)或Remote Desktop ...
WSL2-Ubuntu20.04版本更换国内源,安装xfce4界面和xrdp,使用自带的远程桌面连接开启图形化桌面
这个压缩文件允许用户通过Windows系统远程连接到运行CentOS 7.9的Linux服务器,实现图形化的桌面操作。 【描述】提及的Windows远程Linux桌面安装包,具体是指通过xrdp软件,使得CentOS 7.9系统支持RDP协议,这是一...
xrdp是一个开源远程桌面协议(RDP)服务器,可以与Windows的远程桌面客户端配合使用,让Windows用户能够远程连接到Ubuntu桌面。 在Ubuntu 12.04中设置远程桌面(xrdp)的步骤如下: 1. **安装Ubuntu 12.04带桌面界面**...
- 在Windows计算机上安装远程桌面客户端(如TightVNC Viewer),并使用以下格式的地址连接到服务器: - `IP地址:5904` - 第一次连接可能需要输入用户名和密码,这是之前设置的VNC密码。 #### 参考资料 - [配置...
1. **XRDP**:这是一个开源的远程桌面协议服务器,允许Linux用户使用Windows的远程桌面客户端进行连接。 2. **TeamViewer**:一款跨平台的远程控制软件,不仅支持Linux,还支持Windows、macOS和移动设备。 3. **VNC ...
远程桌面连接技术之 Xrdp 和 MSTSC 在 Ubuntu 系统上的应用 Xrdp 是一个开源的微软远程桌面协议(RDP)实现,它允许用户通过图形化界面控制远程系统。通过在 Linux 系统上安装 Xrdp,用户可以使用 RDP 客户端远程...
Xrdp是一个开源的远程桌面协议(RDP)实现,兼容微软的RDP客户端,如Windows的远程桌面连接。 首先,为了设置远程桌面,你需要在Ubuntu 20.04上安装一个桌面环境。因为服务器版本默认不带桌面,可以选择安装Gnome或...
xrdp使用Microsoft远程桌面协议(RDP)为远程计算机提供图形登录。 xrdp接受来自各种RDP客户端的连接:FreeRDP,rdesktop,NeutrinoRDP和Microsoft远程桌面客户端(适用于Windows,Mac OS,iOS和Android)。
4. **开始连接**:在Windows上打开远程桌面客户端,输入Ubuntu的IP地址,选择连接模块为vnc-any(因为Xrdp使用VNC协议与Windows RDP客户端通信),保持默认端口5900不变,输入设置的密码,就可以成功建立远程桌面...
linux安装xrdp后可用于win远程linux服务器桌面,实现可视化操作。