. Xresources และ. Xdefaults แตกต่างกันอย่างไร


58

ไฟล์ทั้งสองดูเหมือนว่าจะมีฟังก์ชั่นเหมือนกัน อะไรคือความแตกต่างระหว่างทั้งสองถ้ามี?

คำตอบ:


68

~/.Xdefaultsเป็นวิธีที่เก่ากว่าของการจัดเก็บทรัพยากร X ไฟล์นี้จะถูกอ่านซ้ำทุกครั้งที่มีการเริ่มโปรแกรม Xlib หากใช้ X11 ผ่านเครือข่ายไฟล์นั้นจะต้องมีอยู่ในระบบไฟล์เดียวกับโปรแกรม

~/.Xresourcesใหม่กว่านี้ จะเต็มไปด้วยxrdbเข้าไปในRESOURCE_MANAGERคุณสมบัติของหน้าต่างราก X11 เมื่อใดก็ตามที่โปรแกรมใด ๆ RESOURCE_MANAGERเงยหน้าขึ้นมองทรัพยากรก็จะอ่านตรงจาก

หากคุณสมบัตินี้ไม่มีอยู่ Xlib จะกลับไปใช้วิธีการเดิมในการ.Xdefaultsเริ่มต้นโปรแกรมทุกครั้ง โปรดทราบว่าการแจกแจงส่วนใหญ่จะโหลด~/.Xresourcesโดยอัตโนมัติหากมีอยู่ซึ่ง.Xdefaultsจะทำให้ถูกเพิกเฉยแม้ว่าคุณจะไม่เคยรันxrdbด้วยตนเอง

ข้อดีของวิธีการใหม่นี้คือการเรียกใช้xrdbครั้งเดียวและทรัพยากรจะสามารถใช้ได้กับโปรแกรมใด ๆ ที่ทำงานบนจอแสดงผลนี้ไม่ว่าจะเป็นแบบโลคัลหรือแบบรีโมต (ชื่อ~/.Xresourcesเป็นเพียงแบบแผน - คุณสามารถใช้xrdbเพื่อโหลดไฟล์ใด ๆ ได้.Xdefaults)

คู่มือการเขียนโปรแกรม Xlib P.441:

ก่อนหน้า X11R2 การตั้งค่าทรัพยากร X ถูกอ่านจากไฟล์. Xdefaults ในโฮมไดเร็กตอรี่ของผู้ใช้และเป็นทางเลือกบนเครื่องใดก็ตามที่ไคลเอ็นต์ X ทำงานอยู่ดังนั้นไฟล์หลายไฟล์จึงยากต่อการดูแลรักษา

ต่อมาโปรแกรม xrdb ถูกสร้างขึ้นเพื่อเก็บการตั้งค่าทรัพยากรของผู้ใช้จากใน. Xresources ลงในคุณสมบัติ XA_RESOURCE_MANAGER ของหน้าต่างรูทบนเซิร์ฟเวอร์ X ปัจจุบันดังนั้นไคลเอนต์ทั้งหมดที่เชื่อมต่อกับเซิร์ฟเวอร์เดียวกันจะสามารถเข้าถึงได้ หากผู้ใช้ไม่ได้เรียก xrdb เพื่อตั้งค่าคุณสมบัติแล้ว. Xdefaults จะถูกอ่าน

Wikipedia :

[... ] ทรัพยากร X ถูกเก็บไว้ในสองตำแหน่งมาตรฐานขึ้นอยู่กับว่าพวกเขาใช้กับหน้าจอทั้งหมดหรือเฉพาะ:

  • คุณสมบัติ RESOURCE_MANAGER ของหน้าต่างรูทของหน้าจอ 0
  • คุณสมบัติ SCREEN_RESOURCES ของหน้าต่างรูทของหน้าจอเอง

มันยังไม่จบเท่านี้

  • นอกจากนี้ยังมี$XENVIRONMENTตัวแปรซึ่งจะใช้ค่าเริ่มต้นหากไม่ได้ตั้งค่าไว้ สิ่งนี้ใช้ในลักษณะเดียวกับแต่จะอ่านเสมอโดยไม่คำนึงว่ามีอยู่จริงหรือไม่ คุณสามารถใช้ไฟล์เพื่อตั้งค่าเฉพาะเครื่องในขณะที่ใช้กับไฟล์โกลบอล~/.Xdefaults-hostname.XdefaultsRESOURCE_MANAGER.Xdefaults-hostnamexrdb

