環境変数の範囲

環境変数の範囲

以前は、環境変数がプロセスの範囲内で定義され、エクスポートされた場合、子プロセスにも伝播されると考えていました。

したがって、環境変数を定義し、次からアクセスできる場所を見つけたいと思います。

  1. ~/.config/systemd/user/start-up.service で定義されたユーザーサービス
  2. Hyprland.confファイル
  3. ZSHシェル

私はsddm、hiprland、kitty端末、zshシェルと一緒にArch Linuxを使用しています。いくつかの解決策を試しましたが、効果があった唯一の解決策は、Hyprland.confファイル(実際にはHyprlandが提供する外部ファイル)で環境変数を定義し、サービスに必要な2つの環境変数の重複定義を作成することでした。サービス環境の。 Hyprlandとサービスファイルの間の予想される形式が一致しないため、EnvironmentFileを使用できません。重複のため、このソリューションは気に入らない。

しかし、調査中に非常に驚くべき事実を発見しました。 Hyprland.confで定義されているすべての環境変数は、Hyprlandプロセスの子プロセスではなくzshシェルで見ることができるということです。

pstree
systemd─┬─NetworkManager───4*[{NetworkManager}]
        ├─dbus-daemon
   ==>  ├─kitty─┬─zsh───pstree
        │       └─2*[{kitty}]
        ├─polkitd───3*[{polkitd}]
        ├─rtkit-daemon───2*[{rtkit-daemon}]
        ├─sddm─┬─Xorg───2*[{Xorg}]
   ==>  │      ├─sddm-helper───Hyprland───4*[{Hyprland}]
        │      └─{sddm}
        ├─sh───sleep
        ├─ssh-agent
        ├─systemd─┬─(sd-pam)
        │         ├─dbus-daemon
        │         ├─gnome-keyring-d───4*[{gnome-keyring-d}]
        │         ├─pipewire───2*[{pipewire}]
        │         ├─pipewire-pulse───2*[{pipewire-pulse}]
        │         ├─wireplumber───6*[{wireplumber}]
        │         ├─2*[xdg-desktop-por───4*[{xdg-desktop-por}]]
        │         ├─xdg-document-po─┬─fusermount3
        │         │                 └─6*[{xdg-document-po}]
        │         └─xdg-permission-───3*[{xdg-permission-}]
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-timesyn───{systemd-timesyn}
        ├─systemd-udevd
        ├─upowerd───3*[{upowerd}]
        └─wpa_supplicant

だから実際には2つの質問があります。

  1. ユーザーサービス、ハイフランド、およびシェルに表示されるように環境変数(システム全体ではなくユーザーレベルで定義する必要があります)を定義できる場所はありますか?
  2. Hyprland.confで定義された変数がサブリングプロセスに表示されるのはどのように可能ですか?

関連情報