Co to jest natywny interfejs GUI systemu Linux?


441

Mam nadzieję, że nie jest to głupie pytanie, ale zawsze zastanawiałem się. Zarówno Windows (Win32 API), jak i OS X (Cocoa) mają własne API do obsługi okien, zdarzeń i innych rzeczy związanych z systemem operacyjnym. Nigdy tak naprawdę nie mam jasnej odpowiedzi na pytanie, czym jest odpowiednik Linuksa.

Słyszałem, jak niektórzy mówili, że GTK +, ale GTK + jest wieloplatformowy, jak może być natywny?


46
Joni ma rację: „W Linuksie graficzny interfejs użytkownika nie jest częścią systemu operacyjnego ... X Window System definiuje protokół sieciowy dla [możliwości GUI]. Biblioteki narzędzi takie jak Gtk + (używane przez Gnome) i QT (używane przez KDE), zbudowany na Xlib. ”
paulsm4

33
wręcz przeciwnie, David, jest to doskonałe zapytanie
amfibia

7
Zgadzam się - przeczytałem „Linux Programming API” i „Systems Programming ... Unix”, które są dwiema biblijami jądra i API, i to pytanie nigdy nie przyszło mi do głowy :) Odpowiedzi są interesujące.
John Humphreys - w00te

10
Win32 API jest także wieloplatformowy, jeśli dołączysz Wine ..
Brendan Long

2
BTW Windows ma podsystemy WIN32 / WIN64, które implementują wiele takich samych dla „Windows Look and Feel - inaczej WIN32”. Podsystemy te działają powyżej jądra NT. Interfejsy API dla nich są różne. Na przykład C: jest abstrakcją WIN32, a nie jądrem NT. To samo dotyczy niektórych funkcji okienkowania. Windows miał również dostępne podsystemy Unix (które do pewnego stopnia obsługują X11).
Preet Sangha,

Odpowiedzi:


603

W systemie Linux graficzny interfejs użytkownika nie jest częścią systemu operacyjnego. Graficzny interfejs użytkownika dostępny na większości komputerów z systemem Linux jest dostarczany przez oprogramowanie o nazwie X Window System , które określa niezależny od urządzenia sposób radzenia sobie z ekranami, klawiaturami i wskaźnikami.

X Window definiuje protokół sieciowy do komunikacji i każdy program, który umie „mówić” tym protokołem, może go używać. Jest to biblioteka C nazywa Xlib że łatwiej korzystać z tego protokołu, więc Xlib niby na rodzimym GUI API. Xlib to nie jedyny sposób na dostęp do serwera X Window; jest też XCB .

Biblioteki zestawów narzędzi, takie jak GTK + (używane przez GNOME ) i Qt (używane przez KDE ), zbudowane na Xlib, są używane, ponieważ są łatwiejsze do programowania. Na przykład zapewniają spójny wygląd i obsługę różnych aplikacji, ułatwiają przeciąganie i upuszczanie, zapewniają standardowe komponenty nowoczesnego środowiska komputerowego i tak dalej.

To, jak X wewnętrznie rysuje na ekranie, zależy od implementacji. X.org ma część niezależną od urządzenia i część zależną od urządzenia. Ten pierwszy zarządza zasobami ekranowymi, takimi jak Windows, podczas gdy drugi komunikuje się ze sterownikiem karty graficznej, zwykle modułem jądra. Komunikacja może odbywać się przez bezpośredni dostęp do pamięci lub przez wywołania systemowe do jądra. Sterownik tłumaczy polecenia na postać zrozumiałą dla sprzętu na karcie.

Począwszy od 2013 r. Nowy system okien o nazwie Wayland zaczyna być użyteczny, a wiele dystrybucji mówi, że w pewnym momencie do niego migruje, choć nadal nie ma jasnego harmonogramu. System ten oparty jest na API OpenGL / ES, co oznacza, że ​​w przyszłości OpenGL będzie „natywnym interfejsem GUI API” w systemie Linux. Trwają prace nad przeniesieniem GTK + i QT do Wayland, tak aby obecne popularne aplikacje i systemy komputerowe wymagały minimalnych zmian. Aplikacje, których nie można przenieść, będą obsługiwane przez serwer X11, podobnie jak OS X obsługuje aplikacje X11 za pośrednictwem Xquartz. Port GTK + ma zostać ukończony w ciągu roku , a Qt 5 ma już pełną obsługę Wayland.

