Programing

Linux의 기본 GUI API란?

c10106 2022. 5. 25. 20:51
반응형

Linux의 기본 GUI API란?

윈도(Win32 API)와 OS X(Cocoa)는 모두 창, 이벤트, 기타 OS 사물을 처리할 수 있는 자체 API를 가지고 있다.리눅스의 등가물이 무엇인지에 대한 명확한 답을 들은 적이 없다.

몇몇 사람들은 GTK+라고 하지만 GTK+는 크로스 플랫폼이라고 말한다.어떻게 토착이 될 수 있을까?

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

X Window는 통신을 위한 네트워크 프로토콜과 이 프로토콜이 그것을 사용할 수 있는 "말하는" 방법을 아는 모든 프로그램을 정의한다.Xlib라는 C 라이브러리가 있어서 Xlib는 이 프로토콜을 더 쉽게 사용할 수 있기 때문에 Xlib는 원래 GUI API의 일종이다. Xlib는 X Window 서버에 접속하는 유일한 방법이 아니다. XCB도 있다.

Xlib 위에 빌드된 GTK+(GNOME에서 사용), Qt(KDE에서 사용)와 같은 툴킷 라이브러리는 프로그래밍이 용이하기 때문에 사용된다.예를 들어, 드래그 앤 드롭을 쉽게 사용할 수 있도록 하고, 최신 데스크톱 환경에 구성요소를 표준으로 제공하는 등, 애플리케이션 전반에 걸쳐 일관된 모양과 느낌을 제공한다.

X가 화면에 어떻게 그리는지는 구현에 달려 있다.X.org에는 기기 독립 부품과 기기 종속 부품이 있다.전자는 윈도우와 같은 화면 자원을 관리하고 후자는 그래픽 카드 드라이버, 즉 보통 커널 모듈과 통신한다.통신은 직접 메모리 액세스 또는 커널에 대한 시스템 호출을 통해 이루어질 수 있다.드라이버는 명령을 카드의 하드웨어가 이해하는 형태로 변환한다.

2013년 현재 웨이랜드라는 새로운 창구 시스템이 사용 가능해지기 시작하고 있으며, 많은 배포판에서는 아직 명확한 일정은 없지만 언젠가는 그 창구로 이전할 것이라고 말하고 있다.이 시스템은 OpenGL/ES API를 기반으로 하며, 이는 향후 OpenGL이 Linux에서 "원래 GUI API"가 될 것임을 의미한다.현재 인기 있는 애플리케이션과 데스크탑 시스템에 최소한의 변화가 필요하도록 GTK+와 QT를 Wayland로 포팅하는 작업이 진행되고 있다.포팅할 수 없는 애플리케이션은 X11 서버를 통해 지원될 것이다. 마치 OS X가 Xquartz를 통해 X11 앱을 지원하는 것처럼 말이다.GTK+ 포트는 1년 안에 완료될 것으로 예상되며, Qt 5는 이미 웨이랜드 지원을 완료했다.

문제를 더욱 복잡하게 만들기 위해, 우분투는 그들이 웨이랜드에서 인식하고 있는 문제들 때문에 미르라고 불리는 새로운 시스템을 개발하고 있다고 발표했다.이 윈도 시스템도 OpenGL/ES API를 기반으로 한다.

리눅스는 커널이지 완전한 운영체제가 아니다.리눅스 위에서도 윈도잉을 제공하기 위해 실행되는 윈도잉 시스템과 구이가 다르다.전형적으로 X11은 리눅스 디스트로가 사용하는 윈도우 시스템이다.

웨이랜드 역시 대부분 '미래형 X11 킬러'로 언급되고 있어 언급할 만하다.

또한 안드로이드와 일부 다른 모바일 운영체제는 리눅스 커널을 가지고 있음에도 불구하고 X11을 포함하지 않기 때문에 그런 의미에서 X11은 모든 리눅스 시스템에 고유하지는 않다.

