Biến XDG_CONFIG_HOME nên được xác định ở đâu?


41

Đặc tả XDG nói về XDG_CONFIG_HOMEbiến, nhưng không xác định nơi cần xác định. Chúng ta nên định nghĩa nó trong /etc/X11/Xsession, hay nó là tệp cấu hình của trình quản lý cửa sổ cần xác định điều này?

Tôi đã thử khai báo nó trong / etc / môi trường như

XDG_CONFIG_HOME="$HOME/.config"

nhưng điều đó không hiệu quả, vì dường như $ HOME không được xác định khi /etc/environmentđược phân tích cú pháp.

Tài liệu duy nhất tôi có thể tìm thấy trực tuyến là cho Gentoo, nơi nó được khai báo /etc/env.d/90xsession

Tôi đang sử dụng Ubuntu. Điều gì sẽ là giải pháp chung cho các bản phát hành dựa trên Debian?

Câu trả lời:


24

Trong Arch Linux, điều này được xác định bởi /etc/profile, sử dụng /etc/profile.dtập lệnh.

Đối với Debian / Ubuntu, nếu có /etc/profile.d- tạo một tập lệnh tương tự bên trong; nếu một thư mục như vậy không tồn tại - chỉnh sửa /etc/profileitsef.

export XDG_CONFIG_HOME="$HOME/.config"

Các /etc/environmenttập tin được phân tích cú pháp bởi pam_env, nó coi nó là tên đơn giản = gán giá trị. Tuy nhiên, nó cũng có /etc/security/pam_env.conf, hỗ trợ mở rộng biến và có thể được sử dụng cho mục đích này.


Gist không có sẵn
diều hâu

3
Nó không còn ở /etc/profileArch nữa và chỉ được nhắc đến một lần /etc/profile.d/locale.sh.
phil pirozhkov

1
Liên kết đã chết ...
ManuelSchneid3r

54

Bạn không cần xác định nó ở bất cứ đâu, trừ khi bạn muốn thay đổi mặc định.

Thông số kỹ thuật thư mục cơ sở XDG nói rõ:

Nếu $XDG_CONFIG_HOMEkhông được đặt hoặc trống, $HOME/.confignên sử dụng mặc định bằng .

Vì vậy, nó là dư thừa để xác định nó với giá trị mặc định. Tất cả các ứng dụng tuân thủ sẽ sử dụng$HOME/.config

Nhưng, nếu bạn làm muốn thay đổi mặc định trong một hệ thống Debian / Ubuntu, nơi tốt nhất là:

  • Đối với thay đổi toàn hệ thống, ảnh hưởng đến tất cả người dùng: /etc/profile
  • Chỉ dành cho người dùng của bạn: ~/.profile

1
downvoter được hoan nghênh giải thích những gì sai với câu trả lời, và tốt nhất là giúp cải thiện nó
MestreLion

1
Câu trả lời này là hoàn toàn tốt, về mặt lý thuyết, nhưng có rất nhiều phần mềm, không phù hợp với Đặc điểm kỹ thuật của Thư mục cơ sở XDG và hàng triệu lỗi xuất phát từ sự thiếu hiểu biết này.
ManuelSchneid3r

5
@ ManuelSchneid3r Rất đúng, nhưng đối với cài đặt phần mềm như vậy XDG_CONFIG_HOMEdù sao cũng sẽ có chút khác biệt, nếu có.
MestreLion

2
Có thể có phần mềm sử dụng một cách mù quáng XDG_CONFIG_HOMEmà không tuân theo thông số kỹ thuật, giả sử rằng đó là một tính năng tiêu chuẩn của Linux hoặc thậm chí là Unix chứ không phải là một phần của đặc tả của bên thứ ba.
Eagle-Eye

3
@mcarbonate Tôi đang nói nó có lẽ không thể làm tổn thương. Mặc dù nếu có thể, tốt hơn là nên tự sửa ứng dụng và gửi bản sửa lỗi ngược dòng.
Mắt đại bàng

5

Tôi thấy rằng nó hoạt động tốt nhất để đặt các biến môi trường thông qua PAM. Đối với các bản phân phối Linux hiện đại, điều này có nghĩa /etc/environmenthoặc $HOME/.pam_environment(xem man pam_env). Bạn cũng có thể thiết lập chúng /etc/security/pam_env.confbằng cách sử dụng một cú pháp đặc biệt. Đây là cách tôi đặt các biến XDG của mình /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

Trước đây tôi sẽ đặt các biến này trong /etc/profile.d/custom.sh. Tuy nhiên, một số ứng dụng bắt đầu trước khi tệp đó được đọc. Chuyển sang phương pháp PAM đã giải quyết vấn đề cho nhiều ứng dụng hoạt động theo cách này.


5
Lưu ý: điều này không tuân theo các giá trị mặc định được chỉ định trong Đặc tả thư mục cơ sở XDG
Tom Hale

2
@TomHale Tất nhiên là không, toàn bộ quan điểm của việc đặt các biến là ghi đè mặc định. Nếu bạn hài lòng với các mặc định, thì bạn không cần phải đặt các biến này.
carlwgeorge

1
Ubuntu 14.04 không đặt các biến thư mục XDG theo mặc định - chỉ vì có một đặc tả không có nghĩa là bản phân phối của ai đó tuân theo nó.
Tom Hale

2
Không thành vấn đề nếu tôi muốn export LESSHISTFILE="$XDG_CACHE_HOME"/less/historynơi nào lesskhông nhận thức được thông số kỹ thuật và các mặc định chưa được thiết lập bởi bản phân phối của tôi.
Tom Hale

2
@TomHale thông số kỹ thuật không xác định những gì hệ điều hành nên đặt các biến thành; nó định nghĩa các biến, nếu được định nghĩa và không trống, ứng dụng nên sử dụng. Và nếu biến không được xác định hoặc trống, ứng dụng nên sử dụng đường dẫn mặc định được tham chiếu trong thông số. Vì vậy, ví dụ ngắn của bạn không tuân thủ thông số kỹ thuật, vì trước tiên, nó không kiểm tra XDG_CACHE_HOMEđược xác định và không trống. Thay vào đó nên là:export LESSHISTFILE="${XDG_CACHE_HOME:-$HOME/.cache}"/less/history
Villapx

0

Đối với người dùng Zsh, hãy xác định nó trong .zshenvtệp của bạn

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

1
Downvoter quan tâm giải thích cho mình?
smac89
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.