Aby jeszcze bardziej skomplikować sprawy, Ubuntu ogłosiło, że opracowuje nowy system o nazwie Mir z powodu problemów, które dostrzegają w Wayland. Ten system okien jest również oparty na API OpenGL / ES.


95
+1. Od kiedy system operacyjny musi mieć GUI, co oznacza, że ​​jeśli nie, to nie jest to system operacyjny? Nonsens.
David Hammen

42
Nawet Windows był pierwotnie tylko programem działającym na DOS-ie.
dan04

2
+1 @DavidHammen Nie jestem pewien, czy to było skierowane na mnie, czy nie, ale masz 100% racji. Moja terminologia nie była dokładnie dokładna. Co ja powinien powiedzieć, że nie jest to pełny system operacyjny w taki sposób można powszechnie myśleć o OS ze wszystkich dodatkowych elementów, które sprawiają, że jest łatwy w użyciu, ale raczej konglomeratem elementów pochodzących od różnych dostawców, itd.
Chris Thompson,

3
@ChrisThompson - hmm ... może jestem za stary, ale nigdy nie myślałem o GUI jako o kluczowej części systemu operacyjnego. I nigdy nie myślałem o systemie operacyjnym bez GUI jako o „konglomeracie komponentów różnych dostawców itp.” Ale hej, może sprawy potoczyły się dalej, odkąd sformułowałem opinię na temat tego, co stanowi system operacyjny :)
George Hawkins,

2
O ile odpowiedź nie jest wiki społeczności, nie zmienię żadnej zawartości, oprócz poprawiania gramatyki / formatowania lub dodawania linków. Jeśli treść wymaga korekty lub aktualizacji, odpowiedzialność ponosi osoba, której reputacja jest związana z treścią. Zrobię im jednak przysługę komentowania, aby uświadomili sobie, że moim zdaniem coś należy poprawić lub zaktualizować.
Uczciwy Abe

84

Linux to jądro, a nie pełny system operacyjny. Istnieją różne systemy okienkowe i GUI, które działają na Linuksie, aby zapewnić okienkowanie. Zazwyczaj X11 jest systemem okienkowym używanym przez dystrybucje Linuksa.


6
Są na nim zbudowane. X11 to serwer, podczas gdy KDE, Gnome itp. To menedżery pulpitu, zapewniające interfejsy API wyższego poziomu, wspólne układy okien itp.
Mark

7
X11 jest faktyczną warstwą niskiego poziomu, która obsługuje wszystkie te rzeczy i obsługuje rysowanie na ekranie itp. (I komunikuje się ze sterownikami graficznymi). Gnome / KDE następnie kontroluj X11. To wszystko na wysokim poziomie i ignorowanie miliarda i jednego detalu.
slugonamission

3
dzięki. jeszcze jedno pytanie: wikipedia wyjaśnia, że ​​X11 „tworzy warstwę abstrakcji sprzętu, w której napisane jest oprogramowanie do korzystania z uogólnionego zestawu poleceń, pozwalając na niezależność urządzenia i ponowne użycie programów na dowolnym komputerze, który implementuje X”. moje pytanie brzmi: dlaczego X11 zapewnia interakcję sprzętową (HAL), czy jądro Linuksa powinno to zapewniać, a X11 działa na nim? Innymi słowy, dlaczego X11 dociera do urządzeń, kiedy jądro powinno być jego serwerem proxy?
amfibia

1
Myślę, że w tym przypadku HALjest to niepoprawnie użyty termin. Naprawdę mówią, że X11 zapewnia niezależny od systemu sposób wyświetlania okien. Istnieją wersje X11 dla Darwina (Mac OS - teraz jest to bardziej skomplikowane z Mountain Lion ...), MS Windows i Linux.
Chris Thompson

4
X11 to protokół sieciowy. Abstrakcja obejmuje pisanie programów na platformie A, które mogą wyświetlać klientów X11 (okna, aplikacje itp.) Na platformie B na niektórych urządzeniach sieciowych. Twoja aplikacja może działać lokalnie, zdalnie, na zagnieżdżonym serwerze, na serwerze wirtualnym, który robi tylko VNC itp. Abstrakcja sprzętu (na platformie lokalnej) jest efektem ubocznym tej funkcji, ale również zaciera granicę między X11 a jądro (czyli abstrakcja sprzętowa w przeciętnym systemie uniksowym).
Alexios

59

Warto również wspomnieć o Waylandzie, ponieważ jest on nazywany „przyszłym zabójcą X11”.

