당신이 잘못 알고있는 것은 /etc/environment
다시로드하기 위해 재부팅해야 한다는 것 입니다. 이것은 올바르지 않습니다. 파일을 읽을 수있는 유일한 시간은 로그인에 특별히 - PAM 스택이 활성화되고, pam_env.so
파일을 읽는.
로그 아웃했다가 다시 로그인하면 변경 사항이 적용됩니다. 실제로 모든 프로세스가 새 환경을 받도록하려면이 작업을 수행 해야 합니다 . 다른 모든 "솔루션" 2 는 단일 쉘 프로세스에만 환경을 적용하지만 새 터미널 창을 포함하여 GUI를 통해 실행하는 항목에는 적용되지 않습니다. 1
당신이 그와 함께 잘 경우, 그러나 -의 부족 export
명령으로 보상 될 수 set -a
및 set +a
. 그러나 파일에서 인용 부호를 사용하지 않기 때문에 여전히 나쁜 방법입니다. 그러나 이것은 잘 작동합니다.
while read -r env; do export "$env"; done
1 그놈 세션 관리자는 자체 환경을 변경할 수있는 방법을 제공합니다 Initialization
.
$ gdbus call -e -d org.gnome.SessionManager \
-o /org/gnome/SessionManager \
-m org.gnome.SessionManager.Setenv \
"FOO" "bar"
Error: GDBus.Error:org.gnome.SessionManager.NotInInitialization: Setenv
interface is only available during the Initialization phase
2 gdb
는 해결책이 아니지만 때때로 사용할 수 있습니다. 세션 관리자 (예 :) gnome-session
, 창 관리자 (예 : gnome-shell
또는 openbox
), 작업 표시 줄 / 패널 (있는 경우 xfce4-panel
) (예 :) 및 일반적으로 실행 가능한 다른 항목 의 실행중인 프로세스에이를 첨부해야합니다 . 이러한 각 프로세스에 대해 gdb
PID 로 첨부 하고을 사용하여 putenv()
함수를 호출 p
한 후 다음을 사용하여 분리해야합니다 q
.
$ sudo gdb -p $(pidof gnome-session)
GNU gdb (GDB) 7.7.1
[...]
Attaching to process 718
[...]
0x00007fc2cefed81d in poll () from /usr/lib/libc.so.6
(gdb) p putenv("FOO=bar")
$1 = 0
(gdb) p putenv("BAZ=qux")
$2 = 0
(gdb) q
A debugging session is active.
Quit anyway? (y or n) y
Detaching from program: /usr/bin/gnome-session, process 718
디버거는 프로세스를 일시 중지하므로 다른 tty (가상 콘솔) 또는 SSH를 통해서만 합성 창 관리자에 연결해야합니다. 그렇지 않으면 화면이 정지됩니다.
또한 dbus-daemon에서 사용하는 환경도 업데이트해야합니다.
$ dbus-update-activation-environment --systemd FOO=bar BAZ=qux
구형 시스템의 경우 :
$ gdbus call -e -d org.freedesktop.DBus \
-o /org/freedesktop/DBus \
-m org.freedesktop.DBus.UpdateActivationEnvironment \
"{'FOO': 'bar', 'BAZ': 'qux'}"
()
for line in $( cat /etc/environment ) ; do export $line ; done
경우 파일 형식이 인 경우을 사용할 수 있습니다key=value
.