이전에는 환경 변수가 프로세스 범위 내에서 정의되고 내보낸 경우 하위 프로세스에도 전파된다고 생각했습니다.
따라서 환경 변수를 정의하고 다음을 통해 액세스할 수 있는 장소를 찾고 싶습니다.
- ~/.config/systemd/user/start-up.service에 정의된 사용자 서비스
- Hyprland.conf 파일
- 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
그래서 실제로 두 가지 질문이 있습니다.
- 사용자 서비스, 하이프랜드 및 쉘에서 볼 수 있도록 환경 변수(시스템 전체가 아닌 사용자 수준에서 정의해야 함)를 정의할 수 있는 곳이 있습니까?
- Hyprland.conf에 정의된 변수가 서브링 프로세스에 표시되는 것이 어떻게 가능합니까?