我有两个可以使用 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
所以,我们看到的不再反映真实的琴弦,但是,嘿,不要擦除,它会没事的!
如果有人发现或知道原因,我会修改我的答案。