Môi trường thiết lập chính xác


15

Tôi đang sử dụng zsh và gdm để chạy gnome. Một thời gian trước tôi phát hiện ra rằng các biến không được đặt chính xác. Ví dụ LANG / LC_ALL không chính xác ( ""thay vì en_GB.UTF-8).

Tôi chia .zshrcthành .zshrc.profile. Sau này tôi đặt các biến môi trường, nhưng làm thế nào tôi có thể đặt các biến trước khi phiên bắt đầu? Tôi đã thử một vài lựa chọn ( .xinitrc, .xsessionrc) nhưng dường như không có cách nào hiệu quả.

Chỉnh sửa Để làm rõ - Tôi đã sử dụng .profiletự tìm nguồn gốc trong đó .zshrc. Nó không thay đổi câu hỏi nào.


Là của bạn .profilekhông được tải ở tất cả, hoặc là một cái gì khác ghi đè lên các biến địa phương? (Hãy thử đặt một số biến khác như export MACIEJ_PROFILE=yesđể chắc chắn. set -xTrong .profilecó thể là một cách tốt để kiểm tra những gì đang được thực hiện trong và sau .profile, nếu nó đọc ở tất cả.) Không có điểm nào trong nguồn .profiletừ .zshrc.
Gilles 'SO- ngừng trở nên xấu xa'

Đây có phải là một vấn đề trong các cửa sổ đầu cuối hoặc ở nơi khác? Bạn có nhận được cài đặt ngôn ngữ mong muốn khi bạn chạy ssh localhost zshkhông? Thế còn ssh localhost bash? Nếu bash là ok nhưng không phải zsh, có thể bạn đặt một cái gì đó vào /etc/zshenvhoặc ~/.zshenv(đó là khá nhiều luôn là một ý tưởng tồi).
Gilles 'SO- ngừng trở nên xấu xa'

Không có vỏ hoạt động tốt (trước và sau khi tách). Vấn đề là gnome-sessionkhông có bộ biến này.
Maciej Piechotka

Câu trả lời:


21

Cách đơn giản là phát minh ra một cỗ máy thời gian, thăm những người khác nhau đã nghĩ ra các tệp khởi động shell và bảo họ phân biệt rõ ràng giữa ba điều:

  • thiết lập phiên, ví dụ các biến môi trường;
  • khởi chạy phiên, ví dụ: bắt đầu trình bao dòng lệnh hoặc trình quản lý cửa sổ hoặc đang chạy startx;
  • khởi tạo shell, ví dụ bí danh, dấu nhắc, các ràng buộc chính.

Không quá khó để có được phiên so với shell theo cách di động: khởi tạo thời gian đăng nhập đi vào .profile(hoặc .zprofile, hoặc .login), khởi tạo shell đi vào .bashrchoặc .zshrc. Trước đây tôi đã viết về .bash_profile, zsh so với các shell khác , nhiều hơn về tính di động (chủ yếu là về bash) , nhiều hơn về người đọc.profile .

Một vấn đề còn lại là phân biệt giữa thiết lập phiên và khởi chạy phiên. Trong hầu hết các trường hợp, ~/.profileđược thực thi khi bạn đăng nhập và có thể tăng gấp đôi cả hai, nhưng vẫn có ngoại lệ:

  • Nếu vỏ đăng nhập của bạn là (t) csh hoặc zsh, ~/.login~/.zprofilecó nguồn gốc thay vì ~/.profile. Ditto cho bash và ~/.bash_profile, nhưng điều này dễ dàng được giải quyết bằng cách tìm nguồn cung ứng ~/.profiletừ ~/.bash_profile.
  • Nếu bạn đăng nhập dưới trình quản lý hiển thị (xdm, gdm, kdm, thì), việc bạn ~/.profilecó đọc hay không phụ thuộc vào phiên bản của chương trình, vào bản phân phối của bạn (Linux hoặc cách khác) và vào loại phiên bạn chọn.
    • Nếu bạn dựa vào trình quản lý hiển thị để bắt đầu một phiên cho bạn, bạn .profilephải đặt các biến môi trường nhưng không bắt đầu phiên (ví dụ: trình quản lý cửa sổ).
    • Tệp cấu hình truyền thống cho các phiên X là ~/.xsession, thực hiện cả thiết lập phiên và khởi chạy phiên. Vì vậy, các tập tin có thể là cơ bản . ~/.xsession; . ~/.xinitrc. Một số nguồn phân phối ~/.profiletrước ~/.xsession. Các bản phân phối hiện đại chỉ có nguồn ~/.xsessionkhi bạn chọn phiên Phiên bản tùy chỉnh của người Đức từ trình quản lý hiển thị và phiên này không phải lúc nào cũng có sẵn.
    • Trình quản lý phiên của bạn có thể có cách riêng để đặt các biến môi trường. (Đó là một phần tùy chọn trong môi trường máy tính để bàn của bạn, do bạn chọn thông qua tệp cấu hình hoặc bằng cách chọn loại phiên khi đăng nhập; đừng nhầm lẫn với các tập lệnh khởi động phiên được cung cấp bởi trình quản lý hiển thị, được thực thi dưới người dùng của bạn được chọn trên cơ sở toàn hệ thống. Vâng, đó là một mớ hỗn độn.)

