одна вещь, вы ошибаетесь в том, что /etc/environment
требует перезагрузки для перезагрузки. Это неправильно. Файл читается только на имя, когда стек PAM активирован-в частности pam_env.so
, которая считывает файл.
выход из системы и обратно В бы применить изменения – и на самом деле вы должны сделайте это, если вы хотите, чтобы все ваши процессы получили новую среду. Все остальные "решения"2 только примените среду к процессу одиночной оболочки, но не ко всему, что вы запускаете через GUI, включая новые окна терминала.1
если вас это устраивает, хотя-отсутствие export
команды могут быть компенсированы с помощью set -a
и set +a
. Тем не менее, это все еще остается плохим способом, так как файл также не использует кавычки. Но это должно работать нормально:
while read -r env; do export "$env"; done
1 менеджер GNOME сессии позволяет меняйте свое окружение, но только во время 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
2gdb
не является решением, но иногда может использоваться. Вы должны прикрепить его к запущенным процессам вашего менеджера сессий (например,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")
= 0
(gdb) p putenv("BAZ=qux")
= 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'}"
()