แอปพลิเคชัน KDE ทำงานภายใต้ Gnome อย่างไร


19

หาก Gnome ใช้ GTK + และ KDE ใช้ Qt แอปพลิเคชัน KDE จะทำงานภายใต้ Gnome ได้อย่างไร

คำตอบ:


30

ทั้ง GTK และ Qt เป็นชุดเครื่องมือสำหรับการสร้างส่วนต่อประสานกราฟิก ชุดเครื่องมือ UI แต่ละชุดมีฟังก์ชั่นของตัวเองสำหรับโปรแกรมในการสร้างวิดเจ็ต (ปุ่ม, กล่องข้อความ ... ) และมาในรูปแบบของไลบรารีที่โปรแกรมกราฟิกเชื่อมโยง โปรแกรมที่เขียนขึ้นสำหรับ GNOME จะใช้ GTK ( libgdkและlibgtk) ในขณะที่โปรแกรม KDE ใช้ Qt ( libQtCoreและlibQtGui) โปรแกรมการตรัสรู้ใช้ EFL และอื่น ๆ

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

(ชุดเครื่องมือที่ทันสมัยที่สุดเช่น GTK, Qt หรือ EFL) ทำการวาดภาพแฟนซีและใช้ X11 เพื่อส่งภาพที่เสร็จสมบูรณ์ของหน้าต่างทั้งหมดและเซิร์ฟเวอร์ X วางไว้บนหน้าจอเท่านั้นชุดเครื่องมือที่เก่ากว่าเช่น lXaw หรือ Motif แทน X11 เพื่อวาดแบบดั้งเดิมเช่นเส้นหรือสี่เหลี่ยมหรือข้อความและเซิร์ฟเวอร์ X ทำการเรนเดอร์ทั้งหมด)

เซิร์ฟเวอร์ X ทำหน้าที่รวบรวมทุกอย่างเข้าด้วยกันคุยกับกราฟิกการ์ดของคุณและอื่น ๆ ด้วยวิธีนี้คุณสามารถเรียกใช้โปรแกรมที่ใช้ชุดเครื่องมือที่แตกต่างกันหลายรุ่นเพราะในท้ายที่สุดแล้วพวกเขาเพียงแค่ใช้สิ่งอำนวยความสะดวกระบบปฏิบัติการเดียวกัน

กลไกไม่ใช่นโยบาย

สถานการณ์หลายชุดเครื่องมือนั้นไม่เหมือนกันกับ Xตัวอย่างเช่นคุณจะพบว่าโปรแกรม Windows ที่ใช้มาตรฐานcomctl32แต่ยังรวมถึง WPF, .NET WinForms, Aura ของ Chrome, XUL ของ Firefox และแม้แต่ GTK หรือ Qt เดียวกัน เกมส่วนใหญ่ใช้การควบคุมสไตล์ของพวกเขาเอง จริงๆแล้วมันเป็นไปได้ในระบบกราฟิกใด ๆที่ให้คุณวาดภาพข้ามหน้าต่างทั้งหมด

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

ตัวอย่างเช่นหนึ่งในส่วนที่สำคัญของระบบกราฟิกคือการจัดการหน้าต่าง - การวาดภาพของเฟรม (การตกแต่ง aka) รอบ ๆ แต่ละหน้าต่างความสามารถในการย้ายและปรับขนาดหน้าต่างและอื่น ๆ Windows และ OS X มีตัวจัดการหน้าต่างที่ติดตั้งในระบบ แต่ใน X มันทำงานเป็นโปรแกรมแยกต่างหาก - ชุด X.Org มาพร้อมกับtwmสภาพแวดล้อมแบบเดสก์ท็อปน้อยที่สุดแต่เกือบทุกสภาพแวดล้อมของเดสก์ท็อปมาพร้อมกับตัวจัดการหน้าต่างของตนเอง gnome-shell; KDE มี KWin) ซึ่งให้การทำงานร่วมกับสภาพแวดล้อมเดสก์ท็อปที่เกี่ยวข้อง

(เช่นชุดเครื่องมือเครื่องมือจัดการหน้าต่าง "การแต่งภาพ" ที่ทันสมัยใช้งานแทน Xorg ในการเขียนหน้าต่างทั้งหมดลงบนภาพหน้าจอสุดท้ายทำให้สิ่งต่าง ๆ เช่นเงาหรือเอฟเฟกต์เพิ่ม)

