環境を正しく設定する


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
ジル「SO-悪であるのをやめる」

これは端末ウィンドウまたは他の場所で問題ですか?実行時に希望のロケール設定を取得しますssh localhost zshか?どうssh localhost bash?bashで問題ないがzshではない場合は、何かを入れる/etc/zshenv~/.zshenv(ほとんど常に悪い考えです)。
ジル「SO-悪であるのをやめる」

いいえ、シェルは正常に動作しています(分割の前後)。問題は、gnome-sessionこの品種が設定されていないことです。
マチェイピエチョトカ

回答:


21

簡単な方法は、タイムマシンを発明し、シェルスタートアップファイルを考案したさまざまな人々を訪問して、3つのことを明確に区別するように指示することです。

  • セッションのセットアップ。環境変数など。
  • セッションの起動。つまり、コマンドラインシェルやウィンドウマネージャーの起動startx、実行中など。
  • シェルの初期化(エイリアス、プロンプト、キーバインディングなど)。

セッション対シェルを移植可能な方法で正しく取得するのはそれほど難しくありません。ログイン時の初期化は.profile(または.zprofile、または.login)、シェルの初期化は.bashrcまたはになり.zshrcます。私は以前について書いた.bash_profilezshの対他のシェル(主にbashの程度)の移植についての詳細より読み込むかについて.profile

残りの問題は、セッションのセットアップとセッションの起動を区別することです。ほとんどの場合、~/.profileログイン時に実行され、両方を兼ねることができますが、例外があります。

  • ログインシェルが(t)cshまたはzshで~/.loginあり、の~/.zprofile代わりにソースされている場合~/.profile。bashと~/.bash_profile同様ですが、これは~/.profileからのソースによって簡単に解決でき~/.bash_profileます。
  • ディスプレイマネージャー(xdm、gdm、kdmなど)でログインする場合、~/.profile読み取られるかどうかは、プログラムのバージョン、ディストリビューション(Linuxまたはそれ以外)、および選択したセッションタイプによって異なります。
    • ディスプレイマネージャーに頼ってセッションを開始する場合は、.profile環境変数を設定する必要がありますが、セッション(ウィンドウマネージャーなど)は開始しないでください。
    • Xセッションの従来の構成ファイルは~/.xsession、セッションのセットアップとセッションの起動の両方を行います。したがって、ファイルは基本的に. ~/.xsession; . ~/.xinitrc~/.profile以前のいくつかのディストリビューションのソース~/.xsession。最新のディストリビューション~/.xsessionは、ディスプレイマネージャから「カスタム」セッションを選択した場合にのみソースとなり、そのようなセッションは常に利用できるとは限りません。
    • セッションマネージャには、環境変数を設定する独自の方法がある場合があります。(これは、デスクトップ環境のオプションの部分であり、構成ファイルを介して、またはログイン時にセッションの種類を選択することによって選択します。ユーザーの下で実行されるディスプレイマネージャによって提供されるセッションスタートアップスクリプトと混同しないでください。システム全体で選択されます。はい、それは混乱です。)

要約すると、~/.profile環境変数の適切な場所です。読まれていない場合は、ソースからソースを試して~/.xsession(そしてそこからXプログラムを起動します)、システム固有の方法を探します(ディストリビューション、ディスプレイマネージャーがある場合はディスプレイマネージャー、ディスプレイマネージャーの場合はセッションタイプ、デスクトップ環境またはセッションマネージャー)。


.xsession探していたファイルでした。
マチェイピエチョトカ

1
あなたの概要以外のすべてに強く同意します。あなたはこの点を確立したとは思わない。あなたの場合は.profileソース.bashrcまたは類似の、そしてあなた缶に確実にセットする環境変数.bashrcだけではなく、ログインセッションのための、しかし、あなたが開始した場合など、異なる設定を必要とする新しいシェルのxtermからgnome-terminalして違うしたいですdircolors
ミケル

@Mikelで環境変数を設定.bashrcすると、以前の設定が上書きされます。たとえば、特定の環境変数を使用してScreenまたはTmuxインスタンスを起動した場合、設定したもの.bashrcはこれらの設定を上書きします。LS_COLORSこれは実際には端末ごとの設定であるため、特別なケースです。ターミナルエミュレータで設定するのが理想的です。シェルrcファイルで設定するのがベストエフォートの回避策です。
ジル 'SO-悪であるのをやめる

1

Gentooのドキュメントには、Gentoo Linux Localization Guideという記事があります。第3章では、ロケールの設定について説明します。

ほとんどの場合、ユーザーはLANG変数をグローバルベースでのみ設定します。この例は、Unicodeドイツ語ロケール用です。

コード表示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を参照)。
ジル「SO-悪であるのをやめる」

非常に詳細な情報をありがとう... :) .bashrcパーツの設定env.dはもっと普遍的ではありません。
pbm

また、ユーザーごとではなくシステムごとです。システム設定をユーザー設定とは別にすることを好みます。
マチェイピエチョトカ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.