올바르게 환경 설정


15

gnome을 실행하기 위해 zsh와 gdm을 사용하고 있습니다. 얼마 전에 변수가 올바르게 설정되지 않은 것을 발견했습니다. 예를 들어 LANG / LC_ALL이 잘못되었습니다 ( ""대신 en_GB.UTF-8).

나는 분할 .zshrc.zshrc하고 .profile. 후자에서 환경 변수를 설정했지만 세션이 시작되기 전에 변수를 어떻게 설정할 수 있습니까? 몇 가지 선택 ( .xinitrc, .xsessionrc)을 시도 했지만 아무것도 작동하지 않는 것 같습니다.

명확히하기 위해 편집 -나는 그것을 사용 .profile하고 수동으로 공급했다 .zshrc. 어쨌든 질문은 바뀌지 않습니다.


당신은 .profile전혀로드되지, 또는 뭔가 다른 로케일 변수를 덮어 쓰기한다? (같은 다른 변수를 설정하십시오 export MACIEJ_PROFILE=yes확인. set -x에서 .profile실행되고 있으며, 후 내용을 확인할 수있는 좋은 방법이 될 수 있습니다 .profile, 그것은 전혀 읽은 경우입니다.) 소싱 아무 소용이 없습니다 .profile에서가 .zshrc.
Gilles 'SO- 악의를 멈춰라'

이것은 터미널 창이나 다른 곳에서 문제입니까? 실행할 때 원하는 로케일 설정이 ssh localhost zsh있습니까? 무엇에 대해 ssh localhost bash? bash가 괜찮지 만 zsh가 아닌 경우 /etc/zshenv또는 무언가를 넣을 수도 있습니다 ~/.zshenv(거의 항상 나쁜 생각입니다).
Gilles 'SO- 악마 그만

쉘이 제대로 작동하지 않습니다 (분할 전후). 문제는 gnome-session이 품종이 설정되어 있지 않다는 것입니다.
Maciej Piechotka

답변:


21

간단한 방법은 타임 머신을 발명하고 셸 시작 파일을 고안 한 다양한 사람들을 방문하여 세 가지를 명확하게 구분하도록 지시하는 것입니다.

  • 세션 설정, 예를 들어 환경 변수;
  • 세션 시작, 즉 명령 줄 쉘 또는 창 관리자 시작 또는 실행 startx;
  • 쉘 초기화 (예 : 별명, 프롬프트, 키 바인딩)

이식 가능한 방식으로 세션 대 셸을 올바르게 얻는 것은 그리 어렵지 않습니다. 로그인 시간 초기화가 .profile(또는 .zprofile, 또는 .login), 셸 초기화가 .bashrc또는으로 이동 .zshrc합니다. 내가 이전에 대해 서면으로 작성했습니다 .bash_profile, zsh을 대 다른 조개 , (대부분의 bash에 대한) 이동성에 대한 더 , 더 읽는 사람에 대해.profile .

나머지 문제는 세션 설정과 세션 시작을 구별하는 것입니다. 대부분의 경우 ~/.profile로그인시 실행되며 두 가지로 두 배로 증가 할 수 있지만 예외는 있습니다.

  • 로그인 쉘 (t) CSH 또는 zsh을하고, 경우 ~/.login~/.zprofile대신에 공급된다 ~/.profile. bash와 Ditto는 ~/.bash_profile소싱 ~/.profile을 통해 쉽게 해결할 수 있습니다 ~/.bash_profile.
  • 당신이 아래에 로그인하는 경우 디스플레이 관리자 (XDM, GDM, KDM, ...), 당신의 여부 ~/.profileIS 읽고 배포판 (리눅스 또는 기타)에, 프로그램의 버전에 따라 다릅니다 및 세션 유형 당신은 무엇을 선택합니다.
    • 디스플레이 관리자를 통해 세션을 시작하는 경우 .profile환경 변수를 설정해야하지만 세션을 시작하지 않아야합니다 (예 : 창 관리자).
    • X 세션의 기존 구성 파일은 ~/.xsession세션 설정과 세션 시작을 모두 수행하는 것입니다. 따라서 파일은 본질적으로있을 수 있습니다 . ~/.xsession; . ~/.xinitrc. 일부 배포판은 ~/.profile이전 소스 ~/.xsession입니다. 최신 배포 ~/.xsession는 디스플레이 관리자에서 "사용자 정의"세션을 선택할 때만 발생하며 이러한 세션을 항상 사용할 수있는 것은 아닙니다.
    • 세션 관리자에는 자체 환경 변수 설정 방법이있을 수 있습니다. (이것은 구성 파일을 통해 또는 로그인 할 때 세션 유형을 선택하여 데스크탑 환경의 선택적 부분입니다. 사용자가 실행하지만 디스플레이 관리자가 제공하는 세션 시작 스크립트와 혼동하지 마십시오. 시스템 전체에 따라 선택됩니다 (예, 엉망입니다).

요약하면 ~/.profile환경 변수에 적합한 곳입니다. 읽지 않은 경우 소스를 소싱 ~/.xsession하거나 X 프로그램을 시작하거나 배포판, 디스플레이 관리자 (있는 경우), 디스플레이 관리자 인 경우 세션 유형 및 데스크톱 환경 또는 세션 관리자).


.xsession내가 찾던 파일이었습니다.
Maciej Piechotka

1
나는 당신의 요약을 제외한 모든 것에 강력히 동의합니다. 나는 당신이이 지점을 설정했다고 생각하지 않습니다. 귀하의 경우, .profile소스 .bashrc또는 이와 유사한, 다음 수에서 안정적으로 설정된 환경 변수 .bashrc뿐만 아니라 로그인 세션,하지만 당신이 시작하는 경우 예를 들어, 다른 설정을 필요로 새로운 포탄을위한 xterm에서 gnome-terminal다른합니다 dircolors.
Mikel

@Mikel에서 환경 변수를 설정하면 .bashrc이전 설정보다 우선합니다. 예를 들어 특정 환경 변수를 사용하여 Screen 또는 Tmux 인스턴스를 시작한 경우 설정 한 .bashrc내용이이 설정보다 우선합니다. LS_COLORS실제로는 터미널 단위 설정이기 때문에 특별한 경우입니다. 이상적으로는 터미널 에뮬레이터에서 설정해야하며 쉘 rc 파일로 설정하는 것이 최선의 해결 방법입니다.
질 'SO-정지 존재 악마'

1

젠투 문서에는 젠투 리눅스 현지화 가이드 기사가 있습니다. 3 장은 로케일 설정에 관한 것입니다.

가장 일반적으로 사용자는 전 세계적으로 LANG 변수 만 설정합니다. 이 예제는 유니 코드 독일어 로캘에 대한 것입니다.

코드 내용 3.1 : 기본 시스템 로케일 설정 /etc/env.d/02locale

LANG="en_GB.UTF-8"

내 Gentoo LANG에서이 파일에 설정되고 모든 것이 제대로 작동합니다 ...

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=

인용 한 부분은 괜찮지 만 안내서는에서 환경 변수를 설정하는 것이 좋습니다 .bashrc(나의 대답 및 특히 superuser.com/questions/217431 참조 ).
Gilles 'SO- 악마 중지'12

자세한 정보 주셔서 감사합니다 ... :) 나는 .bashrc part-설정 env.d이 더 보편적 이라는 것을 사용한 적이 없습니다 .
pbm

또한 사용자 단위가 아닌 시스템 단위입니다. 시스템 설정을 사용자 설정과 별도로 유지하는 것을 선호합니다.
Maciej Piechotka
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.