ตัวแปร XDG_CONFIG_HOME ควรกำหนดไว้ที่ไหน?


40

ข้อมูลจำเพาะ XDG พูดถึงเกี่ยวกับXDG_CONFIG_HOMEตัวแปร แต่ไม่ได้ระบุตำแหน่งที่ควรกำหนด เราควรจะกำหนดมัน/etc/X11/Xsessionหรือเป็นไฟล์ปรับแต่งของโปรแกรมจัดการหน้าต่างที่จำเป็นต้องกำหนดสิ่งนี้?

ฉันพยายามประกาศใน / etc / environment เป็น

XDG_CONFIG_HOME="$HOME/.config"

แต่นั่นไม่ได้ผลเพราะดูเหมือนว่า $ HOME จะไม่ถูกกำหนดเมื่อ/etc/environmentมีการแยกวิเคราะห์

เอกสารเดียวที่ฉันสามารถหาได้ทางออนไลน์นั้นมีไว้สำหรับ Gentoo ที่ซึ่งมันถูกประกาศเข้ามา /etc/env.d/90xsession

ฉันใช้ Ubuntu สิ่งที่จะเป็นวิธีการแก้ปัญหาทั่วไปสำหรับ Distros ตาม Debian?

คำตอบ:


24

ใน Arch Linux สิ่งนี้ถูกกำหนดโดย/etc/profileใช้/etc/profile.dสคริปต์

สำหรับ Debian / Ubuntu ถ้ามี/etc/profile.d- สร้างสคริปต์ที่คล้ายกันภายใน หากไม่มีไดเร็กทอรีดังกล่าวให้แก้ไข/etc/profileitsef

export XDG_CONFIG_HOME="$HOME/.config"

/etc/environmentไฟล์แยกวิเคราะห์โดยpam_envซึ่งถือว่ามันเป็นชื่อที่ได้รับมอบหมาย = ค่าที่เรียบง่าย อย่างไรก็ตามมันก็มี/etc/security/pam_env.confซึ่งรองรับการขยายตัวตัวแปรและสามารถนำมาใช้เพื่อวัตถุประสงค์นี้


ส่วนสำคัญไม่สามารถใช้ได้
เหยี่ยว

3
มันไม่ได้อยู่ใน/etc/profileใน Arch /etc/profile.d/locale.shอีกต่อไปและเป็นที่กล่าวถึงเพียงครั้งเดียวจาก
phil pirozhkov

1
ลิงก์นั้นตายแล้ว ...
ManuelSchneid3r

53

คุณไม่จำเป็นต้องกำหนดทุกที่ยกเว้นว่าคุณต้องการเปลี่ยนค่าเริ่มต้น

ข้อกำหนดไดเรกทอรีฐาน XDGชัดเจนว่า:

หาก$XDG_CONFIG_HOMEไม่ได้ตั้งค่าหรือว่างเปล่า$HOME/.configควรใช้ค่าเริ่มต้นเท่ากับ

ดังนั้นจึงเป็นการซ้ำซ้อนในการกำหนดเป็นค่าเริ่มต้น แอปพลิเคชันที่สอดคล้องทั้งหมดจะใช้งานไปแล้ว$HOME/.config

แต่ถ้าคุณไม่ต้องการที่จะเปลี่ยนค่าเริ่มต้นในระบบ Debian / Ubuntu ที่สถานที่ที่ดีที่สุดคือ:

  • สำหรับการเปลี่ยนแปลงทั่วทั้งระบบมีผลกระทบต่อผู้ใช้ทั้งหมด: /etc/profile
  • สำหรับผู้ใช้ของคุณเท่านั้น: ~/.profile

1
downvoter มีการต้อนรับที่จะอธิบายสิ่งที่ผิดปกติกับคำตอบและโดยเฉพาะอย่างยิ่งความช่วยเหลือปรับปรุง
MestreLion

1
คำตอบนี้เป็นไปได้อย่างสมบูรณ์แบบในทางทฤษฎี แต่มีซอฟต์แวร์มากมายอยู่รอบตัวซึ่งไม่ใช่ข้อกำหนดของ XDG Base Directory ที่ตรงตามข้อกำหนดและมีจำนวนล้านล้านแมลงที่เกิดจากความไม่รู้นี้
ManuelSchneid3r

