`
xiaoyu966
  • 浏览: 258840 次
  • 性别: 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文件,然后就可以输入了。

 

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

 

 

分享到:
评论

相关推荐

    XRDP ununtu远程闪退解决办法 16.04上亲测

    XRDP(Remote Desktop Protocol)是一种远程桌面协议,允许用户远程连接到另一台计算机,并访问其桌面环境。然而,在 Ubuntu 16.04 系统上,使用 XRDP 远程桌面连接时,可能会遇到闪退的问题。本文将介绍解决 XRDP ...

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

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

    XRDP ununtu远程闪退解决办法

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

    UOS安装XRDP远程

    【UOS XRDP远程连接详解】 UOS,全称Unity Operating System,是中国自主研发的一款操作系统,支持AMD64、ARM64以及MIPS64el架构。为了实现与Windows系统的远程桌面连接,UOS提供了XRDP(X Windows Remote Desktop ...

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

    【描述】:在多种场景中,远程连接到Linux服务器,尤其是Ubuntu,是常见的需求。通常有两种主要方式,一是通过SSH服务(例如xshell)进行无界面的命令行访问;二是使用可视化界面,就像Windows的远程桌面工具,提供...

    xrdp源码Windows远程LINUX桌面

    XRDP(X Remote Desktop Protocol)是一款开源的远程桌面服务软件,专为Linux系统设计,用于实现Windows用户通过RDP(Remote Desktop Protocol)协议访问Linux桌面环境。RDP是由微软开发的一种协议,允许用户通过...

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

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

    远程桌面远程控制linux

    安装XRDP及其依赖,然后在Windows上使用内置的远程桌面客户端连接。步骤如下: 1. 在Linux系统上安装XRDP和必要的图形环境,如Xfce。 2. 启动XRDP服务。 3. 在Windows的“远程桌面”应用中输入Linux服务器的IP。 4. ...

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

    在使用Windows远程桌面连接时,有时可能会遇到一个棘手的问题,即显示“发生身份验证错误,给函数提供的身份无效”。这个错误通常是由于安全更新或安全策略的要求,特别是涉及到凭据安全支持提供程序协议(CredSSP)...

    Ubuntu的远程桌面(xrdp).docx

    Ubuntu 远程桌面(xrdp)是一种基于 RDP 协议的远程桌面连接解决方案,通过安装 xrdp 组件和配置 xfce 桌面环境,可以实现在 Windows、iOS 等平台上远程连接 Ubuntu 主机。下面详细介绍 Ubuntu 12.04 和 14.04 两个...

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

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

    远程桌面连接.rar

    远程桌面连接功能是Windows操作系统提供的一种远程访问工具,允许用户通过网络从一台计算机(客户端)控制另一台计算机(服务器端)。这个功能基于Microsoft Terminal Services(终端服务)或Remote Desktop ...

    Windows和Linux实现远程桌面连接

    描述中提到,通常人们会用VNC来远程连接Linux,而Windows则使用内置的RDP。本文将探讨如何在Linux中远程连接Windows,以及反过来在Windows中远程连接Linux。 在Linux中远程桌面连接Windows,主要涉及以下几个步骤:...

    centos7.9-xrdp.zip

    这个压缩文件允许用户通过Windows系统远程连接到运行CentOS 7.9的Linux服务器,实现图形化的桌面操作。 【描述】提及的Windows远程Linux桌面安装包,具体是指通过xrdp软件,使得CentOS 7.9系统支持RDP协议,这是一...

    Ubuntu的远程桌面(xrdp).pdf

    xrdp是一个开源远程桌面协议(RDP)服务器,可以与Windows的远程桌面客户端配合使用,让Windows用户能够远程连接到Ubuntu桌面。 在Ubuntu 12.04中设置远程桌面(xrdp)的步骤如下: 1. **安装Ubuntu 12.04带桌面界面**...

    Centos7上安装远程桌面vncserver+xrdp

    - 在Windows计算机上安装远程桌面客户端(如TightVNC Viewer),并使用以下格式的地址连接到服务器: - `IP地址:5904` - 第一次连接可能需要输入用户名和密码,这是之前设置的VNC密码。 #### 参考资料 - [配置...

    linux远程桌面连接工具

    1. **XRDP**:这是一个开源的远程桌面协议服务器,允许Linux用户使用Windows的远程桌面客户端进行连接。 2. **TeamViewer**:一款跨平台的远程控制软件,不仅支持Linux,还支持Windows、macOS和移动设备。 3. **VNC ...

    利用xrdp和mstsc远程ubuntu

    远程桌面连接技术之 Xrdp 和 MSTSC 在 Ubuntu 系统上的应用 Xrdp 是一个开源的微软远程桌面协议(RDP)实现,它允许用户通过图形化界面控制远程系统。通过在 Linux 系统上安装 Xrdp,用户可以使用 RDP 客户端远程...

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

    Xrdp是一个开源的远程桌面协议(RDP)实现,兼容微软的RDP客户端,如Windows的远程桌面连接。 首先,为了设置远程桌面,你需要在Ubuntu 20.04上安装一个桌面环境。因为服务器版本默认不带桌面,可以选择安装Gnome或...

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

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

Global site tag (gtag.js) - Google Analytics