我使用运行 Ubuntu 的计算机,并通过 ssh 连接到 RedHat 计算机,在其中以命令行模式使用 Matlab (matlab -nodesktop)。 Matlab版本是7.10.0.499 (R2010a)
.
当我键入任何产生“特殊字符”的键(例如ñ,á等)时,就会出现我的问题......
我通过将此别名设置为 matlab 设法解决了这个问题:
alias mat 'xmodmap -e "keycode 47 = Escape" -e "keycode 34 = Escape"; matlab -nodesktop; setxkbmap;'
...但是这个解决方案在全球范围内进行了这些更改,并且我无法在任何其他应用程序(包括终端、浏览器等)中键入这些字符(只要 matlab 正在运行)。
我读到这是这个版本的 Matlab 的问题,但在这种情况下,出现了一个新问题:如果我在连接到其他计算机的终端 (xterm) 中使用 xmodmap,为什么这些更改会全局传播到我的会话?
答案1
检查本地和远程计算机上的区域设置是否匹配:echo $LC_CTYPE
在本地终端和 ssh 会话中运行。如果它们不匹配,请使用 Matlab 重试并LC_CTYPE
设置为正确的值。如果这不起作用,请尝试 withexport LC_CTYPE=C
或 with export LC_CTYPE=en_US
(在黑暗中拍摄,我不知道 Matlab 错误的性质)。
如果您使用的是 UTF-8 语言环境,请尝试使用 8 位语言环境,例如 latin1:
LC_CTYPE=en_US luit ssh redhat-host
如果摆弄语言环境没有帮助,请尝试更激进的方法:stty istrip
在启动 Matlab 之前在终端中运行。这会删除您键入的字符的第 8 位。当您输入带重音的字母时,Matlab 将收到一个垃圾 ASCII 字符,但不会造成任何混淆。请注意,除了切换到 latin-1 语言环境(例如en_US
; )之外,您还应该执行此操作。在其他语言环境中,特别是在 UTF-8 中,垃圾字符可以是控制字符。
有很多 stty 设置,但我想不出一个只会导致非 ASCII 字符被忽略的设置。如果您尝试过stty
,您可以使用 恢复到正常的默认值stty sane
。这些更改是终端本地的。
答案2
您所做的更改不是 Matlab 本地的。您设置别名的命令会编辑当前 X 会话的键盘映射,然后启动 Matlab。这些更改最终会出现在您的计算机上,因为您的 ssh 会话中有 x-forwarding 属性,允许程序与上游 X 服务器通信。您可以轻松地在远程计算机上运行 xterm,它会在本地启动,因为该 shell 知道它的上游 X 会话是通过您的 SSH 连接进行的。
事实上,如果不是这种情况,您的键盘映射修复将毫无作用。您的本地 X 服务器是进行设置的正确位置,而且据我所知,也是唯一可行的位置。
答案3
显然,这个错误已在 MATLAB R2010b(7.11) 中修复。该错误报告可以在不方便(但免费)的 MathWorks 帐户登录后面找到:
在 xterm 中运行的 MATLAB 的 Nodesktop 实例中键入或粘贴扩展字符会导致显示无限循环的提示(错误 624817)。
答案4
我在 matlab 上也遇到了特殊字符的问题,像这样运行它为我解决了这个问题:
LANG=us_US.UTF-8 QT_IM_MODULE=xim GTK_IM_MODULE=xim XMODIFIERS=XIM matlab