我最近将我的 Ubuntu 系统从 20.04 (Xorg) 升级到 22.04,并切换到 Wayland。这次升级给我的环境带来了一些意想不到的挑战,特别是在配置方面。经过必要的故障排除和调整后,我对 Linux 的细微差别更加熟悉了,然而,我遇到了瓶颈,无法弄清楚这一点。没有论坛、SO 问题或 reddit 帖子与此主题相关,适用于我的情况。
语境:
- 我希望建立一致的自定义键盘布局,既可用于常规本地使用,也可用于我的机器的 SSH 会话。
- Wayland 依赖
xkb
于键盘配置或 Sway。我尝试使用input
Sway 配置中的指令和setxkbmap
命令来确保与 xwayland 应用程序的兼容性。 - 直接登录我的机器(例如通过 TTY)与自定义布局完美兼容,但当我通过 SSH 进入时情况并非如此。出于某种原因,在 SSH 会话期间使用常规 dvorak,这很奇怪,因为它应该是 QWERTY 或我的自定义布局,但出于某种原因它两者都不是?
- 我也在考虑使用
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)。来自客户端的输入以字节流的形式传输。请参阅我的这个答案看到甚至“信号”也是这样传输的。
- 但本地客户端程序本身是一个中继,它从本地键盘获取输入,因此由多个本地层消化。与所讨论的配置类似的一些配置是(或至少可能是)其中一个层,但这是一个当地的配置,客户端。
解决方案:设置(或)自定义键盘布局在客户端。