RDP 键盘映射看起来正确但是不起作用

RDP 键盘映射看起来正确但是不起作用

我正在尝试使用 AMD64 上的 xfce 使 xrdp 的键盘映射在 Ubuntu 16.04 上正常工作。我将其用作开发环境,我只想能够使用 phpstorm,但制表符、箭头等不起作用。

经过多次搜索和多次失败的尝试后,我最终得到以下结果:http://cloclotron.net/xrdp_keyboard_layout_workaround.html

我按照说明操作没有任何问题,但不起作用的键似乎设置正确。

例如,在我的控制台键盘映射中,tab 键行如下所示: 23 0xff09 (Tab) 0xfe20 (ISO_Left_Tab) 0xff09 (Tab) 0xfe20 (ISO_Left_Tab) 这告诉我代码应该是 (dec) 65056 或 65289,但 km-0409 的第 23 行已经显示 65289,当我将其设置为 65056 时,它没有任何区别,tab 键仍然不起作用。

我的箭头键也遇到同样的问题,并且我已验证它们似乎也是正确的。

我如何验证 xrdp 实际使用了哪种键盘布局?

此设置存储在哪里?

有没有更好的方法来获得可用的键盘布局?

tightvnc 也有错误的键盘映射。

当我通过虚拟机管理器连接时,键盘是正确的

答案1

虽然已经很晚了,但我仍然会尽力回答您的问题,以供将来参考。

我如何验证 xrdp 实际使用了哪种键盘布局?

setxkbmap -query

此设置存储在哪里?

您可以在以下位置找到 keuborad 设置/etc/xrdp/xrdp_keyboard.ini:该文件包含语言和键盘布局十六进制数之间的映射。

有没有更好的方法来获得可用的键盘布局?

大多数情况下,最简单的方法是使用变通方法(请注意,您必须在直接登录机器时执行以下步骤,而不是通过远程桌面连接):

  1. 通过查看上述文件(xrdp_keyboard.ini)来识别与所需布局相对应的十六进制数。

  2. 备份 xrdp 使用的默认布局(美国):

    sudo cp /etc/xrdp/km-00000409.ini /etc/xrdp/km-00000409.ini.bak

  3. 生成当前布局键映射文件并为其分配默认键映射文件的名称:

    sudo xrdp-genkeymap /etc/xrdp/km-00000409.ini

  4. 重启 xrdp 并尝试通过远程桌面连接登录机器

    sudo systemctl restart xrdp

请记住,旧版本的 xrdp 使用更短的方式命名键盘映射文件:公里-0409.ini代替公里-00000409.ini

要了解发生了什么,请检查 xrdp 日志:

tail -f /var/log/xrdp.log

更新:尽管如此,当你第二次重新连接到同一主机时,你可能会再次遇到同样的问题:这是一个已知的问题。我不知道如何解决它,但请考虑 Windows 客户端(或您的任何客户端)控制面板上的语言设置。上述发布中有人建议修改源代码以缓解重新连接时遇到的问题:

  1. 修改函数 rdpLoadLayout(当必须使用客户端信息选项重新应用时,更改布局的默认选项和注释代码):

静态 int rdpLoadLayout(rdpKeyboard *keyboard, struct xrdp_client_info *client_info) { XkbRMLVOSet 设置;

    int keylayout = client_info->keylayout;

    LLOGLN(0, ("rdpLoadLayout: keylayout 0x%8.8x variant %s display %s", keylayout, client_info->variant, display));
    memset(&set, 0, sizeof(set));
    set.rules = "base";

    set.model = "pc105";
    set.layout = "us,ru";
    set.variant = "";
    set.options = "grp:ctrl_shift_toggle";

    reload_xkb(keyboard->device, &set);
    reload_xkb(inputInfo.keyboard, &set);
    return 0;
}
  1. 修改函数 rdpkeybControl
 set.model = "pc105";
 set.layout = "us,ru";
 set.variant = "";
 set.options = "grp:ctrl_shift_toggle";

相关内容