Windows에서 Linux로 이동하는 Windows 개발자 (Win32api)입니다. 리눅스를 설치하는 동안 X11, X Window System, X Server, Xorg, Xfree86에 대해 알아야 할 것이 많습니다.
창문에서 그런 것들을 어떻게 알지 못합니까? 이것에 관한 위키 기사는 나를 두려워합니다. 아무도 이것들을 설명 할 수 있습니까? 그들은 어떻게 작동합니까? 왜 리눅스가 아닌 Windows에서 그렇게 복잡합니까?
좋은 참고 자료도 인정됩니다.
추신 : 나는 내부를 알고 싶어하고, 깊이 들어가는 것을 망설이지 마십시오.
답변
Windows는 단일 API / 프레임 워크 단일 구현 위에 단일 데스크탑 단일 구현을 제공합니다.
유닉스 시스템에서는 여러 구현 (Xorg, Xfree86)이 존재하는 API / 프레임 워크 (X11 / X Window System)를 얻을 수 있으며 그 위에 다양한 “상위”API / 프레임 워크 (GTK +, Qt, … ) 원시 X11은 매우 원시적이기 때문에 다양한 데스크탑 (Gnome, KDE 등 …)을 다른 사람들이 수행합니다.
또한 X11 시스템은 원격 GUI를 염두에두고 처음부터 설계되었습니다. 즉, 원격으로 실행중인 응용 프로그램의 GUI를 표시하는 lokal 시스템은 “X Server”및 “X Client”의 개념을 소개합니다.
그런 다음 초보자에게 잘못된 느낌을주는 느낌이 있습니다. 로컬 시스템에서 “GUI 표시”서비스를 제공하는 “X 서버”를 실행하고 원격 시스템은 서비스를 사용하는 “X 클라이언트”입니다. 컴퓨터에 GUI를 표시합니다.
그것은 빠른 개요입니다. 일단 정리하면 주제에 대한 기사 / 포럼 게시물을 이해하는 것이 훨씬 쉬워집니다.
편집 : OP의 두 가지 의견에 답하십시오.
예, “X11″은 단지 프로토콜이며 Xorg / XFree86은 두 가지 구현입니다. 기본적으로 X11은 선과 점을 그리는 것만으로 GUI를 수행하려는 경우에는 크게 유용하지 않습니다.
X11 프로토콜 외에도 사람들은 많은 것을 구현했으며, Windows와 1 : 1 비교를하는 것은 매우 어렵습니다. 또한 GUI 유형 개발자가 아닙니다. 즉, 두 시스템에 대한 실제 경험 이 최소화됩니다.
맨 아래에있는 “창 관리자”는 창 (경계 처리, 닫기 / 최소화 / 최대화 버튼, 크기 조정 등)을 제공하고 창 내의 “부동산”을 위젯 도구 세트에 제공합니다. 많은 창 관리자가 있으며, 일부는 다른 시스템 (Windows, MacOS, AmigaOS 등)을 모방 한 것으로 대부분 나머지 시스템과 투명하게 호환됩니다.
“위젯 툴셋”은 GUI를 구축 할 수있는 버튼, 슬라이더, 텍스트 필드 등을 제공합니다. 이것은 당신이 (애플리케이션 개발자로서) 실제로 API를 “보고”얻는 것과 어플리케이션의 “모양과 느낌”을 결정하는 것입니다.
“데스크톱”은 일정한 모양과 느낌을 제공하기 위해 특정 위젯 도구 세트 / 창 관리자 조합 위에 여러 응용 프로그램을 빌드합니다. 실제로 데스크톱 자체를 개발하지 않는 한 이러한 문제를 신경 쓸 필요가 없습니다.
데스크탑 “Gnome”은 창 관리자 “Metacity”위에 위젯 도구 세트 “GTK +”를 사용합니다.
데스크탑 “KDE”는 창 관리자 “KWin”위에 위젯 도구 세트 “Qt”를 사용합니다.
특히 GTK +와 Qt의 두 가지가 단순한 “위젯 툴셋”을 넘어서 “애플리케이션 개발 프레임 워크”로 발전한 것에 주목하십시오. Linux 용 GUI 앱을 개발하려면 효과적으로 사용할 두 가지 중 하나를 선택해야합니다. 더 큰 “경량”앱 (큰 라이브러리 종속성 필요 없음)을 원할 경우 더 많은 선택 사항이 있지만 오늘날 대부분의 시스템에는 GTK + 및 Qt 라이브러리가 이미 설치되어 있습니다.
Gnome 데스크톱에서 Qt 앱을 사용하거나 KDE 데스크톱에서 GTK + 앱을 사용하는 것이 가능하므로 (항상 그런 것은 아님) 호환성에 대해 걱정할 필요가 없습니다. 비슷한 기능을 가진 두 개의 앱 중에서 선택하면 사람들은 일반적으로 선택한 데스크톱의 “네이티브”위젯을 사용하는 앱을 선호하지만 걱정하지 않아도됩니다.
“위젯 툴셋”선택에있어 더욱 중요한 다른 요점 : 라이센스 용어, 선택한 언어 지원, 플랫폼 간 호환성.
Post Scriptum : 몇 년 후, 저는 저만의 GUI 프로그래밍 경험을 선택했습니다. “가는 길”조언을 찾고 있다면 위의 설명에서 한 가지가 빠져 있다는 것을 깨달았습니다 : wxWidgets . 기본적으로 사용하는 모든 것을 기반 으로 하는 프레임 워크로 성능을 저하 시키거나 라이센스가 부여 된 문자열을 첨부하지 않고도 이식성이 뛰어난 GUI 개발이 가능 합니다. C ++ API. 그것이 내 GUI 요구를 위해 선택한 길이며, 완전성을 위해 언급 되어야한다고 느꼈습니다 .
답변
http://en.wikipedia.org/wiki/X_Window_System에서 제공하는 설명을 이해하기가 왜 어려운지 이해하지 못합니다
.
X 윈도우 시스템은 일반적으로 두 부분으로 구성됩니다.
- 서버 (XServer)
- 클라이언트 (.. XClients 🙂
서버는 하드웨어 (grafic 카드, 입력 장치)에 연결하여 클라이언트가 이러한 리소스를 사용할 수 있도록합니다. 클라이언트는 xserver에 연결하고 제공된 리소스를 사용합니다.
Unix (Xorg, mac 사람들은 자체 등) 및 Windows (Hummingbird, Cygwin의 Xorg 등 포트) 용 서버가 있습니다.
한 OS의 클라이언트를 다른 OS에서 실행되는 서버에 연결할 수 있습니다.
서버와 클라이언트 간의 통신은 Xlib-API 또는 (보다 현대적인) xcb-API 를 통해 수행됩니다 .
간단한 응용 프로그램을 만들려면 일반적으로 다음과 같이하십시오.
- xserver에 연결
- xserver에게 창을 만들도록 요청하십시오 ( “핸들”을 줄 것입니다)
- xserver에게 창을 띄우라고 지시하십시오.
- 프로세스 이벤트 (마우스, 키보드, 노출, 모션 등)
- 창에 물건 그리기 (텍스트, 그래픽 등)
- xserver에게 모든 리소스를 해제하도록 지시하여 앱을 종료
그리고 .. 완료.