Co to jest natywne GUI API Linuksa?

Mam nadzieję, że to nie jest głupie pytanie, ale zawsze się nad tym zastanawiałem. Zarówno WINDOWS (Win32 API), jak i OS X (Cocoa) mają własne interfejsy API do obsługi systemu windows, zdarzeń i innych elementów systemu operacyjnego. Nigdy tak naprawdę nie dostałem jasnej odpowiedzi co to jest odpowiednik Linuksa.

Słyszałem, że niektórzy mówią GTK+, ale GTK + jest cross platform, jak może być natywne?

Author: BoltClock, 2012-10-04

11 answers

W Linuksie graficzny interfejs użytkownika nie jest częścią systemu operacyjnego. Graficzny interfejs użytkownika na większości komputerów Linux jest dostarczany przez oprogramowanie o nazwie X Window System, które definiuje niezależny od urządzenia sposób radzenia sobie z ekranami, klawiaturami i urządzeniami wskazującymi.

X Window definiuje protokół sieciowy do komunikacji i każdy program, który wie jak "mówić" tym protokołem może go używać. Istnieje biblioteka C o nazwie Xlib , która ułatwia aby używać tego protokołu, Xlib jest rodzajem natywnego interfejsu GUI API. Xlib nie jest jedynym sposobem uzyskania dostępu do serwera X Window; istnieje również 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 zaprogramowania. Na przykład zapewniają spójny wygląd wszystkich aplikacji, ułatwiają korzystanie z funkcji "przeciągnij i upuść", zapewniają komponenty standardowe nowoczesne środowisko graficzne i tak dalej.

Sposób rysowania X na ekranie zależy od implementacji. X.org posiada część niezależną od urządzenia i część zależną od urządzenia. Pierwszy zarządza zasobami ekranu, takimi jak windows, podczas gdy drugi komunikuje się ze sterownikiem karty graficznej, Zwykle modułem jądra. Komunikacja może odbywać się poprzez bezpośredni dostęp do pamięci lub poprzez wywołania systemowe do jądra. Sterownik tłumaczy polecenia w postaci że sprzęt na karcie rozumie.

Od 2013 roku nowy system okien o nazwie Wayland zaczyna być użyteczny, a wiele dystrybucji twierdzi, że w pewnym momencie do niego przeniosą, choć wciąż nie ma jasnego harmonogramu. System ten bazuje na OpenGL / ES API, co oznacza, że w przyszłości OpenGL będzie "natywnym GUI API" w Linuksie. Trwają prace nad portowaniem GTK + i QT do Wayland, tak aby obecne popularne aplikacje i systemy desktopowe wymagały minimalnego zmiany. 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. Oczekuje się, że port GTK+ zostanie ukończony w ciągu roku , Podczas gdy Qt 5 ma już pełne wsparcie dla Wayland.

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

 559
Author: Joni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-14 14:40:10

Linux jest jądrem, a nie pełnym systemem operacyjnym. Istnieją różne systemy Windows i gui, które działają na Linuksie, aby zapewnić windowing. Zazwyczaj X11 jest systemem okienkowym używanym przez dystrybucje Linuksa.

 79
Author: Chris Thompson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-03 21:26:28

Wayland jest również wart wspomnienia, ponieważ jest określany jako "przyszły zabójca X11".

Zauważ również, ż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 cross-platform nie ma nic wspólnego z byciem natywnym. Cocoa został również przeniesiony na inne platformy za pomocą GNUStep , ale nadal jest natywny dla OS X / macOS.

 57
Author: none,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-26 23:13:55

Ściśle mówiąc, API Linuksa składa się z jego wywołań systemowych. Są to wszystkie funkcje jądra, które mogą być wywoływane przez program w trybie użytkownika (nie będący jądrem). Jest to bardzo niskopoziomowy interfejs, który pozwala programom robić takie rzeczy, jak otwieranie i odczytywanie plików. Zobacz http://en.wikipedia.org/wiki/System_call na ogólne wprowadzenie.

Prawdziwy system Linux będzie również miał cały "stos" innego oprogramowania na nim, w celu zapewnienia graficznego użytkownika interfejs i inne funkcje. Każdy element tego stosu będzie oferował własne API.

 22
Author: nibot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-03 21:37:37

Na pomoc w tym, co już zostało wspomniane, na tym blogu znajduje się bardzo dobry przegląd stosu graficznego Linuksa: 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ż zostało wspomniane, myślę, że warto dodać trochę o następujących API, których można użyć do grafiki w Linuksie:

Mesa - " Mesa jest wiele rzeczy, ale jedną z głównych rzeczy, które zapewnia, że najbardziej znany jest z implementacji OpenGL. Jest to implementacja open-source API OpenGL."

Cairo - "Cairo jest biblioteką do rysowania używaną bezpośrednio przez aplikacje takie jak Firefox lub poprzez biblioteki takie jak GTK+ do rysowania kształtów wektorowych."

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

 18
Author: Matt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-04 03:40:47

Przypuszczam, że pytanie jest bardziej podobne do "co to jest natywne GUI API Linuksa".

W większości przypadków X (aka X11) będzie używany do tego: http://en.wikipedia.org/wiki/X_Window_System .

Dokumentacja API znajduje się tutaj

 9
Author: Mark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-04 09:23:03

XWindows jest chyba najbliżej tego, co można nazwać "natywnym":)

 5
Author: Sergey Sirotkin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-03 21:26:48

Najbliższą rzeczą do Win32 w Linuksie byłaby libc, ponieważ wspominasz nie tylko o UI, ale także o zdarzeniach i"innych rzeczach z systemem operacyjnym"

 1
Author: Midhat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-04 00:54:31

GUI jest abstrakcją wysokiego poziomu możliwości, więc prawie wszystko, od serwera XOrg po OpenGL, jest przeportowane między platformami, w tym dla platformy Windows. Ale jeśli przez GUI API masz na myśli *Nix graphics API to możesz wędrować po "Direct Rendering Infrastructure".

 0
Author: Chawathe Vipul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-29 09:37:39

Operacje graficzne jądra Linuksa znajdują się w /include/linux/fb.h jako struct fb_ops. Ostatecznie do tego odnoszą się dodatki takie jak X11, Wayland lub DRM. Ponieważ operacje te dotyczą tylko kart graficznych, a nie wektorowych lub rastrowych urządzeń końcowych zorientowanych na TTY, ich przydatność jako GUI jest ograniczona; po prostu nie do końca prawda, że potrzebujesz tych dodatków, aby uzyskać wyjście graficzne, jeśli nie masz nic przeciwko użyciu jakiegoś asemblera do ominięcia syscall w razie potrzeby.

 0
Author: M. Ziegast,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-27 01:49:06

Wayland

As you might hear, wayland jest obecnie najczęściej wybieranym wyborem wielu dystrybucji, ponieważ jego protokół jest prostszy niż X.

Zestawy narzędzi wayland

Zestawy narzędzi lub biblioteki gui, które Wayland sugeruje to:

  • QT 5
  • GTK+
  • LSD
  • Clutter
  • EFL
 0
Author: Amir Forsati,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-04 07:39:38