ย้ายจาก windows ไปยัง linux: ทำความเข้าใจ - ระบบ X Window, X Server, Xorg, Xfree86


10

ฉันเป็นนักพัฒนา windows (Win32api) ย้ายจาก Windows เป็น Linux ในขณะที่ติดตั้ง linux มีหลายสิ่งที่ต้องรู้เกี่ยวกับ X11, X Window System, X Server, Xorg, Xfree86 และอะไรที่ไม่

ทำไมเราถึงไม่รู้เรื่องนี้ในหน้าต่าง? บทความ Wiki เกี่ยวกับสิ่งเหล่านี้ทำให้ฉันกลัว มีใครอธิบายสิ่งเหล่านี้ได้ไหม พวกเขาทำงานอย่างไร ทำไมลินุกซ์ถึงซับซ้อนและไม่ได้อยู่ใน windows?

การอ้างอิงที่ดีใด ๆ ยังชื่นชม

PS: ฉันชอบที่จะรู้ว่าภายในไม่ลังเลที่จะลงลึก


1
หลังจากอ่านคำตอบแล้วให้อ่านบทความ "ความคิดและการท่องไป
กรงเล็บ

1
ลิงก์ที่มีการเปลี่ยนแปลงjulien.danjou.info/blog/2010/…
fstamour

คำตอบ:


13

Windows ช่วยให้คุณสามารถติดตั้งเดสก์ท็อปเดี่ยวได้เพียงครั้งเดียวโดยใช้ API / เฟรมเวิร์กเดียวทั้งหมดดำเนินการโดย Microsoft

บนระบบ Unix คุณจะได้รับ API / framework (X11 / X Window System) ซึ่งมีการใช้งานหลายอย่าง (Xorg, Xfree86) ซึ่งคุณจะได้รับ API / framework ระดับสูงขึ้น (GTK +, Qt, ... ) เนื่องจาก raw X11 นั้นดั้งเดิมมากคุณจะได้รับเดสก์ท็อปที่หลากหลาย (Gnome, KDE, ... ) ซึ่งทำโดยคนอื่น

ยิ่งไปกว่านั้นระบบ X11 ได้รับการออกแบบตั้งแต่แรกเริ่มโดยคำนึงถึง GUI ระยะไกล - นั่นคือเครื่อง lokal แสดง GUI ของแอปพลิเคชั่นที่รันจากระยะไกล - ซึ่งแนะนำแนวคิดของ "X Server" และ "X Client"

จากนั้นมีศัพท์เฉพาะที่ "รู้สึก" ในทางที่ผิดสำหรับผู้มาใหม่: เครื่องท้องถิ่นของคุณกำลังเรียกใช้ "X Server" ที่ให้บริการ "display a GUI" ในขณะที่เครื่องระยะไกลคือ "X Client" ที่ใช้บริการ บนเครื่องของคุณเพื่อแสดง GUI

นั่นคือภาพรวมอย่างรวดเร็ว เมื่อคุณได้รับการแยกออกทำความเข้าใจกับบทความ / โพสต์ฟอรั่มในเรื่องควรจะง่ายขึ้นมาก

แก้ไข:เพื่อตอบความคิดเห็นแรกที่สองของ OP

ใช่ "X11" เป็นเพียงโปรโตคอลและ Xorg / XFree86 เป็นการนำไปใช้งานสองแบบ ในระดับพื้นฐาน X11 เป็นเพียงการวาดเส้นและจุดซึ่งไม่เป็นประโยชน์อย่างมากหากคุณต้องการทำ GUI

ด้านบนของโพรโทคอล X11 ผู้คนใช้งานหลายสิ่งหลายอย่างและมันค่อนข้างยากที่จะทำการเปรียบเทียบ 1: 1 กับ Windows เพราะ Microsoft ไม่เคยใส่ใจที่จะแยกสิ่งต่าง ๆ ออกจากกันจริงๆ นอกจากนี้ฉันไม่ใช่นักพัฒนาประเภท GUI นั่นคือประสบการณ์จริงของฉันกับทั้งสองระบบนั้นมีเพียงเล็กน้อย

