Tôi có VPS Debian 6 (64 bit) nơi tôi dường như không thể nhận được các biến môi trường cục bộ LANG và LC_ * được đặt. (Mọi thứ bên dưới là root).
vps:~# locale -a
C
POSIX
en_US.utf8
nl_NL.utf8
vps:~# locale
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
vps:~# cat /etc/default/locale
# File generated by update-locale
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_COLLATE=POSIX
Điều này sẽ ghi đè cài đặt ngôn ngữ được cung cấp qua ứng dụng khách SSH của tôi, nhưng cài đặt ngôn ngữ mặc định không có hiệu lực.
.profile, .bashrc, / etc / môi trường và / etc / profile không chứa bất kỳ cài đặt ngôn ngữ nào. Tôi cũng không tìm thấy bất kỳ vị trí nào khác từ đó các biến môi trường này có nguồn gốc.
me:~# grep "LANG" ~/.profile ~/.bashrc /etc/environment /etc/profile
me:~# grep "LC_" ~/.profile ~/.bashrc /etc/environment /etc/profile
me:~#
Cài đặt máy khách SSH của tôi cũng không có hiệu lực, trong khi chúng thực hiện trên các VPS khác. Tại địa phương, tôi có trong / etc / ssh / ssh_config:
SendEnv LANG LC_*
Và trên VPS, / etc / ssh / sshd_config chứa:
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
Tôi không chắc liệu các biến này có hiệu lực hay không, nhưng /etc/pam.d/login của VPS của tôi có chứa:
# locale variables are also kept into /etc/default/locale in etch
# reading this file *in addition to /etc/environment* does not hurt
session required pam_env.so readenv=1 envfile=/etc/default/locale
Và /etc/pam.d/sshd chứa:
# Read environment variables from /etc/environment and
# /etc/security/pam_env.conf.
auth required pam_env.so # [1]
# In Debian 4.0 (etch), locale-related environment variables were moved to
# /etc/default/locale, so read that as well.
auth required pam_env.so envfile=/etc/default/locale
(của tôi /etc/security/pam_env.conf
chỉ chứa các tùy chọn nhận xét)
Vì vậy, có vẻ như một cái gì đó không cho phép cài đặt ngôn ngữ / máy khách SSH của tôi / etc / default / locale của tôi có hiệu lực, do đó, nó mặc định là POSIX (hoặc một cái gì đó đang buộc POSIX rõ ràng). Bất kỳ manh mối gì có thể can thiệp? Hoặc ý tưởng làm thế nào để tìm ra nó là gì?
Tôi có thể làm, export LC_CTYPE=en_US.UTF-8
v.v. trong .bashrc của tôi và điều đó không hoạt động. Tuy nhiên, tôi đang cố gắng hiểu hành vi này, khác với hành vi trên các bản cài đặt Debian (6 hoặc 7) khác mà tôi đang làm việc.
Chỉnh sửa: một số chi tiết khác:
- Tôi đã khởi động lại hệ thống, không có hiệu lực;
- / etc / ssh / sshd_config có
UsePAM yes
; - Tôi cũng đã thử sử dụng
en_US.utf8
làm tên thay thế trong/etc/default/locale
.
locale -a
ở trên cùng. So sánh toàn bộ hệ thống có vẻ như rất nhiều công việc, tôi đã hy vọng cho một cách tiếp cận mục tiêu hơn.
/etc/pam.d/login
nhưng tệp đó chỉ được tư vấn cho thông tin đăng nhập cục bộ (ví dụ: đăng nhập trên bảng điều khiển hoặc các cổng nối tiếp khác được quản lý bởi getty
). Để đăng nhập SSH, bạn sẽ muốn xem xét /etc/pam.d/sshd
thay thế. Của tôi không chứa pam_env.so
dòng cần thiết . Có phải của bạn không? Cuối cùng, bạn có thể kiểm tra đầu ra env
sau khi đăng nhập bằng SSH chỉ để đảm bảo các cài đặt biến môi trường cho LANG
và LC_CTYPE
thực sự có mặt.
su -
đến root, nó có giữ các cài đặt ngôn ngữ không?