Yanıldığın bir şey, /etc/environment
yeniden yüklenmek için yeniden başlatma gerektirmesi. Bu yanlış. Dosyayı okuyan tek zaman oturum açma , PAM yığını etkinleştirildiğinde - özellikle pam_env.so
dosyayı okur.
Oturumu kapatıp tekrar açmak değişiklikleri uygular; tüm işlemlerin yeni ortamı almasını istiyorsanız , bunu yapmanız gerekir . Diğer tüm "çözümler" 2 ortamı sadece tek bir kabuk işlemine uygulayacaktır, ancak yeni terminal pencereleri dahil olmak üzere GUI üzerinden başlattığınız hiçbir şeye uygulayamayacaktır. 1
Yanında sorun yoktur, olsa da - eksikliği export
komutlarla telafi edilebilir set -a
ve set +a
. Ancak, dosya da tırnak işareti kullanmadığından, hala kötü bir yöntem olarak kalır. Ancak bu iyi çalışması gerekir:
while read -r env; do export "$env"; done
1 GNOME Oturum Yöneticisi, kendi ortamını değiştirmenin bir yolunu sunar, ancak yalnızca Initialization
aşamada:
$ 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
bir çözüm değildir, bazen de kullanılabilir. Bunu, oturum yöneticinizin (örn. gnome-session
), Pencere yöneticinizin (örneğin gnome-shell
veya openbox
), varsa görev çubuğunuzun / panelinizin (örneğin xfce4-panel
) ve genellikle işleri yürütebilecek başka herhangi bir şeyin (örneğin ) çalışan işlemlerine eklemeniz gerekir . Bu işlemlerin her biri gdb
için, ona PID ile eklemeniz , putenv()
işlevini çağırmanız p
, sonra işlevini kullanmanız gerekir 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
Hata ayıklayıcının işlemi duraklattığını unutmayın; bu nedenle, bileşik pencere yöneticilerine yalnızca başka bir tty'den (sanal konsol) veya SSH üzerinden eklemelisiniz, aksi takdirde ekran donar.
Buna ek olarak, dbus-daemon tarafından kullanılan ortamı da güncellemelisiniz:
$ dbus-update-activation-environment --systemd FOO=bar BAZ=qux
Daha eski sistemler için:
$ 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
, eğer dosya formatı ise kullanabilirsinizkey=value
.