Skip to content

環境変数をどこで設定するか

環境変数を設定する場所としては複数存在する。

  • .bash_profile または .bashrc などのプロファイル
  • systemdのユーザー情報
  • systemdのドロップイン(systemdユニットの場合)

前提としては、重複設定を防ぎつつ可能な限り影響範囲を小さくしたい。systemd のユニットは各種プロファイルを読まないので、systemdのユーザーユニットに環境変数を設定したい場合はEnvironパラメータまたはhomectlで設定する必要がある。また、複数のユニットから参照される環境変数は、全部のユニットにドロップインを仕込むのも面倒なのでユーザー情報に置くほうが良い。従って以下のように使い分ける。

TZ 環境変数や homectl —timezone オプションなどもあるが、ローカルPCの場合はどのユーザーでログインしてもタイムゾーンはほとんどの場合で同じだろうからシステム全体で設定する。これは /etc/localtime で行う。

ロケールは homectl —language で設定する。他の手段としては LANG 環境変数や /etc/locale.conf などもあるが、システム全体で設定すると root でコンソールにログインしたときコマンドの出力が文字化けして困る。また、同一ユーザーであれば同じロケールを使うことが多いので、一時的に言語設定を切り替えたい時だけ LANG を明示的に設定する。

実は ~/.config/locale.conf も使えるらしいが、専用のオプションがあるのだから homectl でいいだろう。

GPGのホームディレクトリを変更するのように GNUPGHOME を設定すると鍵の管理ディレクトリを変更できる。gpg コマンド自体は一般的にターミナルで実行することになるのでプロファイルに設定されていればいいように思われるが、gpg-agentsystemd で起動するため「秘密鍵だけ ~/.gnupg に保存される」といったことが起きる。なのでこれは homectl —setenv で行うほうがいい。

これも GNUPGHOME と同様に、自分自身の利用形態では複数のユニットから参照しているので homectl —setenv で設定する。

手元では各種IMモジュールのうち QT_IM_MODULE しか設定していないけど、Swayで使っている限りは困ってない。これも homectl —setenv で設定する。

プロファイルで設定する。