크로스 플랫폼이 되는 것은 토착화 되는 것과 아무 상관이 없다.코코아는 GNUStep을 통해 다른 플랫폼에 포팅되었지만 여전히 OS X/macOS가 원산지다.

엄밀히 말하면, 리눅스의 API는 그것의 시스템 호출로 구성된다.사용자 모드(비커널) 프로그램으로 호출할 수 있는 커널 함수는 모두 이것들이다.이것은 프로그램들이 파일을 열고 읽는 것과 같은 것들을 할 수 있게 해주는 매우 낮은 수준의 인터페이스다.일반적인 설명은 http://en.wikipedia.org/wiki/System_call을 참조하십시오.

또한 실제 리눅스 시스템에는 그래픽 사용자 인터페이스와 기타 기능을 제공하기 위해 전체 "스택"의 다른 소프트웨어가 실행될 것이다.이 스택의 각 요소는 자체 API를 제공할 것이다.

나는 그 질문이 "리눅스의 기본 GUI API란 무엇인가"에 더 가깝다고 생각한다.

대부분의 경우 X(일명 X11)는 http://en.wikipedia.org/wiki/X_Window_System에 사용될 것이다.

API 설명서는 여기에서 찾을 수 있다.

웨이랜드

들으실지 모르지만, 웨이랜드는 요즘 많은 디스트로들의 특징적인 선택이다. 왜냐하면 그곳의 프로토콜은 X보다 간단하기 때문이다.

길바닥의 공구키트

Wayland가 제안하는 툴킷 또는 구이 라이브러리는 다음과 같다.

  • QT 5
  • GTK+
  • LSD
  • 클루터
  • EFL

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

이것은 X11/Wayland 등과 그것이 어떻게 조화를 이루는지 설명한다.이미 언급된 것 외에도 Linux에서 그래픽에 사용할 수 있는 다음 API에 대해 조금 더 추가할 가치가 있다고 생각한다.

메사 - "메사는 여러 가지가 있지만, 가장 유명한 것 중 하나는 OpenGL 구현이다.오픈GL API의 오픈소스 구현이라고 설명했다.

카이로 - "카이로(cairo)는 파이어폭스와 같은 응용 프로그램이 직접 또는 GTK+와 같은 라이브러리를 통해 벡터 모양을 그리기 위해 사용하는 도면 라이브러리"라고 말했다.

DRM(Direct Rendering Manager) - 기본적으로 X를 거치지 않고 프레임 버퍼에 그래픽을 직접 쓸 수 있는 커널 드라이버

XWindows는 아마도 'native'라고 불릴 수 있는 것에 가장 가깝다 :)

리눅스 커널 그래픽 작업은 /inclux/linux/fb.h에서 구조체 fb_ops로 수행된다.결국 이것이 X11, 웨이랜드 또는 DRM과 같은 추가 기능들이 참조하는 것으로 보이는 것이다.이러한 작업은 벡터 또는 래스터 하드카피 또는 tty 지향 터미널 장치가 아닌 비디오 카드에만 해당되므로 GUI로서의 유용성은 제한적이다. 필요 시 syscall을 우회하기 위해 일부 조립기를 사용하는 것이 괜찮다면 그래픽 출력을 얻기 위해 이러한 추가 기능이 필요한 것은 아니다.

Linux에서 Win32와 가장 가까운 것은 libc일 것이다. UI뿐만 아니라 이벤트와 "기타 os물"도 언급하고 있다.

GUI는 높은 수준의 기능 추상화여서 XOrg 서버에서 OpenGL에 이르는 거의 모든 것이 Windows 플랫폼을 포함하여 크로스 플랫폼으로 포팅되어 있다.그러나 GUI API를 통해 *nix 그래픽 API를 사용한다면 "Direct Rendering Infrastructure"(직접 렌더링 인프라)를 둘러보고 있을 수 있다.

참조URL: https://stackoverflow.com/questions/12717138/what-is-linux-s-native-gui-api

반응형