Tóm lại, ~/.profilelà nơi thích hợp cho các biến môi trường. Nếu nó không được đọc, hãy thử tìm nguồn từ ~/.xsession(và khởi động các chương trình X của bạn từ đó) hoặc tìm phương pháp dành riêng cho hệ thống (có thể phụ thuộc vào phân phối, trình quản lý hiển thị nếu có, loại phiên nếu trình quản lý hiển thị và môi trường máy tính để bàn hoặc quản lý phiên).


.xsessionlà tập tin tôi đang tìm kiếm
Maciej Piechotka

1
Tôi đồng ý mạnh mẽ với tất cả mọi thứ trừ tóm tắt của bạn. Tôi không nghĩ bạn đã thiết lập điểm này. Nếu các .profilenguồn của bạn .bashrchoặc tương tự, thì bạn có thể đặt các biến môi trường một cách đáng tin cậy .bashrccho không chỉ các phiên đăng nhập, mà cho các hệ vỏ mới cần các cài đặt khác nhau, ví dụ: nếu bạn bắt đầu xtermtừ gnome-terminalvà muốn khác nhau dircolors.
Mikel

@Mikel Nếu bạn đặt biến môi trường .bashrc, chúng sẽ ghi đè cài đặt trước đó của bạn. Ví dụ: nếu bạn đã bắt đầu một phiên bản Màn hình hoặc Tmux với các biến môi trường cụ thể, mọi thứ bạn đặt .bashrcsẽ ghi đè lên các cài đặt này. LS_COLORSlà một trường hợp đặc biệt bởi vì nó thực sự là một thiết lập trên mỗi thiết bị đầu cuối; lý tưởng là nó phải được thiết lập bởi trình giả lập thiết bị đầu cuối, và đặt nó trong tệp RC shell là một cách giải quyết tốt nhất.
Gilles 'SO- đừng trở nên xấu xa'

1

Trong tài liệu Gentoo có bài viết Hướng dẫn bản địa hóa Gentoo Linux . Chương 3 là về thiết lập miền địa phương.

Thông thường nhất người dùng chỉ đặt biến LANG trên cơ sở toàn cầu. Ví dụ này là cho một miền địa phương Đức unicode:

Mã Liệt kê 3.1: Đặt ngôn ngữ hệ thống mặc định trong /etc/env.d/02locale

LANG="en_GB.UTF-8"

Trong Gentoo của tôi LANGđược đặt trong tệp này và mọi thứ đều hoạt động bình thường ...

pbm@tauri ~ $ cat /etc/env.d/02locale 
LANG="pl_PL.UTF-8"

pbm@tauri ~ $ locale
LANG=pl_PL.UTF-8
LC_CTYPE="pl_PL.UTF-8"
LC_NUMERIC="pl_PL.UTF-8"
LC_TIME="pl_PL.UTF-8"
LC_COLLATE="pl_PL.UTF-8"
LC_MONETARY="pl_PL.UTF-8"
LC_MESSAGES="pl_PL.UTF-8"
LC_PAPER="pl_PL.UTF-8"
LC_NAME="pl_PL.UTF-8"
LC_ADDRESS="pl_PL.UTF-8"
LC_TELEPHONE="pl_PL.UTF-8"
LC_MEASUREMENT="pl_PL.UTF-8"
LC_IDENTIFICATION="pl_PL.UTF-8"
LC_ALL=

Xin lưu ý rằng phần bạn trích dẫn là ok, nhưng hướng dẫn cũng khuyên bạn nên đặt biến môi trường trong .bashrcđó là sai (xem câu trả lời của tôi và đặc biệt là superuser.com/questions/217431 ).
Gilles 'SO- ngừng trở nên xấu xa'

Cảm ơn thông tin chi tiết như vậy ... :) Tôi chưa bao giờ sử dụng phần .bashrc đó - cài đặt trong env.dphổ quát hơn.
pbm

Ngoài ra, nó là trên mỗi hệ thống thay vì mỗi người dùng. Tôi thích giữ các cài đặt hệ thống tách biệt với cài đặt người dùng.
Maciej Piechotka
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.