Zauważ też, że Android i niektóre inne mobilne systemy operacyjne nie zawierają X11, chociaż mają jądro Linuksa, więc w tym sensie X11 nie jest natywny dla wszystkich systemów Linux.

Bycie wieloplatformowym nie ma nic wspólnego z byciem rodzimym. Kakao zostało również przeniesione na inne platformy za pośrednictwem GNUStep, ale nadal jest natywne dla OS X / macOS.


2
Schemat architektury wysokiego poziomu dla Waylanda jest taki sam jak dla X, z tym wyjątkiem, że „Compositor” i „Server” na diagramie X są scalone na diagramie Waylanda. Brakuje wiarygodnego wyjaśnienia, dlaczego nie można było przeprowadzić integracji w X.
Kaz.

1
cóż, powiedziałbym, że nie jest łatwo zmienić podstawowy projekt ponad 20-letniej bazy kodu. Zauważ również, że innym problemem związanym z X11 jest to, że większość jego funkcji, takich jak renderowanie czcionek, nie jest dziś używana. Plus X11 będzie nadal potrzebny na serwerach i superkomputerach, przejrzystość sieci jest po prostu zbyt dobra, aby można ją było zrezygnować.
brak

3
@gokcehan wayland nie pomija przejrzystości sieci, to mit. Nie jest jeszcze zaimplementowany , podobnie jak wiele innych rzeczy w Wayland. wayland.freedesktop.org/faq.html#heading_toc_j_8 blog.martin-graesslin.com/blog/2011/08/… itd.
whitequark

8
+! za wzmiankę o braku X11 w Androidzie. Android jest prawdopodobnie najbardziej przekonującym kontr-przykładem argumentu, że „x11 jest natywnym graficznym interfejsem użytkownika”. Wykazanie, że Linux może mieć x11 lub Androida, ponieważ jest to „natywne” GUI, pokazuje początkującym, że Linux jest tak naprawdę tylko jądrem i nie zawsze ma GUI.
Trevor Boyd Smith

„Bycie wieloplatformowym nie ma nic wspólnego z byciem rodzimym” to doskonały punkt. Bardzo często korzystałem z tego wzorca przez lata pracy na wielu platformach. Co najważniejsze, w latach 90-tych sprzedałem platformę, która umożliwia kompilację krzyżową kodu napisanego do frameworku Metrowerks PowerPlant za pomocą MFC pod maską. (Zanim ktokolwiek zacznie szydzić, gdy przejdziemy poniżej makr, MFC jest całkiem rozsądny.) Miałem również wiele zadań związanych z portowaniem, w których albo Win32, albo Mac Toolbox API było specyfikacją, z którą skompilowaliśmy, w razie potrzeby ponownie wdrożoną na innych platformach .
Andy Dent,

23

Ściśle mówiąc, API systemu Linux składa się z wywołań systemowych . Są to wszystkie funkcje jądra, które mogą być wywoływane przez program trybu użytkownika (inny niż jądro). Jest to interfejs bardzo niskiego poziomu, który pozwala programom wykonywać takie czynności, jak otwieranie i odczytywanie plików. Zobacz http://en.wikipedia.org/wiki/System_callOgólne wprowadzenie można .

Prawdziwy system Linux będzie również miał działający na nim cały „stos” innego oprogramowania, aby zapewnić graficzny interfejs użytkownika i inne funkcje. Każdy element tego stosu będzie oferował własne API.


3
Ta odpowiedź została napisana, gdy pytanie brzmiało „Co to jest natywny interfejs API systemu Linux?” (od tego czasu do pytania zostało wstawione „GUI”).
nibot

To wciąż właściwa odpowiedź na pytanie, które obecnie jest niespójne, ponieważ żaden z systemów opartych na Linuksie, w tym GNU i X11, nie jest „natywny” w żadnym sensownym znaczeniu.
Jim Balter

20

Aby wspomóc to, o czym już wspomniano, na blogu znajduje się bardzo dobry przegląd grafiki w systemie Linux: http://blog.mecheye.net/2012/06/the-linux-graphics-stack/

To wyjaśnia X11 / Wayland itp. I jak to wszystko do siebie pasuje. Oprócz tego, co już wspomniano, myślę, że warto dodać trochę o następujących interfejsach API, których można używać do grafiki w systemie Linux:

Mesa - „Mesa to wiele rzeczy, ale jedną z najważniejszych rzeczy, z których słynie najbardziej, jest implementacja OpenGL. Jest to implementacja OpenGL API typu open source”.

