Linux의 기본 GUI API 란 무엇입니까?


441

나는 이것이 바보 같은 질문으로 나오지 않기를 희망하지만 항상 내가 궁금했던 것입니다. Windows (Win32 API) 및 OS X (Cocoa)에는 창, 이벤트 및 기타 OS 관련 항목을 처리하기위한 자체 API가 있습니다. 나는 리눅스와 동등한 것이 무엇인지에 대한 명확한 대답을 얻지 못했습니다.

일부 사람들은 GTK +라고 말했지만 GTK +는 플랫폼 간이며 어떻게 네이티브가 될 수 있습니까?


46
Joni는 정확하다 : "리눅스에서 그래픽 사용자 인터페이스는 운영 체제의 일부가 아니다 ... X 윈도우 시스템은 [GUI 기능]에 대한 네트워크 프로토콜을 정의한다. Gtk + (Gnome에서 사용) 및 QT와 같은 툴킷 라이브러리 (사용) Xlib 위에 구축). "
paulsm4

33
반대로, David, 이것은 훌륭한 질문입니다
수륙 양용의

7
동의합니다-커널 및 API에 대한 두 개의 성경 인 "Linux Programming API"및 "Systems Programming ... Unix"를 읽었으며이 질문은 나에게 결코 발생하지 않았습니다.
존 험프리-w00te

10
와인을 포함 시키면 Win32 API도 크로스 플랫폼입니다.
Brendan Long

2
BTW Windows에는 WIN32 / WIN64 하위 시스템이있어 'Windows 룩앤필-일명 WIN32'와 동일하게 구현됩니다. 이 서브 시스템은 NT 커널 위에서 작동합니다. 이에 대한 API는 다릅니다. 예를 들어 C :는 NT 커널이 아닌 WIN32 추상화입니다. 일부 윈도우 기능에 대해서도 동일합니다. Windows에는 사용 가능한 Unix 하위 시스템도 있습니다 (X11을 어느 정도 지원함).
Preet Sangha

답변:


603

Linux에서 그래픽 사용자 인터페이스는 운영 체제의 일부가 아닙니다. 대부분의 Linux 데스크톱에서 볼 수있는 그래픽 사용자 인터페이스는 X Window System 이라는 소프트웨어에 의해 제공됩니다. X Window System 은 화면, 키보드 및 포인터 장치를 처리하는 장치 독립적 인 방법을 정의합니다.

X Window는 통신을위한 네트워크 프로토콜을 정의하며이 프로토콜을 "말하는"방법을 알고있는 모든 프로그램이이를 사용할 수 있습니다. 라는 C 라이브러리가 Xlib를 Xlib를 일종의 그래서, 쉽게이 프로토콜을 사용할 수있게 기본 GUI API는. Xlib가 X Window 서버에 액세스하는 유일한 방법은 아닙니다. 또한이 XCB는 .

Xlib 기반으로 구축 된 GTK + ( GNOME 사용 ) 및 Qt ( KDE 사용 )와 같은 툴킷 라이브러리 는 프로그래밍하기 쉬우므로 사용됩니다. 예를 들어 응용 프로그램에서 일관된 모양과 느낌을 제공하고 드래그 앤 드롭을보다 쉽게 ​​사용할 수 있도록하며 최신 데스크톱 환경에 표준 구성 요소를 제공하는 등의 작업을 수행합니다.

X가 화면에서 내부적으로 그리는 방법은 구현에 따라 다릅니다. X.org 에는 장치 독립 부품과 장치 종속 부품이 있습니다. 전자는 윈도우와 같은 화면 리소스를 관리하고 후자는 그래픽 카드 드라이버 (일반적으로 커널 모듈)와 통신합니다. 통신은 직접 메모리 액세스 또는 커널에 대한 시스템 호출 을 통해 발생할 수 있습니다 . 드라이버는 명령을 카드의 하드웨어가 이해하는 형태로 변환합니다.

2013 년 현재 Wayland 라는 새로운 창 시스템 을 사용할 수있게되었으며 많은 배포판에서 일정이 명확하지 않지만 일정 시점에 마이그레이션 할 것이라고 발표했습니다. 이 시스템은 OpenGL / ES API를 기반으로하므로 향후 OpenGL은 Linux에서 "기본 GUI API"가됩니다. GTK + 및 QT를 Wayland로 포팅하기위한 작업이 진행 중이므로 현재 널리 사용되는 애플리케이션 및 데스크탑 시스템은 최소한의 변경 만 필요합니다. 이식 할 수없는 응용 프로그램은 OS X이 Xquartz를 통해 X11 응용 프로그램을 지원하는 것처럼 X11 서버를 통해 지원됩니다. GTK + 포트는 1 년 안에 완료 될 것으로 예상 되며 Qt 5는 이미 Wayland 지원을 완벽하게 지원합니다.

