无法通过 SSH 输入重音字符“é”

无法通过 SSH 输入重音字符“é”

我有两个可以使用 SSH 连接的 QNAP:

  • TS-412
  • TS-851

在 TS-851 上,登录后,如果我在键盘上输入“é”,屏幕上会显示“é”。另一方面,TS-412 不会在屏幕上打印该字符。因此,我无法访问任何包含重音字符的内容(仍然通过 SSH)。

我搜索了一下,发现的都是关于 SMB 的问题,但我的情况不是这样。共享文件夹显示正确。通过 SSH 列出文件夹会显示所有重音字符。但是,输入并粘贴不会进入框。即使路径自动完成也会删除重音字符。

两者的语言环境相同。一切似乎都一样,但显然有些东西不一样。

我知道 QNAP 有自己的 Linux 版本,我已经在他们的论坛上问过了,但万一有人知道的话。因为,我认为这个问题更像是一个通用的 Linux 问题(不是说它已经全部解决了,但它并不是 QNAP 独有的)。

这真是太烦人了!

编辑 #1 - 回答问题

locale在我的电脑上执行:

LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=

locale在 TS-412 上执行:

LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

locale在 TS-851 上执行:

LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

echo $TERM $SHELL所有机器上的输出相同:

xterm-256color /bin/bash

我的电脑、TS-412、TS-851 上的输出uname -a(按顺序):

Linux COMPUTER_NAME 5.10.102.1-microsoft-standard-WSL2 #1 SMP Wed Mar 2 00:30:59 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

Linux QNAP_TS_412_NAME 3.4.6 #1 Thu Nov 24 07:58:16 CST 2022 armv5tel unknown

Linux QNAP_TS_851_NAME 5.10.60-qnap #1 SMP Thu Jan 12 01:41:46 CST 2023 x86_64 GNU/Linux

所有设备都已更新至最新版本,但 TS-412 和 TS-851 不是同一版本,因为 TS-421 太旧,无法更新到版本 5。

TS-412 版本:4.3.3.2211

TS-851 版本:5.0.1.2277

编辑 #2 - 补丁

我可以绕过这个问题,编写一个包含重音字符的脚本,执行我想要执行的操作,然后运行它。这可行,但……不实用。

编辑#3-新测试

locale -a

两个 QNAP 均给出相同的结果:

C
en_US.utf8
POSIX

cat测试

输入cat <Enter> <é>,出现 字符。<CTRL+D>,再次出现 字符。<CTRL-D>cat退出。

vi测试

当我启动时,vi我可以输入é并且它就会出现。

最后两个测试告诉我,shell 输入行中有一些东西阻塞了某些字符。

答案1

我在@KamilMaciorowski 的帮助下找到了解决方案

修改/etc/inputrc以包括set convert-meta off它。

由于 QNAP 的特殊操作系统,此修改无法在重启后继续存在,但https://wiki.qnap.com/wiki/Running_Your_Own_Application_at_Startup并制作脚本来相应地修改文件,它有效了!

虽然还存在一个问题,但是目前它还很小,可以忍受:

输入é,我必须按两次退格键才能删除该字符。所以:

[user@QNAP_NAME ~]$ echo "ABé"
ABé
[user@QNAP_NAME ~]$ echo "AB" ==> DID one backspace
AB�
[user@QNAP_NAME ~]$ echo "A" ==> No "é"
A
[user@QNAP_NAME ~]$ echo "A" ==> Typed "A", "B", "é", two backspaces
AB

所以,我们看到的不再反映真实的琴弦,但是,嘿,不要擦除,它会没事的!

如果有人发现或知道原因,我会修改我的答案。

相关内容