Arazide gnome ve sanal terminallerde bash (veya ssh) için ortam değişkenlerini ayarlama


13

Gnome 3.22 varsayılan olarak wayland kullanır. Yoldaki cüceler okumuyor ~/.profile(veya ~/.bash_profileveya /etc/profile). Bkz. Https://bugzilla.gnome.org/show_bug.cgi?id=736660 .

Başlangıç ​​dosyalarımı aşağıdaki gibi ayarladım:

  • .bash_profilekaynaktan başka bir şey yapmaz .profileve.bashrc
  • .profileyalnızca PATHve gibi ortam değişkenlerini ayarlarLC_MESSAGES
  • .bashrcgibi uygulamalar için bazı kabuk özgü ayarları ve diğer adlar ve çevre değişkenlerini ayarlar lessve grep.

Etki (wayland'dan önce) şunlardı:

  • grafiksel .profileolarak giriş yaptığımda okundu ve ortam değişkenleri gibi PATHve LC_MESSAGESayarlandı. Bir terminal emülatörünün içindeki bash'ı açtığımda .bashrcokundu.
  • sanal bir terminal altında giriş yaptığımda daha sonra .bash_profilehangi okur .profileve okundu .bashrc.
  • ssh kullanarak giriş yaptığımda davranış sanal terminale benzer.

Her durumda .profileve .bashrcokundu ve benim çevre kuruldu.

Yani şimdi gnome 3.22 wayland kullanır ve wayland okumaz .profile. Başlatma dosyalarımı yukarıda açıklanan etkilere tekrar sahip olacak şekilde nasıl ayarlayabilirim?

Bazı dosyaların (gibi .profile) okunması konusunda ısrar etmediğimi unutmayın . İstediğim ortamımın mantıklı bir şekilde kurulmasını sağlamak. Bu, bash'a özgü ayarları bash başlatma dosyalarına ve diğer ayarları diğer başlatma dosyalarına tutmak istediğim anlamına gelir. Ayrıca ayarları farklı dosyalar üzerine kopyalamak istemiyorum.

Ben kemer linux kullanıyorum. Tüm dağıtımların cevapları açıktır. Bir geçici çözüm önerirken lütfen yan etkileri, avantaj ve dezavantajları da açıklayın.


güncelleme Kasım 2017: anladığım kadarıyla gnome geliştiricileri insanların giriş kabuğu yapılandırma dosyalarının ( .profileve .bash_profilebash durumunda) giriş yaptıktan sonra kaynaklandığını beklediklerini kabul ettiler . metin veya grafik girişine bakılmaksızın. bu yüzden yukarıda özetlenen kullanım durumum tekrar çalışıyor.

hala gnome geliştiricileri bir giriş kabuğu başlatmaktan uzaklaşmak istiyorlar. gittikleri yönün systemd'den çevreyi kullanmak olduğu anlaşılıyor:

https://in.waw.pl/~zbyszek/blog/environmentd.html

tüm giriş yöntemlerinin çevreye adapte edilmesi biraz zaman alacak gibi görünüyor.

Yanıtlar:


7

Systemd sürüm 233 (Mart 2017), içinde ortam değişkenlerini ayarlamak için destek ekledi ~/.config/environment.d/*.conf. Bkz adam sayfasını ve ilgili özellik için yol açtığını tartışmayı bu ön PR ve bu nihai biri .environment.d


bu çok iyi bir çözüm gibi görünüyor. Hızlı bir test yaptım. Gnome Wayland'da çalışıyor ancak sanal terminalde çalışmıyor. Ben de ssh için işe yaramaz varsayalım. Ben adam sayfasını okudum ama sadece tartışmalar yağsız. bunun sanal terminallerde ve ssh'da da çalışıp çalışmayacağına dair bir fikrin var mı?
lesmana

1
durumun güzel bir özeti: in.waw.pl/~zbyszek/blog/environmentd.html . son paragraf sanal terminal (ve ssh?) için destek gelebileceğini söylüyor. en azından bunu doğru anladıysam.
lesmana

Çok ilginç, GDM'nin bunun işe yaraması için özel destek eklemesi gerektiğini fark etmedim. Tüm oturum türlerinin, bu env değişkenlerini zaten çözümlemiş olan tek kullanıcılı bir hizmet sürecinin çocukları olduğu bir tür düzenleme olabilir mi ve hepsi sadece GDM / sshd hakkında bir şey bilmeye gerek kalmadan çalışır mı?
Jack O'Connor

1
Bu benim için GDM / Wayland ile Fedora 30'da işe yaramıyor.
jonleighton

'Çözüm' makul bir kullanım durumunu kaçırır: A ise B'yi ayarlayın. Bir örnek olarak, XDG_SESSION_TYPE = wayland ise QT_QPA_PLATFORM = wayland'ı ayarlayın.
vk5tu

5

Bu aynı sorun için kullandığım geçici çözümdür:

Aşama 1

Kaynak oluşturan bir komut dosyası oluşturun ~/.profileve bu komut dosyasını yürütülebilir yapın. Haydi diyelim /path/to/startup.sh. Şuna benzeyebilir:

#!/bin/bash
. ~/.profile

Adım 2

Komut dosyasını çalıştırmak için bir masaüstü uygulaması oluşturun. Bunu yapmak için bir .desktopdosya oluşturmanız ve yerleştirmeniz gerekir ~/.local/share/applications(veya /usr/share/applicationstüm kullanıcılar için çalışmasını istiyorsanız). Haydi diyelim ~/.local/share/applications/startup.desktop. Şuna benzeyebilir:

[Desktop Entry]
Name=Startup
Keywords=startup
Exec=/path/to/startup.sh
Type=Application

.desktopDosyalar hakkında daha fazla bilgi için buraya bakın .

Aşama 3

Çıkış Yap. Tekrar giriş yapın. Artık uygulama menüsünden uygulamanızı arayabilmelisiniz.

4. Adım

Bu uygulamayı bir başlangıç ​​uygulaması olarak ayarlayın. Bunu yapmak için Gnome Tweak Tool'u kullandım ve uygulamamı Başlangıç ​​Uygulamaları sekmesindeki listeye ekledim.

Ve bu kadar! Artık her oturum açışınızda eski işlevlerinize sahip olmalısınız. Ayrıca dosya yapısını sağlam bir şekilde korur, bu nedenle Wayland'daki hata düzeltildiğinde, tek yapmanız gereken uygulamayı başlangıç ​​uygulama listesinden kaldırmak, iki dosyayı silmek ve her şey normale döndü.

Daha sonra düzenleme

@Guss'un yorumlarda belirttiği gibi, bu geçici çözüm startup.sh, kendi kabuğunda çalıştırıldığı için ortam değişkenlerini dışa aktarmaz . Bu nedenle, bunlar için başka bir geçici çözüme ihtiyacımız var.

GNOME belgelerinden okurken birkaç alternatif olduğunu görebilirsiniz. Çalışabileceğim tek şey bir dosya oluşturmak /usr/share/gdm/env.d/ve bu dosyaya dışa aktarılacak değişkenleri yerleştirmekti. Ancak, bu, yaptığım şey şu şekilde değişkenlerin tüm kullanıcılar için dışa aktarılacağı anlamına gelir:

Diyelim ki iki kullanıcı var, john ve sally . Her biri için bir dosya oluşturun /usr/share/gdm/env.d/, diyelim startup_john.envve startup_sally.env. Bu dosyalara, yeni bir GNOME oturumu başlattıklarında dışa aktarılacak ortam değişkenlerini yerleştirin.

$ cat startup_john.env
VAR=1
$ cat startup_sally.env
VAR=2

Bu noktada sorun, her iki dosyanın da her iki kullanıcı için yüklenmesidir. Bunu çözmek için her dosyadaki izni yalnızca sahibinin içeriğini okuyabileceği şekilde ayarladık.

$ ls -l startup_john.env
-rw-r-----. 1 john john 4 Dec 27 15:17 startup_john.env
$ ls -l startup_sally.env
-rw-r-----. 1 sally sally 4 Dec 27 15:16 startup_sally.env

En zarif çözüm değil, katılıyorum, ancak test ettiğim kadarıyla işi hallediyor gibi görünüyor.


Bunu test etmedim, ancak startup.shkendi kabuğunda çalıştığı ve ortam değişkenlerini bir üst yürütme bağlamına dışa aktarmayacağı için çalışmamalı. Bir örnek olarak, kabuğunda bu kodu çalıştırmayı deneyin: echo "a is $a"; (export a="B"); echo "a is $a" . @Tudor'a göre, ikinci yankı çıktısı olacak a is B- ki bu kodu çalıştırdığınızda göreceksiniz - olan şey bu değil.
Guss

Merhaba @Guss, haklısın. Bunu fark etmedim, ancak şimdi belirttiğinize göre, ortam değişkenleri için de bir çözüm buldum. Cevabımı buna göre güncelleyeceğim.
Tudor Vișan

1
Lütfen yap, ne bulduğunu görmek isterim. Ayrıca, "Wayland'daki hata düzeltildiğinde" dediğinde çok iyimser olduğunu düşünüyorum - bu Wayland'da bir hata değil, GNOME'da ve GNOME insanlar bunu bir hata olarak görmüyor - bu belgelenmiş bir davranış: wiki .gnome.org / Girişimler / Wayland / SessionStart
Guss

Bunun hala bir şekilde halledilmemesi kesinlikle şok edici. Bütün bunlar sadece .profile'ımı kaynaklamak için?
RichieHH
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.