在 CentOS 6.3 64 位元環境下,使用 SecureCRT 連線時,su 或 su - 按下 Enter 後長時間無回應,甚至出現亂碼錯誤。經排查,根本原因是 系統語系設為中文(GB18030)而終端編碼設為 UTF-8,導致提示訊息編碼不匹配,造成命令卡住。

su/su - 無反應,等待約 1 分鐘後出現亂碼提示vi 編輯中文檔案亂碼,將 SecureCRT 的 Character encoding 從 Default 改為 UTF-8。/etc/sysconfig/i18n 設定為中文環境:LANG="zh_CN.GB18030"LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"su 執行時會輸出提示訊息(如密碼提示),系統以 GB18030 編碼送出,但終端以 UTF-8 解碼,導致解碼失敗、卡住等待。# 編輯 /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
# 其餘行可註解或移除
SecureCRT → Options → Session Options → Terminal → Appearance → Character encoding:**UTF-8**
su 正常提示密碼並切換身分。vi 編輯中文檔案不再亂碼(因系統與終端同為 UTF-8)。系統語系(LANG)與終端編碼必須一致。 推薦統一使用 en_US.UTF-8 + 終端 UTF-8,同時支援中文顯示與命令正常運作。
此問題常見於 CentOS 6 / RHEL 6 系列,搭配 SecureCRT、Xshell 等終端且手動修改過語系或終端編碼的情境。新版 CentOS 7/8/9、Ubuntu 等預設皆為 UTF-8,較少發生。