문제를 더 복잡하게 만들기 위해 우분투는 Wayland에서 인식하는 문제 때문에 Mir 라는 새로운 시스템을 개발한다고 발표했습니다 . 이 윈도우 시스템은 OpenGL / ES API를 기반으로합니다.


95
+1. 운영 체제에는 언제 GUI가 있어야하므로 OS가 아닌 경우에는 그렇지 않습니까? 무의미한 말.
David Hammen

42
Windows조차도 원래는 DOS에서 실행되는 프로그램 일뿐입니다.
dan04

2
+1 @DavidHammen 그게 저에게 직접 왔는지 확실하지 않지만, 100 % 정확합니다. 내 용어는 정확히 정확하지 않았습니다. 내가 말해야 할 것은 사용하기 쉬운 모든 추가 구성 요소가있는 OS를 일반적으로 생각할 수있는 전체 운영 체제가 아니라 다른 공급 업체의 구성 요소 등이 있다는 것입니다.
Chris

3
@ChrisThompson-흠 ... 어쩌면 너무 오래되었지만 GUI를 OS의 핵심 부분으로 생각한 적이 없습니다. 그리고 GUI가없는 OS는 단순히 "다른 벤더의 구성 요소 등"으로 생각한 적이 없습니다. 하지만, 이봐 어쩌면 일이 내가 OS : 구성 무엇 내 의견 형성 이후에 이사
조지 호킨스를

2
답변이 커뮤니티 위키 인 경우가 아니라면 문법 / 서식을 개선하거나 링크를 추가하는 것 외에는 내용을 변경하지 않습니다. 컨텐츠를 수정하거나 업데이트해야하는 경우 컨텐츠에 대한 평판이있는 사람의 책임입니다. 그러나 나는 그들에게 논평의 호의를 베풀어 무언가를 수정하거나 업데이트해야 한다고 생각 하게합니다.
정직한 아베

84

Linux는 전체 운영 체제가 아닌 커널입니다. 윈도 잉을 제공하기 위해 Linux 위에서 실행되는 서로 다른 윈도 잉 시스템과 GUI가 있습니다. 일반적으로 X11 은 Linux 배포판에서 사용하는 윈도우 시스템입니다.


6
그들은 그 위에 지어졌습니다. X11은 서버이고 KDE, Gnome 등은 데스크탑 관리자로서 고급 API, 공통 창 레이아웃 등을 제공합니다.
Mark

7
X11은이 모든 것들을 처리하고 화면으로 그리기 등을 처리하고 그래픽 드라이버와 통신하는 실제 저수준 레이어입니다. 그놈 / KDE는 X11을 제어합니다. 그것은 높은 수준에 있으며 10 억 개의 세부 사항을 무시합니다.
slugonamission

3
감사. 또 다른 질문 : Wikipedia는 X11은 "일반화 된 명령 세트를 사용하기 위해 소프트웨어가 작성된 하드웨어 추상화 계층을 생성하여 X를 구현하는 모든 컴퓨터에서 장치의 독립성과 프로그램의 재사용을 가능하게한다"고 설명했다. 내 질문은 : X11이 하드웨어 상호 작용 (HAL)을 제공하는 이유는 무엇입니까? Linux 커널이 제공해야하며 X11이 커널 위에서 작동해야합니까? 다시 말해, 커널이 프록시 여야 할 때 X11이 하드웨어 장치에 도달하는 이유는 무엇입니까?
양서류

1
내가 생각하는 이 사건에서 HAL잘못 사용되는 용어입니다. 그들이 말하는 것은 X11은 시스템 독립적 인 창 표시 방법을 제공한다는 것입니다. Darwin 용 X11 버전 (Mac OS-실제로 Mountain Lion에서는 더 복잡 해짐), MS Windows 및 Linux가 있습니다.
Chris Thompson

4
X11은 네트워크 프로토콜입니다. 추상화는 일부 네트워킹 장비를 통해 플랫폼 B의 X11 클라이언트 (윈도우, 앱 등)를 표시 할 수있는 플랫폼 A에 프로그램을 작성하는 것을 포함합니다. 앱은 로컬, 원격, 중첩 서버, VNC 등을 수행하는 가상 서버에서 로컬로 실행될 수 있습니다. 로컬 플랫폼의 하드웨어 추상화는이 기능의 부작용이지만 X11과 X11 사이의 경계를 흐리게합니다. 커널 (평균 유닉스 시스템에서 하드웨어 추상화를하는 것).
Alexios

