Gnome 3.22 menggunakan wayland secara default. Gnome di wayland tidak membaca ~/.profile
(atau ~/.bash_profile
atau /etc/profile
). Lihat https://bugzilla.gnome.org/show_bug.cgi?id=736660 .
Saya mengatur file inisialisasi saya sebagai berikut:
.bash_profile
tidak melakukan apa - apa selain sumber.profile
dan.bashrc
.profile
hanya menetapkan variabel lingkungan sepertiPATH
danLC_MESSAGES
.bashrc
set beberapa pengaturan spesifik bash dan alias dan variabel lingkungan untuk aplikasi sepertiless
dangrep
.
Efeknya (sebelum wayland) adalah sebagai berikut:
- ketika saya login secara grafis
.profile
sudah dibaca dan variabel lingkungan sukaPATH
danLC_MESSAGES
ditetapkan. ketika saya membuka bash di dalam terminal emulator kemudian.bashrc
dibaca. - ketika saya login di bawah terminal virtual kemudian
.bash_profile
dibaca yang pada gilirannya membaca.profile
dan.bashrc
. - ketika saya login menggunakan ssh maka perilaku mirip dengan terminal virtual.
Dalam semua kasus .profile
dan .bashrc
dibaca dan lingkungan saya diatur.
Jadi sekarang gnome 3.22 menggunakan wayland dan wayland tidak membaca .profile
. Bagaimana saya bisa mengatur file inisialisasi saya sehingga saya lagi memiliki efek seperti yang dijelaskan di atas?
Perhatikan bahwa saya tidak mendesak agar file tertentu (seperti .profile
) dibaca. Yang saya inginkan adalah mengatur lingkungan saya dengan cara yang masuk akal. Itu berarti saya ingin menyimpan pengaturan spesifik bash ke file inisialisasi bash dan pengaturan lainnya ke file inisialisasi lainnya. Saya juga ingin tidak menyalin pengaturan pada file yang berbeda.
Saya menggunakan linux arch. Jawaban untuk semua distribusi diterima. Ketika menyarankan pemecahan masalah, harap jelaskan juga efek samping dan kelebihan dan kekurangannya.
update november 2017: sejauh yang saya mengerti pengembang gnome telah mengakui bahwa orang mengharapkan file konfigurasi shell login mereka ( .profile
dan .bash_profile
dalam kasus bash) bersumber setelah login. terlepas dari teks atau login grafis. jadi use case saya yang diuraikan di atas berfungsi lagi.
masih pengembang gnome ingin pindah dari memulai shell login. tampaknya arah yang mereka tuju adalah menggunakan environmentd dari systemd:
https://in.waw.pl/~zbyszek/blog/environmentd.html
tampaknya perlu beberapa saat hingga semua metode login disesuaikan dengan lingkungan d.
sumber
Ini adalah solusi yang saya gunakan untuk masalah yang sama persis:
Langkah 1
Buat skrip yang sumbernya
~/.profile
dan buat skrip itu bisa dieksekusi. Sebut saja/path/to/startup.sh
. Itu bisa terlihat seperti ini:Langkah 2
Buat aplikasi desktop untuk menjalankan skrip. Untuk melakukan ini, Anda perlu membuat
.desktop
file dan menempatkannya di~/.local/share/applications
(atau/usr/share/applications
jika Anda ingin itu berfungsi untuk semua pengguna). Sebut saja~/.local/share/applications/startup.desktop
. Itu bisa terlihat seperti ini:Untuk informasi lebih lanjut tentang
.desktop
file lihat di sini .Langkah 3
Keluar. Masuk kembali. Sekarang Anda dapat mencari aplikasi Anda di menu aplikasi.
Langkah 4
Tetapkan aplikasi ini sebagai aplikasi startup. Untuk melakukan ini, saya menggunakan Alat Gnome Tweak dan menambahkan aplikasi saya ke daftar di tab Aplikasi Startup.
Dan itu dia! Anda sekarang harus memiliki fungsionalitas lama Anda kembali setiap kali Anda login. Ini juga menjaga struktur file tetap utuh, jadi, ketika bug di Wayland diperbaiki, semua yang perlu Anda lakukan menghapus aplikasi dari daftar aplikasi startup, hapus dua file dan semuanya kembali normal.
Kemudian edit
Sebagaimana @Guss tunjukkan dalam komentar, solusi ini tidak akan mengekspor variabel lingkungan karena
startup.sh
dijalankan di shellnya sendiri. Jadi kita perlu solusi lain untuk itu.Membaca dari dokumentasi GNOME Anda dapat melihat bahwa ada beberapa alternatif. Satu-satunya yang saya bisa mulai bekerja adalah membuat file
/usr/share/gdm/env.d/
dan, dalam file itu, tempat variabel yang akan diekspor. Namun, ini berarti bahwa variabel akan diekspor untuk semua pengguna sehingga yang akhirnya saya lakukan adalah ini:Katakanlah kita memiliki dua pengguna, john dan sally . Untuk masing-masing membuat file
/usr/share/gdm/env.d/
, mari kita panggil merekastartup_john.env
danstartup_sally.env
. Dalam file-file itu, tempatkan variabel lingkungan yang akan diekspor ketika mereka memulai sesi GNOME baru.Pada titik ini masalahnya adalah bahwa kedua file akan dimuat untuk kedua pengguna. Untuk mengatasi ini, kami menetapkan izin pada setiap file sehingga hanya pemiliknya yang dapat membaca kontennya.
Saya setuju, bukan solusi yang paling elegan, tetapi sejauh yang saya uji, tampaknya menyelesaikan pekerjaan.
sumber
startup.sh
sedang berjalan di shell sendiri dan tidak akan mengekspor variabel lingkungan ke konteks eksekusi induk. Sebagai contoh, coba jalankan kode ini di shell Anda:echo "a is $a"; (export a="B"); echo "a is $a"
. Menurut @Tudor, output dari gema kedua adalaha is B
, yang - Anda akan lihat ketika Anda menjalankan kode - bukan itu yang terjadi.