리눅스 그래픽 스택이 어떻게 구성되어 있는지 (그림과 함께) 설명할 수 있는 사람이 있나요? 나는 X/GTK/GNOME/KDE 등에 대해 계속 듣고 있지만 그들이 실제로 무엇을 하는지, 그리고 그들이 서로 및 스택의 나머지 부분과 어떻게 상호 작용하는지 전혀 모릅니다. Unity와 Wayland는 어떻게 통합되나요?
답변1
X 윈도우 시스템은 클라이언트-서버 아키텍처를 사용합니다. X 서버는 디스플레이(모니터 + 입력 장치)가 있는 컴퓨터에서 실행되는 반면, X 클라이언트는 다른 컴퓨터에서 실행될 수 있으며 X 프로토콜을 사용하여 X 서버에 연결할 수 있습니다(직접 연결이 아니라 Xlib와 같은 라이브러리를 사용하여 연결). 또는 보다 현대적인 비차단 이벤트 기반 XCB). X 프로토콜은 확장 가능하도록 설계되었으며 많은 확장이 있습니다(참고자료 참조 xdpyinfo(1)
).
X 서버는 창 생성 및 삭제, 그리기 작업 수행(요즘 대부분의 그리기는 클라이언트에서 수행되고 이미지로 서버에 전송됨), 창에 이벤트 전송과 같은 낮은 수준의 작업만 수행합니다. X 서버가 있습니다. 이는 실행 X :1 &
(다른 X 서버에서 아직 사용하지 않는 임의의 번호 사용) 또는 Xephyr :1 &
(Xephyr가 현재 X 서버에 내장된 X 서버를 실행) 실행한 다음 실행 xterm -display :1 &
하고 새 X 서버로 전환하여 수행됩니다(필요할 수 있음). X 인증 설정) xauth(1)
.
보시다시피, X 서버는 거의 수행하지 않으며, 제목 표시줄을 그리지도 않고, 창 최소화/아이콘화를 수행하지 않으며, 창 배치를 관리하지도 않습니다... 물론 명령을 수동으로 실행할 수 있습니다. 와 같은 제어 창 배치 xterm -geometry -0-0
. 그러나 일반적으로 위의 작업을 수행하기 위한 특별한 X 클라이언트가 있습니다. 이 클라이언트는창 관리자. 한 번에 하나의 창 관리자만 활성화할 수 있습니다. 이전 명령을 사용하여 베어 X 서버가 아직 열려 있는 경우 해당 서버에서 창 관리자(예 twm
: metacity
, , kwin
, compiz
, larswm
, pawm
, ...) 를 실행해 볼 수 있습니다.
우리가 말했듯이,툴킷, 예: Xaw, GTK, Qt, FLTK,...
데스크탑 환경은 통합된 사용자 경험을 제공하도록 설계된 프로그램 모음입니다. 따라서 데스크탑 환경은 일반적으로 패널, 응용 프로그램 실행 프로그램, 시스템 트레이, 제어판 및 구성 인프라(설정이 저장되는 위치)를 제공합니다. 유명한 데스크탑 환경으로는 KDE(Qt 툴킷을 사용하여 구축), Gnome(GTK 사용), Enlightenment(자체 툴킷 라이브러리 사용) 등이 있습니다.
일부 최신 데스크탑 효과는 3D 하드웨어를 사용하여 가장 잘 구현됩니다. 그래서 새로운 구성 요소가 나타났습니다.복합 관리자. X 확장(XComposite 확장)은 창 내용을 복합 관리자로 보냅니다. 합성 관리자는 이를 텍스처로 변환하고 OpenGL을 통해 3D 하드웨어를 사용하여 다양한 방법(알파 블렌딩, 3D 프로젝션 등)으로 합성합니다.
얼마 전까지만 해도 X 서버는 하드웨어 장치와 직접 통신했습니다. 장치 처리의 상당 부분이 운영 체제 커널인 DRI(X가 3D 하드웨어에 액세스할 수 있도록 허용)로 이동되었습니다.그리고직접 렌더링 클라이언트), evdev(입력 장치 처리를 위한 통합 인터페이스), KMS(그래픽 모드 설정을 커널로 이동), GEM/TTM(텍스처 메모리 관리).
따라서 장치 처리의 복잡성이 이제 대부분 X 외부에 있으므로 단순화된 윈도우 시스템을 실험하는 것이 더 쉬워졌습니다.웨이랜드복합관리자 개념을 바탕으로 한 윈도우 시스템, 즉 윈도우 시스템이 복합관리자이다. Wayland는 X에서 이동된 장치 처리를 활용하고 렌더링에 OpenGL을 사용합니다.
Unity의 경우 넷북 친화적인 사용자 인터페이스를 갖도록 설계된 데스크톱 환경입니다.
답변2
기존 스택은 3가지 주요 구성 요소로 구축됩니다.
- 디스플레이를 처리하는 X 서버
- 창 관리자는 창을 프레임에 넣고 창 최소화 등을 처리합니다. 이는 Unix의 메커니즘과 정책 분리의 일부입니다.
- stackexchange 웹 사이트 표시와 같은 유용한 작업을 수행하는 클라이언트입니다. X 프로토콜을 직접 사용하거나(자살), xlib 또는 xcb(약간 쉬움)를 사용하거나, GTK+ 또는 QT와 같은 툴킷을 사용할 수 있습니다.
X 아키텍처는 네트워크로 연결되어 있으므로 클라이언트가 별도의 호스트에 있을 수 있고 이 호스트는 서버에 있을 수 있습니다.
여태까지는 그런대로 잘됐다. 하지만 그것은 아주 오래 전의 이미지였습니다. 이제 그래픽을 처리하는 것은 더 이상 CPU가 아니라 GPU입니다. 이를 모델에 통합하고 핵심이 더 많이 작용하는 위치에 배치하려는 다양한 시도가 있었습니다.
첫째, 그래픽 카드 사용에 관해 몇 가지 가정이 이루어집니다. 예를 들어 화면 렌더링을 가정해 보겠습니다. 지금은 Wikipedia에서 이 정보를 찾을 수 없지만 DRI 1에서는 동시에 하나의 응용 프로그램만 OpenGL을 사용한다고 가정합니다(바로 인용할 수는 없지만 WONTFIX 근처에서 해당 버그를 파헤칠 수 있습니다. DRI 2를 조심하세요.
간접 렌더링을 위한 몇 가지 임시 솔루션이 제안되었습니다(복합 WM에 필요함).
- XGL - 카드와 직접 통신하는 애플리케이션을 지원하기 위한 초기 제안
- AIGLX - OpenGL 프로토콜의 네트워크 속성을 사용하기 위한 인정된 제안
- NVidia 독점 솔루션
새로운 아키텍처(DRI 2)에 대한 작업이 시작되었습니다. 여기에는 다음이 포함됩니다.
- 메모리 처리를 위한 커널 지원(GEM/TTM)
- 커널 모드 설정(KMS)을 사용하면 커널의 해상도를 변경할 수 있으므로 전환 시 지연이 방지됩니다.
그럼에도 불구하고 Gallium 드라이버를 커널에 직교적으로 전송하는 작업이 시작되었습니다. Mesa 라이브러리는 원래 CPU에 OpenGL을 구현한 후 GPU 가속을 사용하기 시작했습니다. 이는 항상 OpenGL과 밀접한 관련이 있습니다. OpenGL 3.0에서는 모델이 많이 변경되었으며 라이브러리 재작성은 불가피합니다. 그러나 그들은 코드를 여러 레이어로 분리하여 공통 코드를 추출하고 다양한 3D API를 상위에 구현할 수 있는 저수준 API를 제공하는 기회를 이용했습니다. 예를 들어 Wine은 Gallium과 직접 대화하는 DirectX를 제공할 수 있었습니다. OpenGL API 레이어를 통하지 않고(직접 1-1 호출이 없을 수 있음)
Wayland는 위의 내용이 다소 복잡하고 너무 "역사적"이라고 느끼는 프로젝트입니다. 1984년 디자인은 (비록 고도로 수정되고 적용되었음에도 불구하고) 21세기 초반과 관련이 없습니다. 지지자들에 따르면.
완전한 OpenGL 지원(일부 네트워크 지원에 중요)과 같은 몇 가지 중요한 기능은 여전히 부족하지만 더 많은 유연성과 더 나은 성능을 제공해야 합니다.
데스크탑 환경 및 창 관리자에 대한 추가 정보. 창 관리자는 창의 동작을 담당하는 응용 프로그램입니다. 예를 들어 작업 공간 관리, 제목 표시줄 그리기(창 제목과 창 상단에 최소화/최대화/닫기 버튼이 있는 것)를 그리는 일을 담당합니다. 화면) 등
처음에는 최소한의 WM만 사용되었지만 나중에 사용자는 메뉴 실행, 데스크탑 배경 등을 포함하여 더 많은 기능을 갖춘 버전인 데스크탑 환경을 원하기 시작했습니다. 그러나 데스크탑 환경의 대부분은 통합되어 있기는 하지만 창 관리자가 아닙니다.
얼마 후 OpenGL과 간접 렌더링을 사용하여 작업을 완료하는 복합 WM이 도입되었습니다. 그래픽 효과를 제공할 뿐만 아니라 특정 접근성 기능(예: 돋보기)을 더 쉽게 구현할 수 있습니다.
답변3
첫째, Linux에는 실제로 그래픽 스택이 없습니다. Linux에는 그래픽 디스플레이 기능이 없습니다.
그러나 Linux 응용 프로그램은 그래픽 디스플레이를 사용할 수 있으며 이를 수행할 수 있는 다양한 시스템이 있습니다. 가장 일반적인 것들은 X 윈도우에 구축되었습니다.
X 프로토콜 스택의 중간에 표준 구성 요소로 네트워킹이 있기 때문에 X는 네트워크 프로토콜입니다. 구체적인 사용 사례를 살펴보겠습니다. 베를린의 한 물리학자는 스위스 CERN의 핵 입자 충돌기에서 실험을 수행하려고 합니다. 그는 원격으로 로그인하여 CERN의 슈퍼컴퓨터 어레이 중 하나에서 데이터 분석 프로그램을 실행하여 결과를 화면에 표시했습니다.
베를린의 물리학자는 원격 애플리케이션에 그래픽 디스플레이 기능을 제공하기 위해 일부 X 서버 소프트웨어를 실행하는 X 터미널 장치를 보유하고 있습니다. X-server 소프트웨어에는 특정 하드웨어에 대한 특정 장치 드라이버와 통신하는 프레임 버퍼가 있습니다. X 서버 소프트웨어는 X 프로토콜을 사용합니다. 따라서 레이어는 그래픽 장치->장치 드라이버->프레임 버퍼->X 서버->X 프로토콜일 수 있습니다.
스위스에서는 응용 프로그램이 X 프로토콜을 사용하여 모니터에 연결하고 "직사각형 그리기" 또는 "알파 블렌드"와 같은 그래픽 표시 명령을 보냅니다. 응용 프로그램은 높은 수준의 그래픽 라이브러리를 사용할 수 있으며, 이는 다시 낮은 수준의 라이브러리를 기반으로 할 수 있습니다. 예를 들어, 핵심 그래픽 그리기 명령을 수행하기 위해 Cairo라는 라이브러리를 사용하는 GTK 위에 구축된 WxWidget 툴킷을 사용하여 Python으로 애플리케이션을 작성할 수 있습니다. 카이로에도 OPENGL이 있을 수 있습니다. 레이어는 다음과 같습니다: WxWidgets->GTK->Cairo->X Toolkit->X Protocol. 분명히 사물을 연결하는 것은 중간에 있는 프로토콜이고 Linux도 UNIX 소켓(완전히 내부 데이터 전송)을 지원하므로 원하는 경우 두 가지 유형 모두 동일한 시스템에서 실행될 수 있습니다.
X는 그래픽 디스플레이, 포인팅 장치 및 키보드를 실행하는 X 서버와 같은 기본 프로토콜 및 아키텍처를 나타냅니다.
GTK와 QT는 창, 대화 상자, 버튼 등을 지원하는 두 가지 범용 GUI 라이브러리입니다.
GNOME과 KDE는 그래픽 데스크탑에서 창을 관리하고 유용한 애플릿 및 버튼 표시줄과 같은 기능을 제공하는 두 가지 데스크탑 환경입니다. 또한 응용 프로그램이 다른 원격 컴퓨터에서 실행 중이더라도 여러 응용 프로그램이 X 서버(X 터미널 장치)를 통해 통신할 수 있습니다. 예를 들어 복사하여 붙여넣기는 애플리케이션 간 통신의 한 형태입니다. 그놈은 GTK를 기반으로 구축되었습니다. KDE는 QT를 기반으로 만들어졌습니다. 그리고 KDE 데스크탑에서 GNOME 응용 프로그램을 실행하거나 GNOME 데스크탑에서 KDE 응용 프로그램을 실행할 수 있습니다. 둘 다 동일한 기본 X 프로토콜을 사용하기 때문입니다.
답변4
데스크탑과 일부 서버의 Linux는 여전히 모두 X 및 프레임 버퍼 그래픽입니다. X Window에서는 GTK+와 Qt가 함께 제공됩니다. 예, 둘 다 X 시스템을 사용하고 마찬가지로 X 디스플레이와 해당 셸 등을 사용하는 Gnome, KDE 등 많은 데스크톱 환경이 있습니다.
그런데 Linux conf(http://blip.tv/file/4693305/)에 최근 비디오가 있습니다. Intel의 Keith Packard가 X와 GL*에 관해 흥미로운 이야기를 했습니다.