59

Wayland 는 또한 주로 "미래 X11 킬러"라고도 불립니다.

또한 Android 및 일부 다른 모바일 운영 체제에는 Linux 커널이 있지만 X11이 포함되어 있지 않으므로 X11이 모든 Linux 시스템에 고유하지는 않습니다.

크로스 플랫폼 인 것은 네이티브 인 것과 아무 관련이 없습니다. Cocoa는 GNUStep을 통해 다른 플랫폼으로 포팅 되었지만 여전히 OS X / macOS에 고유합니다.


2
Wayland의 상위 레벨 아키텍처 다이어그램은 X 다이어그램의 "Compositor"및 "Server"가 Wayland 다이어그램에서 병합된다는 점을 제외하면 X와 동일합니다. 부족한 것은 왜이 통합이 X로 작동 할 수 없는지에 대한 그럴듯한 설명입니다.
Kaz

1
글쎄, 저는 20 년이 넘은 코드베이스의 기본 디자인을 변경하는 것이 쉽지 않다고 말합니다. 또한 X11의 또 다른 문제는 오늘날 글꼴 렌더링과 같은 대부분의 기능이 사용되고 있지 않다는 것입니다. 게다가 X11은 여전히 ​​서버와 슈퍼 컴퓨터에 필요할 것입니다. 네트워크 투명성은 포기하기에는 너무 좋습니다.
none

3
@gokcehan wayland는 네트워크 투명성을 생략하지 않습니다. 그것은 신화입니다. Wayland의 다른 많은 것들과 마찬가지로 아직 구현 되지 않았습니다 . wayland.freedesktop.org/faq.html#heading_toc_j_8 blog.martin-graesslin.com/blog/2011/08/...
whitequark

8
+! 안드로이드의 X11 부족에 대해 언급했습니다. 안드로이드는 아마도 "x11은 네이티브 리눅스 GUI"라는 주장에 대한 가장 설득력있는 예일 것이다. "기본"GUI이므로 Linux에 x11 또는 Android가있을 수 있음을 시연하면 초보자에게는 Linux가 실제로는 커널이며 항상 GUI가있는 것은 아니라는 것을 알 수 있습니다.
Trevor Boyd Smith

"크로스 플랫폼이되는 것은 네이티브라는 것과 아무 관련이 없습니다"는 훌륭한 지적입니다. 나는 수년간의 크로스 플랫폼 포팅에서이 패턴을 매우 자주 사용했습니다. 특히 90 년대에는 Metrowerks PowerPlant 프레임 워크에 작성된 코드를 크로스 컴파일 할 수있는 프레임 워크를 판매했습니다. (누군가가 놀래기 전에 일단 매크로 아래에 도달하면 MFC가 상당히 합리적입니다.) 또한 Win32 또는 Mac Toolbox API가 다른 플랫폼에서 필요에 따라 컴파일하고 다시 구현 한 사양 인 여러 포팅 작업을 수행했습니다. .
Andy Dent

23

엄밀히 말하면 Linux의 API는 시스템 호출 로 구성됩니다 . 사용자 모드 (비 커널) 프로그램에서 호출 할 수있는 모든 커널 기능입니다. 프로그램이 파일 열기 및 읽기와 같은 작업을 수행 할 수 있도록하는 매우 낮은 수준의 인터페이스입니다. 일반적인 소개는 http://en.wikipedia.org/wiki/System_call 을 참조하십시오 .

실제 Linux 시스템에는 그래픽 사용자 인터페이스 및 기타 기능을 제공하기 위해 실행중인 다른 소프트웨어의 전체 "스택"이 있습니다. 이 스택의 각 요소는 자체 API를 제공합니다.


3
이 답변은 "Linux의 기본 API는 무엇입니까?"라는 질문에 작성되었습니다. (그 이후로 "GUI"가 질문에 삽입되었습니다).
nibot

그건 아직 GNU와 X11을 포함하여 리눅스의 상단에 앉아 시스템의 어떤 것도 의미있는 의미에서 "기본"없기 때문에 지금 모순 질문이 무엇인지에 대한 정답.
Jim Balter

20

이미 언급 된 내용을 돕기 위해이 블로그에는 Linux 그래픽 스택에 대한 매우 훌륭한 개요가 있습니다. http://blog.mecheye.net/2012/06/the-linux-graphics-stack/

여기에서는 X11 / Wayland 등을 설명하고 모두 잘 어울립니다. 이미 언급 한 것 외에도 Linux에서 그래픽에 사용할 수있는 다음 API에 대해 조금 추가 할 가치가 있다고 생각합니다.