ทั้งสองรายการ # 4 และ # 5 ที่ปรากฏด้านล่างปรากฏว่าใช้งานโดยโปรแกรม Xlib แท้ๆเท่านั้นไม่ใช่ GTK 3 หรือชุดเครื่องมืออื่น ๆ

  • ตำแหน่งที่สี่คือไดเร็กทอรีที่ชี้โดย$XAPPLRESDIRตัวแปรสภาวะแวดล้อม (ผิดปกติหากไม่ได้ตั้งค่าตัวแปรจะ$HOMEถูกใช้เป็นค่าเริ่มต้น) เมื่อเริ่มต้นโปรแกรมจะตรวจสอบว่ามีไฟล์ใด ๆ ต่อไปนี้อยู่หรือไม่ (ชื่อไฟล์เหมือนกับชื่อคลาสของโปรแกรม):

    • $XAPPLRESDIR/$LC_CTYPE/XTerm
    • $XAPPLRESDIR/language/XTerm
    • $XAPPLRESDIR/XTerm

    ( languageมาจาก$LC_CTYPEการลอกทั้งหมดยกเว้นองค์ประกอบแรกตัวอย่างเช่นen_US.utf-8en)

  • ห้าสถานที่เป็นทั้งระบบ "การตรวจสอบค่าเริ่มต้น" ไดเรกทอรี อีกครั้งไดเรกทอรี app-defaults จะถูกตรวจสอบเมื่อเริ่มต้นโปรแกรมหากมีชื่อไฟล์อยู่หลังโปรแกรม ตัวอย่างเช่น XTerm (บน Arch Linux) ใช้:

    • /etc/X11/$LC_CTYPE/app-defaults/XTerm
    • /etc/X11/language/app-defaults/XTerm
    • /etc/X11/app-defaults/XTerm
    • /usr/share/X11/$LC_CTYPE/app-defaults/XTerm
    • /usr/share/X11/language/app-defaults/XTerm
    • /usr/share/X11/app-defaults/XTerm

    ไฟล์แอปเริ่มต้นมักจะติดตั้ง/usr/shareพร้อมกับตัวโปรแกรมเอง /etcแทนที่ผู้ดูแลระบบจะไป


ทุกอย่างที่กล่าวมาข้างต้นเป็นเอกสารในรายละเอียดมากในเอกสารชุดเครื่องมือ X.org - บทความX Toolkit Intrinsics - ภาษา C อินเตอร์เฟซส่วนโหลดฐานข้อมูลทรัพยากร

น่าเสียดายที่ฉันไม่พบคู่มือผู้ใช้ล่าสุดที่อธิบายแหล่งข้อมูล X ส่วนใหญ่เป็นเพราะไม่เกี่ยวข้องในปี 2012 แต่สำหรับข้อมูลในอดีต (อ่าน: ล้าสมัยอย่างน่ากลัว) คุณสามารถอ่านคู่มือผู้ใช้ X Window System สำหรับ X11 R3 และ R4 ของระบบ X Windowมาตรา 9: การตั้งค่าทรัพยากร (เริ่มต้นที่หน้า 181)


คำตอบที่ยอดเยี่ยม แต่ควรสังเกตว่าการใช้งานไม่ได้ปฏิบัติตามกฎอย่างถูกต้อง ตัวอย่างเช่นฉันจำได้ว่าแอป SunOS 4 และ Solaris 6 จะไม่รับการเปลี่ยนแปลง. Xdefaults จนกว่าฉันจะเรียกใช้ "xrdb" อย่างชัดเจนในภายหลัง อาจมีความแปลกประหลาดบางอย่างเมื่อแอพและเซิร์ฟเวอร์ X กำลังทำงานบนโฮสต์ที่ต่างกัน แอพบางตัวอ่านไฟล์ในตัวเครื่องและบางตัวอ่านฐานข้อมูลจากเซิร์ฟเวอร์ X
David C.

1
@DavidC: พฤติกรรม Xdefaults นั้นเป็นไปตามกฎที่อธิบายไว้ข้างต้น หากxrdbได้เคยรับการเรียกใช้สำหรับการแสดงผล X นี้ตั้งแต่เข้าสู่ระบบ - นั่นคือถ้าคุณสมบัติ X รากที่มีอยู่ - แล้ว Xlib จะไม่ใช้ .Xdefaults ที่ทุกคนอีกต่อไป
grawity

1
นั่นทำให้รู้สึก แต่ยังมีแอพที่เห็นได้ชัดจำนวนมากซึ่งจะอ่านเนื้อหาของ ~ / .Xresources และละเว้นฐานข้อมูล xrdb ซึ่งอาจน่ารำคาญจริง ๆ ถ้าคุณสโลแกนโฮสต์ที่แตกต่างกัน (ที่มี. Xresources ที่แตกต่างกัน) และพบว่าแอปไม่ได้แสดงเนื้อหาในแบบที่มันทำงานเมื่ออยู่ในพื้นที่
David C.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.