환경 변수의 범위

환경 변수의 범위

이전에는 환경 변수가 프로세스 범위 내에서 정의되고 내보낸 경우 하위 프로세스에도 전파된다고 생각했습니다.

따라서 환경 변수를 정의하고 다음을 통해 액세스할 수 있는 장소를 찾고 싶습니다.

  1. ~/.config/systemd/user/start-up.service에 정의된 사용자 서비스
  2. Hyprland.conf 파일
  3. ZSH 쉘

저는 sddm, hiprland, kitty 터미널 및 zsh 쉘과 함께 아치 리눅스를 사용합니다. 여러 가지 솔루션을 시도했는데 효과가 있었던 유일한 솔루션은 Hyprland.conf 파일(실제로는 Hyprland에서 제공하는 외부 파일)에서 환경 변수를 정의하고 서비스에 필요한 두 환경 변수의 중복 정의를 만드는 것이었습니다. 서비스 환경의. 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

그래서 실제로 두 가지 질문이 있습니다.

  1. 사용자 서비스, 하이프랜드 및 쉘에서 볼 수 있도록 환경 변수(시스템 전체가 아닌 사용자 수준에서 정의해야 함)를 정의할 수 있는 곳이 있습니까?
  2. Hyprland.conf에 정의된 변수가 서브링 프로세스에 표시되는 것이 어떻게 가능합니까?

관련 정보