Kair - „Cairo to biblioteka rysunków używana albo przez aplikacje takie jak Firefox bezpośrednio, lub przez biblioteki takie jak GTK +, do rysowania kształtów wektorowych”.

DRM (Direct Rendering Manager) - Rozumiem to co najmniej, ale w zasadzie są to sterowniki jądra, które pozwalają pisać grafiki bezpośrednio do bufora ramki bez przechodzenia przez X


habrahabr.ru/post/148954 - (w języku rosyjskim) tłumaczenie tego postu, jeśli ktoś tego potrzebuje
Boris Burkov


5

XWindows jest prawdopodobnie najbliższy temu, co można nazwać „rodzimym” :)


3
czy to to samo co x11?
DavidColson

1
Ale jeśli użyjesz go bezpośrednio, zobaczysz, że to nie jest całkiem interfejs GUI ... Linux po prostu nie ma 1 natywnego interfejsu GUI. Ale prawie wszystkie interfejsy API GUI (przynajmniej te powszechnie używane obecnie na Linuxie) działają na X. Jeśli zaczniesz pisać aplikację przy użyciu zwykłego starego Xa, będzie wyglądać zupełnie nie na miejscu na każdej nowoczesnej dystrybucji, więc chciałbym powiedzmy, że natywny GUI jest zależny od dystrybucji - gtk / gnome dla Ubuntu, kde dla innych.
Axel,

1

W Linuksie najbliższą rzeczą dla Win32 byłby libc, ponieważ wspominasz nie tylko interfejs użytkownika, ale zdarzenia i „inne rzeczy z systemu operacyjnego”


5
libc (biblioteka standardowa C) to interfejs do wywołań systemowych OS. To ostatnie (wywołania systemowe OS) w systemie Linux z grubsza przekłada się na Win32 w systemie Windows. Nie można tak naprawdę (lub wcale?) Programować dla bieżących wersji systemu Windows bez pewnego poziomu przy użyciu Win32 API, ale można programować zarówno dla systemu Windows, jak i Linux bez użycia standardowej biblioteki C odpowiedniego kompilatora, po prostu przez skopiowanie bezpośredniego - kod wywołania systemowego. Nie jest to zalecane i sprawia, że ​​Twój kod jest całkowicie nie do przeniesienia do innych systemów operacyjnych, ale można to zrobić.
CVn

Interfejs użytkownika nie jest częścią libc - o ile nie myślisz o printf / scanf i tym podobnych, jak o interfejsie użytkownika ... libc jest tylko standardową biblioteką C. I tak naprawdę nie jest to interfejs do wywołań systemowych OS. Zapewnia funkcje we / wy plików, zarządzanie pamięcią, przetwarzanie ciągów itp. I wewnętrznie wykorzystuje wywołania systemowe. Do wykonywania wywołań systemowych takich jak ioctlty musisz dołączyć coś z sys/.
Axel,

Pytanie nie zawsze określało „GUI”.
jv110,

Może mówisz o Xlibnie libc.
i486

1

Operacje graficzne jądra Linuxa znajdują się w /include/linux/fb.h jako struct fb_ops. W końcu właśnie takie dodatki, jak X11, Wayland lub DRM, wydają się odnosić. Ponieważ operacje te dotyczą tylko kart graficznych, a nie urządzeń drukowanych w formacie wektorowym lub rastrowym lub urządzeń końcowych zorientowanych na tty, ich użyteczność jako GUI jest ograniczona; po prostu nie jest do końca prawdą, że potrzebujesz tych dodatków, aby uzyskać wyjście graficzne, jeśli nie masz nic przeciwko użyciu jakiegoś asemblera do obejścia syscall w razie potrzeby.


0

GUI to abstrakcja możliwości na wysokim poziomie, więc prawie wszystko, od serwera XOrg po OpenGL, jest przenoszone na wiele platform, w tym na platformę Windows. Ale jeśli przez GUI API masz na myśli * graficzny interfejs API nix, to możesz wędrować po „infrastrukturze bezpośredniego renderowania”.


0

Wayland

Jak możesz usłyszeć, Wayland jest obecnie polecanym wyborem wielu dystrybucji, ponieważ jego protokół jest prostszy niż X.

Zestawy narzędzi Wayland

Zestawy narzędzi lub biblioteki GUI sugerowane przez Wayland to:

  • QT 5
  • GTK +
  • LSD
  • Nieład
  • EFL

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.