XDG_CONFIG_HOME değişkeni nerede tanımlanmalıdır?


40

XDG spesifikasyonu XDG_CONFIG_HOMEdeğişken hakkında konuşur , ancak nerede tanımlanması gerektiğini belirtmez. Bunu tanımlamalı mıyız /etc/X11/Xsession, yoksa bunu tanımlaması gereken pencere yöneticisinin config dosyası mı?

/ Etc / ortam olarak bildirmeyi denedim

XDG_CONFIG_HOME="$HOME/.config"

ancak bu işe yaramadı, anlaşıldığı gibi $ HOME tanımlanmadı /etc/environment.

Çevrimiçi bulabildiğim tek belge, ilan edildiği Gentoo’ya aitti. /etc/env.d/90xsession

Ubuntu kullanıyorum. Debian merkezli dağıtımlar için genel çözüm ne olurdu?

Yanıtlar:


24

Arch Linux'ta bu, /etc/profilebir /etc/profile.dkomut dosyası kullanılarak tanımlanır .

Debian / Ubuntu için eğer varsa /etc/profile.d- içinde benzer bir script oluşturun; Böyle bir dizin yoksa - düzenleyin /etc/profile.

export XDG_CONFIG_HOME="$HOME/.config"

/etc/environmentDosya ile ayrıştırılır pam_env, hangi basit isim = değer atamaları gibi davranır onu. Bununla birlikte, /etc/security/pam_env.confdeğişken genişlemeyi destekleyen ve bu amaç için kullanılabilen de vardır .


Gist kullanılamıyor
şahin

3
Bu burada değil /etc/profileartık Arch ve sadece bir kez bahsedilmesine /etc/profile.d/locale.sh.
phil pirozhkov 21:14

1
Bağlantı öldü ...
ManuelSchneid3r

53

Sen yok gerek varsayılanı değiştirmek istemiyorsanız, her yerde bunu tanımlamak için.

XDG Base Directory Şartnamesi açıkça diyor ki:

Eğer $XDG_CONFIG_HOMEikisinden biri ayarlamak veya boş değil, varsayılan bir e eşit $HOME/.configkullanılmalıdır.

Bu yüzden varsayılan değer olarak tanımlamak gereksizdir. Tüm uyumlu uygulamalar zaten kullanacak$HOME/.config

Eğer Ama eğer yok bir Debian / Ubuntu sisteminde varsayılan değiştirmek istiyorum, en iyi yerdir:

  • Sistem çapında bir değişiklik için tüm kullanıcıları etkileyin: /etc/profile
  • Sadece kullanıcı için: ~/.profile

1
downvoter cevap yanlış ve tercihen yardım onu geliştirmek anlatmaya açığız
MestreLion

1
Bu cevap teorik olarak gayet iyi, ancak XDG Temel Dizin Belirtimi ile uyumlu olmayan ve bu cehaletten kaynaklanan hataların katsayıları gibi pek çok yazılım var.
ManuelSchneid3r

5
@ ManuelSchneid3r Çok doğru, ancak böyle bir yazılım ayarı XDG_CONFIG_HOMEiçin, eğer varsa, zaten çok az fark yaratacaktır.
MestreLion

2
XDG_CONFIG_HOMESpesifikasyona uymadan, üçüncü taraf teknik özelliklerinin bir parçası yerine standart bir Linux veya hatta Unix özelliği bulunduğunu varsayarak , körü körüne kullanan bir yazılım olabilir .
Eagle-Eye

3
@mcnesium Muhtemelen incitemeyeceğini söylüyorum. Mümkünse, uygulamanın kendisini düzeltmek ve düzeltme girişini göndermek daha iyi olur.
Eagle-Eye

5

PAM ile ortam değişkenlerini ayarlamanın en iyi yolu olduğunu gördüm. Modern Linux diskleri için bu, /etc/environmentveya $HOME/.pam_environment(bkz. man pam_env) Anlamına gelir . Ayrıca bunları /etc/security/pam_env.confözel bir sözdizimi kullanarak da ayarlayabilirsiniz . İşte XDG değişkenlerimi nasıl ayarlayacağım /etc/security/pam_env.conf.

XDG_CACHE_HOME  DEFAULT=@{HOME}/.xdg/cache
XDG_CONFIG_HOME DEFAULT=@{HOME}/.xdg/config
XDG_DATA_HOME   DEFAULT=@{HOME}/.xdg/data
XDG_STATE_HOME  DEFAULT=@{HOME}/.xdg/state

Önceden bu değişkenleri içinde ayarlarım /etc/profile.d/custom.sh. Ancak, bazı uygulamalar bu dosya okunmadan önce başlar. PAM yöntemine geçmek, bu şekilde davranılan birden fazla uygulama için sorunu çözdü.



1
@TomHale Elbette değil, değişkenleri ayarlamanın tamamı varsayılanları geçersiz kılmaktır. Varsayılanlardan memnunsanız, bu değişkenleri hiçbir şekilde ayarlamanıza gerek yoktur.
carlwgeorge

1
Ubuntu 14.04, XDG dizini değişkenlerini varsayılan olarak ayarlamaz - sadece bir belirtim olduğundan, birinin dağıtımı takip ettiği anlamına gelmez.
Tom Hale

2
İstersem O fark eder export LESSHISTFILE="$XDG_CACHE_HOME"/less/historynerede lessspec farkında değildir ve varsayılan Henüz dağıtımın kullandığı ayarlanmamış.
Tom Hale,

1
@TomHale, işletim sisteminin değişkenleri neye ayarlaması gerektiğini tanımlamaz ; tanımlanmış ve boş değilse uygulamanın kullanması gereken değişkenleri tanımlar . Değişken tanımlanmamışsa veya boşsa, uygulama teknik özelliklerde referans verilen varsayılan yolu kullanmalıdır. Yani kısa örneğinize uygun değil çünkü ilk önce XDG_CACHE_HOMEtanımlanmış ve boş olmadığını kontrol etmiyor . Bunun yerine olmalıdır:export LESSHISTFILE="${XDG_CACHE_HOME:-$HOME/.cache}"/less/history
villapx

0

Zsh kullanıcıları için, bunu .zshenvdosyanızda tanımlayın

export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"

1
Downvoter, kendinizi açıklamak ister misiniz?
smac89
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.