Mesa- "Mesa는 많은 것들이지만, 가장 유명한 것은 OpenGL 구현입니다. OpenGL API의 오픈 소스 구현입니다."

카이로 - "카이로는 벡터 모양을 그려, 직접, 또는 GTK +와 같은 라이브러리를 파이어 폭스와 같은 응용 프로그램 중 하나를 사용하는 도면 라이브러리입니다."

DRM (Direct Rendering Manager) -나는 이것을 최소한 이해하지만 기본적으로 X를 거치지 않고 프레임 버퍼에 직접 그래픽을 쓸 수있는 커널 드라이버를 이해합니다.


habrahabr.ru/post/148954- (필요한 경우) 해당 게시물의 번역
Boris Burkov


5

XWindows는 아마도 'native'라고 불리는 것에 가장 가깝습니다. :)


3
x11과 같은 것입니까?
DavidColson

1
그러나 직접 사용하면 GUI API가 아니라는 것을 알 수 있습니다 ... Linux에는 1 개의 기본 GUI API가 없습니다. 그러나 거의 모든 GUI API (적어도 오늘날 데스크탑 리눅스에서 공통적 인 것)는 X 위에서 실행됩니다. 오래된 일반 X를 사용하여 응용 프로그램을 작성하기 시작하면 최신 배포판에서 완전히 다르게 보일 것입니다. 네이티브 GUI는 배포에 의존적입니다-우분투의 경우 gtk / gnome, 다른 사람의 경우 kde입니다.
Axel

1

리눅스에서 Win32에 가장 가까운 것은 UI뿐만 아니라 이벤트와 "기타 OS"를 언급했듯이 libc입니다.


5
libc (C 표준 라이브러리)는 OS 시스템 호출에 대한 인터페이스입니다. Linux의 후자 (OS 시스템 호출)는 Windows의 Win32로 대략 변환됩니다. Win32 API를 사용하여 일정 수준이 없으면 현재 버전의 Windows에 대한 프로그램을 실제로 (또는 전혀?) 프로그래밍 할 수는 없지만 직접 컴파일러를 복제하여 각 컴파일러의 표준 C 라이브러리를 사용하지 않고 Windows와 Linux 모두에 대해 프로그래밍 할 수 있습니다 to-syscalls 코드. 권장하지 않으며 다른 OS에서 코드를 완전히 이식 할 수 없지만 가능합니다.
CVn

UI는 libc의 일부가 아닙니다. printf / scanf 등을 UI로 생각하지 않는 한 libc는 C 표준 라이브러리입니다. 그리고 그것은 실제로 OS 시스템 호출에 대한 인터페이스가 아닙니다. 파일 입출력, 메모리 관리, 문자열 처리 등의 기능을 제공하며 내부적으로 시스템 호출을 사용합니다. ioctl자신 과 같은 시스템 호출 을하려면에서 무언가를 포함해야합니다 sys/.
Axel

질문은 항상 "GUI"를 지정하지 않았습니다.
jv110

아마 당신에 대해 이야기 Xlib하지 않을 수도 있습니다 libc.
i486

1

리눅스 커널 그래픽 작업은 struct fb_ops와 같이 /include/linux/fb.h에 있습니다. 결국 이것은 X11, Wayland 또는 DRM과 같은 애드온이 참조하는 것으로 보입니다. 이러한 작업은 벡터 또는 래스터 하드 카피 또는 tty 지향 터미널 장치가 아닌 비디오 카드에만 해당되므로 GUI로서의 유용성은 제한됩니다. 필요에 따라 syscall을 우회하기 위해 어셈블러를 사용하는 것이 마음에 들지 않으면 그래픽 출력을 얻기 위해 추가 기능이 필요하다는 것은 전적으로 사실이 아닙니다.


0

GUI는 높은 수준의 기능 추상화이므로 XOrg 서버에서 OpenGL에 이르는 거의 모든 것이 Windows 플랫폼을 포함하여 크로스 플랫폼으로 포팅됩니다. 그러나 GUI API로 * nix 그래픽스 API를 의미하는 경우 "직접 렌더링 인프라"를 방황 할 수 있습니다.


0

웨이 랜드

알다시피, wayland 는 프로토콜이 X보다 단순하기 때문에 요즘 많은 배포판의 주요 선택입니다.

웨이 랜드 툴킷

웨이 랜드가 제안 하는 툴킷 또는 GUI 라이브러리 는 다음과 같습니다.

  • QT 5
  • GTK +
  • 엘에스디
  • 어지럽게 흩어져 있는 것
  • EFL

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.