5
@ ManuelSchneid3r เป็นความจริงมาก แต่สำหรับการตั้งค่าซอฟต์แวร์ดังกล่าวXDG_CONFIG_HOMEจะสร้างความแตกต่างเล็กน้อยหากมี
MestreLion

2
อาจมีซอฟต์แวร์ที่ใช้สุ่มสี่สุ่มห้าXDG_CONFIG_HOMEโดยไม่ทำตามข้อกำหนดโดยถือว่าเป็นมาตรฐาน Linux หรือแม้แต่คุณสมบัติ Unix แทนที่จะเป็นส่วนหนึ่งของข้อมูลจำเพาะของบุคคลที่สาม
Eagle-Eye

3
@ mcnesium ฉันว่ามันคงไม่เจ็บ แม้ว่าจะเป็นไปได้มันจะเป็นการดีกว่าที่จะแก้ไขแอ็พพลิเคชันเองและส่งโปรแกรมแก้ไขต้นน้ำ
Eagle-Eye

5

ฉันพบว่าทำงานได้ดีที่สุดในการตั้งค่าตัวแปรสภาพแวดล้อมผ่าน PAM สำหรับดิสทริบิวชั่นลีนุกซ์รุ่นนี้หมายถึง/etc/environmentหรือ$HOME/.pam_environment(ดูman pam_env) นอกจากนี้คุณยังสามารถตั้งค่า/etc/security/pam_env.confโดยใช้ไวยากรณ์พิเศษ นี่คือวิธีที่ผมตั้งค่าตัวแปร XDG /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

ก่อนหน้านี้ฉันจะตั้งค่าตัวแปรเหล่านี้/etc/profile.d/custom.shเป็น อย่างไรก็ตามแอพพลิเคชั่นบางตัวเริ่มต้นก่อนที่จะอ่านไฟล์นั้น การสลับไปใช้วิธี PAM แก้ไขปัญหาสำหรับหลายแอปพลิเคชันที่ทำงานในลักษณะนี้


4
หมายเหตุ: สิ่งนี้ไม่เป็นไปตามค่าเริ่มต้นตามที่ระบุในข้อมูลจำเพาะของไดเรกทอรีฐาน XDG
Tom Hale

1
@ TomHale แน่นอนว่าจุดทั้งหมดของการตั้งค่าตัวแปรคือการแทนที่ค่าเริ่มต้น หากคุณพอใจกับค่าเริ่มต้นคุณไม่จำเป็นต้องตั้งค่าตัวแปรเหล่านี้เลย
carlwgeorge

1
Ubuntu 14.04 ไม่ได้ตั้งค่าตัวแปรไดเรกทอรี XDG ตามค่าเริ่มต้นเพียงเพราะมีสเปคไม่ได้หมายความว่า distro จะตามมา
Tom Hale

2
มันจะเกิดอะไรขึ้นถ้าฉันต้องการexport LESSHISTFILE="$XDG_CACHE_HOME"/less/historyที่lessจะไม่รับรู้ถึงสเป็คและค่าเริ่มต้นยังไม่ได้กำหนดโดย distro ของฉัน
Tom Hale

1
@TomHale spec ไม่ได้กำหนดสิ่งที่ระบบปฏิบัติการควรตั้งค่าตัวแปร; มันกำหนดตัวแปรว่าถ้ากำหนดและไม่ว่างแอปพลิเคชันควรใช้ และหากตัวแปรไม่ได้ถูกกำหนดหรือว่างเปล่าแอปพลิเคชันควรใช้พา ธ เริ่มต้นที่อ้างถึงในข้อมูลจำเพาะ ดังนั้นตัวอย่างสั้น ๆ ของคุณจึงไม่ตรงตามข้อกำหนดเนื่องจากไม่ได้ตรวจสอบก่อนว่าXDG_CACHE_HOMEมีการกำหนดและไม่ว่างเปล่า มันควรจะเป็น:export LESSHISTFILE="${XDG_CACHE_HOME:-$HOME/.cache}"/less/history
villapx

0

สำหรับผู้ใช้ Zsh ให้กำหนดไว้ใน.zshenvไฟล์ของคุณ

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

1
Downvoter สนใจอธิบายตัวเองไหม?
smac89
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.