ที่ด้านล่าง "ตัวจัดการหน้าต่าง" จัดเตรียมหน้าต่าง (จัดการเส้นขอบปุ่มปิด / ย่อ / ขยายขนาดขยายใหญ่สุด ฯลฯ ) และเสนอ "อสังหาริมทรัพย์" ภายในหน้าต่างไปยังชุดเครื่องมือวิดเจ็ต มีตัวจัดการหน้าต่างหลายตัวบางตัวเลียนแบบระบบอื่น ๆ (Windows, MacOS, AmigaOS, อะไรก็ตาม) และพวกมันส่วนใหญ่สามารถใช้แทนกันได้โปร่งใสกับระบบที่เหลืออยู่

"ชุดเครื่องมือวิดเจ็ต" นำเสนอปุ่มตัวเลื่อนฟิลด์ข้อความและอื่น ๆ เพื่อสร้าง GUI ของคุณ นี่คือสิ่งที่คุณ (ในฐานะนักพัฒนาแอปพลิเคชัน) ได้รับ "เห็น", ฉลาด API และสิ่งที่ตัดสินใจว่าส่วนใหญ่ "รูปลักษณ์และความรู้สึก" ของแอปพลิเคชันของคุณ

"เดสก์ท็อป" สร้างแอปพลิเคชั่นจำนวนมากด้านบนของชุดเครื่องมือ / ตัวจัดการหน้าต่างวิดเจ็ตบางชุดเพื่อให้รูปลักษณ์และความรู้สึกสอดคล้องกัน คุณไม่ต้องกังวลกับสิ่งเหล่านี้เว้นแต่ว่าคุณต้องการพัฒนาเดสก์ท็อปเอง

เดสก์ท็อป "Gnome" ใช้ชุดเครื่องมือวิดเจ็ต "GTK +" ที่ด้านบนของตัวจัดการหน้าต่าง "Metacity"

เดสก์ท็อป "KDE" ใช้ชุดเครื่องมือวิดเจ็ต "Qt" ที่ด้านบนของตัวจัดการหน้าต่าง "KWin"

โปรดทราบว่าโดยเฉพาะอย่างยิ่งทั้งสอง GTK + และ Qt ได้พัฒนาเกินกว่า "เครื่องมือชุดเครื่องมือ" ที่เรียบง่ายเป็น "กรอบการพัฒนาโปรแกรมประยุกต์" หากคุณต้องการพัฒนาแอพ GUI สำหรับ Linux อย่างมีประสิทธิภาพคุณต้องเลือกว่าจะใช้หนึ่งในสองอย่างนี้ มีทางเลือกมากขึ้นถ้าคุณต้องการแอพ "จริงจัง" มากขึ้น (ไม่ต้องการการพึ่งพาไลบรารีขนาดใหญ่) แต่วันนี้ระบบส่วนใหญ่มี GTK + และ Qt libs ติดตั้งอยู่แล้ว

เป็นไปได้อย่างสมบูรณ์ที่จะใช้แอป Qt บนเดสก์ท็อป Gnome หรือแอพ GTK + บนเดสก์ท็อป KDE (มันไม่ได้เป็นเช่นนั้นเสมอไป) ดังนั้นคุณต้องกังวลเกี่ยวกับความเข้ากันได้เล็กน้อย ด้วยตัวเลือกระหว่างแอพที่มีฟังก์ชั่นการเปรียบเทียบสองแอพผู้คนมักจะชอบแอพที่ใช้วิดเจ็ต "ดั้งเดิม" ของเดสก์ท็อปที่เลือก แต่ฉันไม่ต้องกังวลเกี่ยวกับเรื่องนั้น

หัวข้อย่อยที่สำคัญกว่าอื่น ๆ ในการเลือก "ชุดเครื่องมือวิดเจ็ต": เงื่อนไขการออกใบอนุญาตสนับสนุนภาษาที่คุณเลือกความเข้ากันได้ข้ามแพลตฟอร์ม


โพสต์ Scriptum : กลับมาอีกหลายปีต่อมาผมได้เลือกขึ้นประสบการณ์การเขียนโปรแกรม GUI ของตัวเองและตระหนักถึงสิ่งหนึ่งที่ขาดหายไปในการอธิบายข้างต้นหากคุณกำลังมองหา "วิธีที่จะไป" คำแนะนำ: wxWidgets นี่คือกรอบที่สร้างอยู่ด้านบนของสิ่งที่คุณกำลังใช้กำเนิดและช่วยให้พกพาโปร่งใสพัฒนา GUI โดยไม่ต้องเสียสละประสิทธิภาพหรือมีสาย licensind ใด ๆ ที่แนบ C ++ API เป็นเส้นทางที่ฉันเลือกสำหรับความต้องการ GUI ของฉันและฉันรู้สึกว่าควรได้รับการกล่าวถึงอย่างครบถ้วน


