我正在尝试使用 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
:该文件包含语言和键盘布局十六进制数之间的映射。
有没有更好的方法来获得可用的键盘布局?
大多数情况下,最简单的方法是使用变通方法(请注意,您必须在直接登录机器时执行以下步骤,而不是通过远程桌面连接):
通过查看上述文件(xrdp_keyboard.ini)来识别与所需布局相对应的十六进制数。
备份 xrdp 使用的默认布局(美国):
sudo cp /etc/xrdp/km-00000409.ini /etc/xrdp/km-00000409.ini.bak
生成当前布局键映射文件并为其分配默认键映射文件的名称:
sudo xrdp-genkeymap /etc/xrdp/km-00000409.ini
重启 xrdp 并尝试通过远程桌面连接登录机器
sudo systemctl restart xrdp
请记住,旧版本的 xrdp 使用更短的方式命名键盘映射文件:公里-0409.ini代替公里-00000409.ini。
要了解发生了什么,请检查 xrdp 日志:
tail -f /var/log/xrdp.log
更新:尽管如此,当你第二次重新连接到同一主机时,你可能会再次遇到同样的问题:这是一个已知的问题。我不知道如何解决它,但请考虑 Windows 客户端(或您的任何客户端)控制面板上的语言设置。上述发布中有人建议修改源代码以缓解重新连接时遇到的问题:
- 修改函数 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;
}
- 修改函数 rdpkeybControl
set.model = "pc105";
set.layout = "us,ru";
set.variant = "";
set.options = "grp:ctrl_shift_toggle";