ด้วยสภาพแวดล้อมเดสก์ท็อปสมัยใหม่สิ่งนี้สร้างปัญหาได้เช่นกัน ในการใช้ตัวอย่างที่พบบ่อยที่สุด: ปุ่มลัด "แป้นพิมพ์" จะใช้ฟังก์ชันการทำงานแบบเดียวกัน เมนูป๊อปอัป และสกรีนเซฟเวอร์และมีเพียงหนึ่งโปรแกรมเท่านั้นที่สามารถใช้งานได้ในครั้งเดียว ซึ่งหมายความว่าคุณไม่สามารถล็อคหน้าจอขณะที่เมนูป๊อปอัปเปิดอยู่หรือข้ามเพลงขณะที่หน้าจอถูกล็อค มันเป็นหนึ่งในหลาย ๆ เหตุผลที่ Wayland กำลังถูกสร้างขึ้นเพื่อแทนที่ X11

ข้อความด้านข้าง

ในทางเทคนิคนี่หมายถึงคุณสามารถเรียกใช้โปรแกรม X บนคอมพิวเตอร์เครื่องอื่นพูดคุยกับเซิร์ฟเวอร์ X บนเครื่องของคุณผ่านเครือข่าย อันที่จริงนี่เป็นกรณีการใช้งานหลักในวันแรก ๆ และเป็นที่ที่ชื่อ "X server " มาจากที่แรก สามารถเรียกใช้เซิร์ฟเวอร์ X บน Mac และแสดงหน้าต่างที่สร้างขึ้นโดยโปรแกรมที่ทำงานบน Linux, FreeBSD หรือแม้แต่ OpenVMS

อย่างไรก็ตามดังที่ได้กล่าวไว้ข้างต้นชุดเครื่องมือที่ทันสมัยทำหน้าที่วาดภาพฝั่งไคลเอ็นต์ (กราฟิกแฟนซีและแบบอักษรที่สวยงามค่อนข้างยากที่จะทำกับดั้งเดิม X11) และส่งเฉพาะภาพสุดท้ายไปยังเซิร์ฟเวอร์ X ซึ่งเร็วมากภายในเครื่อง bit bandwidth เครือข่ายที่เป็นธรรม

(โปรโตคอลอื่น ๆ เช่น RFB (aka VNC) หรือ "Remote Desktop" ของ Microsoft ได้รับการออกแบบมาสำหรับสิ่งนี้และพวกเขามีวิธีที่มีประสิทธิภาพมากในการบีบอัดภาพหน้าต่าง)


1
การวนรอบเหตุการณ์ของ Qt ล้อมรอบ GTK ดังนั้นคุณสามารถรวมรหัส Qt และ GTK ในแอปพลิเคชันเดียวกันได้ (โดยปกติแล้วจะเกิดขึ้นเฉพาะกับเช่นปลั๊กอิน)
Alex P

@Alex: คุณหมายถึง "สามารถห่อ" ในกิจกรรมวนของ Qt นั้นสามารถส่งกิจกรรมไปยัง GTK หรือคุณกำลังบอกว่า Qt ใช้ GLib จริง ๆ กับการวนรอบเหตุการณ์หรือไม่
grawity

1
Qt สามารถใช้การวนรอบเหตุการณ์แบบบริสุทธิ์ได้เช่นกัน แต่มันจะห่อของ Glib ตามค่าเริ่มต้น (อย่างน้อยใน Qt4 - ฉันไม่ได้ดูว่า Qt5 ทำอะไร) มีการตั้งค่าสถานะที่ซ่อนอยู่ ($ QT_NO_GLIB) ที่ควบคุมมันในขณะทำงาน
Alex P

7

ส่วนหนึ่งของคำตอบคือสภาพแวดล้อมเดสก์ท็อปชั้นนำ (Gnome, KDE, XFCE หรืออื่น ๆ ) ทำงานร่วมกันภายใต้http://freedesktop.orgเพื่อให้การทำงานร่วมกันเป็นไปได้ หนึ่งในสเปคที่เผยแพร่โดย FD.o คือEWMHซึ่งรับประกันความเข้ากันได้ระดับหนึ่งระหว่างตัวจัดการหน้าต่าง (สำหรับคุณสมบัติที่ทันสมัยไม่ใช่แค่การจัดการหน้าต่างขั้นพื้นฐาน)


4

เมื่อทำงานภายใต้ GNOME แอปพลิเคชัน KDE ยังคงเรียกใช้ไลบรารี Qt ที่ใช้ร่วมกันซึ่งขึ้นอยู่กับ เช่นเดียวกันกับการใช้งานแอพพลิเคชั่นใด ๆ ภายใต้ Desktop Environment พวกเขาไม่ จำกัด สิ่งที่สามารถเรียกได้และสิ่งที่ทำไม่ได้

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