+1 และโปรดทราบว่าหากคุณจัดการเลือกเฟรมเวิร์ค (ตัวอย่างเช่น Qt) คุณไม่จำเป็นต้องสนใจเรื่อง X ทั้งหมด (บางอย่าง)
Peter Jaric

ส่วน +1 ของ GUI API ของ Windows API เทียบเท่ากับ Qt & GTK + ถ้าอย่างนั้น X Window System ที่เทียบเท่าใน windows คืออะไร? เหตุใด KDE & Gnome จึงมีอยู่
กรงเล็บ

@DevSolar: คุณอยู่ในเส้นทางที่ถูกต้อง โปรดอธิบายอีกหน่อย X11 เป็นเพียงคุณสมบัติเช่น POSIX? และ xorg & xfree86 เป็นสองการใช้งานหรือไม่ หากมี GTK + & Qt ความต้องการของ Gnome & KDE คืออะไร โปรดเปรียบเทียบแต่ละขั้นตอน / ระดับกับ windows เข้าใจง่ายสำหรับฉัน
กรงเล็บ

At the bottom, a "window manager"Window manager สร้างขึ้นบน X Window System หรือไม่? ถ้าเป็นเช่นนั้นระบบ windows จะอยู่ที่ด้านล่างขวา? คุณทำให้ฉันสับสนกับระบบจัดการหน้าต่างและหน้าต่าง
กรงเล็บ

"X11" / "X Window (ระบบ)" ที่ใช้งานโดย "Xorg" / "XFree86" อยู่ที่ด้านล่างสุดและมีจุดและเส้น "ตัวจัดการหน้าต่าง" ("Metacity" / "Kwin") ให้บริการ windows (กรอบ, ลาก, ปรับขนาด, ปิด ฯลฯ )
DevSolar

3

ฉันไม่เข้าใจว่าทำไมคุณถึงเข้าใจยากที่จะเข้าใจคำอธิบายที่ได้รับจาก http://en.wikipedia.org/wiki/X_Window_Systemแต่อย่างใด:

โดยปกติระบบ X Window ประกอบด้วย 2 ส่วนคือ

  • เซิร์ฟเวอร์ (เรียกว่า XServer)
  • ลูกค้า (เรียกว่า .. XClients :))

เซิร์ฟเวอร์เชื่อมต่อกับฮาร์ดแวร์ (การ์ด grafic, อุปกรณ์อินพุต) และอนุญาตให้ลูกค้าใช้ทรัพยากรเหล่านี้ ไคลเอนต์เชื่อมต่อกับ xserver และใช้ทรัพยากรที่มีให้

มีเซิร์ฟเวอร์สำหรับ Unix (Xorg, mac folks มีของตนเอง) และสำหรับ Windows (Hummingbird, พอร์ต Cygwin ของ Xorg และอื่น ๆ )

คุณสามารถเชื่อมต่อไคลเอนต์ในระบบปฏิบัติการหนึ่งไปยังเซิร์ฟเวอร์ที่ทำงานบนระบบปฏิบัติการอื่น

การสื่อสารระหว่างเซิร์ฟเวอร์และลูกค้าจะกระทำผ่านทั้งXlib-APIหรือ (ที่ทันสมัยอื่น ๆ ) xcb-API

ในการสร้างแอปพลิเคชั่นที่เรียบง่ายโดยปกติคุณเพียงแค่ทำสิ่งนี้:

  • เชื่อมต่อกับ xserver
  • ขอ xserver เพื่อสร้างหน้าต่าง (ซึ่งจะทำให้คุณ "จัดการ")
  • บอก xserver เพื่อเปิดหน้าต่างขึ้นมา
  • กิจกรรมกระบวนการ (เมาส์แป้นพิมพ์การเปิดรับการเคลื่อนไหว ฯลฯ )
  • วาดสิ่งต่าง ๆ ไปที่หน้าต่าง (ข้อความกราฟิก ฯลฯ )
  • ออกจากแอปโดยแจ้งให้ xserver ปล่อยทรัพยากรทั้งหมด

และ .. เสร็จแล้ว

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