Satu hal yang salah tentang Anda adalah /etc/environment
perlu me-reboot untuk memuat ulang. Ini salah. Satu-satunya waktu file dibaca adalah saat login , ketika tumpukan PAM diaktifkan - khususnya pam_env.so
, yang membaca file.
Keluar dan kembali akan menerapkan perubahan - dan pada kenyataannya Anda harus melakukan ini jika Anda ingin semua proses Anda menerima lingkungan baru . Semua "solusi" 2 lainnya hanya akan menerapkan lingkungan ke proses shell tunggal, tetapi tidak untuk apa pun yang Anda luncurkan melalui GUI termasuk jendela terminal baru. 1
Namun, jika Anda setuju dengan itu - kurangnya export
perintah dapat dikompensasi dengan set -a
dan set +a
. Namun, ini tetap merupakan cara yang buruk, karena file tersebut tidak menggunakan penawaran. Tetapi ini seharusnya bekerja dengan baik:
while read -r env; do export "$env"; done
1 Manajer Sesi GNOME menyediakan cara untuk mengubah lingkungannya sendiri, tetapi hanya selama Initialization
fase:
$ 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
bukanlah solusi, tetapi terkadang dapat digunakan. Anda harus melampirkannya pada proses yang berjalan dari manajer sesi Anda (misalnya gnome-session
), manajer jendela Anda (misalnya gnome-shell
atau openbox
), taskbar / panel Anda jika ada (misalnya xfce4-panel
), dan umumnya hal lain yang mungkin menjalankan barang. Untuk setiap proses tersebut, Anda harus melampirkannya gdb
dengan PID, menjalankan putenv()
fungsi menggunakan p
, lalu melepaskan menggunakan 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
Perhatikan bahwa debugger menghentikan proses, oleh karena itu Anda harus melampirkan ke compositing window manager hanya dari tty lain (konsol virtual) atau lebih dari SSH, jika tidak layar akan membeku.
Selain itu, Anda juga harus memperbarui lingkungan yang digunakan oleh dbus-daemon:
$ dbus-update-activation-environment --systemd FOO=bar BAZ=qux
Untuk sistem yang lebih lama:
$ 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
, jika format file adalahkey=value
.