在 Wayland 中设置自定义键盘布局不适用于 SSH 连接

在 Wayland 中设置自定义键盘布局不适用于 SSH 连接

我最近将我的 Ubuntu 系统从 20.04 (Xorg) 升级到 22.04,并切换到 Wayland。这次升级给我的环境带来了一些意想不到的挑战,特别是在配置方面。经过必要的故障排除和调整后,我对 Linux 的细微差别更加熟悉了,然而,我遇到了瓶颈,无法弄清楚这一点。没有论坛、SO 问题或 reddit 帖子与此主题相关,适用于我的情况。

语境

  1. 我希望建立一致的自定义键盘布局,既可用于常规本地使用,也可用于我的机器的 SSH 会话。
  2. Wayland 依赖xkb于键盘配置或 Sway。我尝试使用inputSway 配置中的指令和setxkbmap命令来确保与 xwayland 应用程序的兼容性。
  3. 直接登录我的机器(例如通过 TTY)与自定义布局完美兼容,但当我通过 SSH 进入时情况并非如此。出于某种原因,在 SSH 会话期间使用常规 dvorak,这很奇怪,因为它应该是 QWERTY 或我的自定义布局,但出于某种原因它两者都不是?
  4. 我也在考虑使用mosh,据我所知,它不支持 XForwarding,而 XForwarding 是 xwayland 工作所必需的,在 setxkbmap 方面也是如此。当然,我的知识仍然有空白,所以我不知道我说的话是否有意义

配置:这是我的 Sway 配置的一个片段:

input * xkb_layout custom
exec_always setxkbmap custom

如何确保我的自定义键盘布局得到一致应用,尤其是对于非交互式 shell 或 SSH 会话?

感谢您的见解和建议!

答案1

你写了:

直接登录到我的机器(例如通过 TTY)与自定义布局完美兼容,但当我通过 SSH 进入时情况并非如此。

您期望通过 SSH 登录时应用服务器端的键盘配置。但事实并非如此。

SSH 不会传输任何与键盘相关的代码来解释像这样在远程端。它传输字节。sshd与服务器上运行的程序(例如交互式 shell)之间的唯一处理是线路规程(在分配 TTY 的情况下)或什么都没有(否则)。

与键盘相关的所有操作都是在客户端本地完成的,本地配置很重要。此外,本地终端(或终端仿真器)可能会在键盘输入到达 SSH 客户端之前对其进行转换(两者之间存在线路规则,但大部分是透明的);客户端本身(或例如与终端仿真器捆绑在一起的 SSH 客户端 PuTTY)可能会进行一些转换。但是一旦数据到达远程端,它就不会被视为键盘输入。

服务器的键盘配置并不重要,因为您没有在服务器上使用任何键盘。

换句话说:

  • 当您在终端(或带有 GUI 的终端仿真器)中运行非 GUI 程序(如 shell)时,它会从经过多层消化的键盘获取输入;所讨论的配置是(或至少可能是)其中一层。

  • 当您通过 SSH 在远程服务器上运行非 GUI 程序(如 shell)时,它会从本地 SSH 客户端获取输入,几乎不做任何修改(如果在服务器端分配了 TTY),甚至不做任何修改(如果没有 TTY)。来自客户端的输入以字节流的形式传输。请参阅我的这个答案看到甚至“信号”也是这样传输的。

    • 但本地客户端程序本身是一个中继,它从本地键盘获取输入,因此由多个本地层消化。与所讨论的配置类似的一些配置是(或至少可能是)其中一个层,但这是一个当地的配置,客户端。

解决方案:设置(或)自定义键盘布局在客户端

相关内容