XCB

XCB
개발자Jamey Sharp, Josh Triplett, Bart Massey
발표일2001년
안정화 버전
1.14 / 2020년 2월(4년 전)(2020-02)
저장소
  • gitlab.freedesktop.org/xorg/lib/libxcb 위키데이터에서 편집하기
운영 체제POSIX
종류X 윈도 코어 프로토콜 개발 라이브러리
라이선스MIT
웹사이트xcb.freedesktop.org
Xlib와 XCB, 그리고 이들을 사용하는 라이브러리들

XCB(X protocol C-language Binding)는 컴퓨팅에서 X 윈도 시스템을 위한 C 언어 결합이다. 자유 소프트웨어로 구현되어 있으며 Xlib을 대체하는 것을 목적으로 한다. 이 프로젝트는 2001년 Bart Massey가 시작하였다.

Xlib/XCB는 점진적인 이식 경로를 통해 Xlib와 XCB에 대한 응용 프로그램 이진 인터페이스 호환성을 제공한다. Xlib/XCB는 Xlib 프로토콜 계층을 사용하지만 Xlib 전송 계층을 XCB로 대체하며 XCB를 직접 이용할 수 있도록 기반 XCB 연결로의 접근을 제공한다. 대부분의 운영 체제는 X11 구현을 위해[출처 필요] Xlib/XCB를 사용하는데, 그 까닭은 여러 라이브러리들을 통해 응용 프로그램이 X 서버로의 연결을 개시하여 XCB와 Xlib를 둘 다 사용할 수 있기 때문이다.[1][2]

목적

XCB의 주 목적은 다음과 같다:

  • 라이브러리 크기와 복잡성을 줄이기 위해
  • X11 프로토콜로의 직접 접근을 제공하기 위해

/* 창 안에 상자를 그려내는 단순 XCB 응용 프로그램입니다 */
/* 컴파일하려면 다음을 사용하세요:
 gcc -Wall x.c -lxcb
*/
#include <xcb/xcb.h>
#include <stdio.h>
#include <stdlib.h>

int main(void) {
  xcb_connection_t    *c;
  xcb_screen_t        *s;
  xcb_window_t         w;
  xcb_gcontext_t       g;
  xcb_generic_event_t *e;
  uint32_t             mask;
  uint32_t             values[2];
  int                  done = 0;
  xcb_rectangle_t      r = { 20, 20, 60, 60 };

                        /* 서버 연결 개시 */
  c = xcb_connect(NULL,NULL);
  if (xcb_connection_has_error(c)) {
    printf("display를 열 수 없습니다\n");
    exit(1);
  }
                        /* 최초의 화면 가져오기 */
  s = xcb_setup_roots_iterator( xcb_get_setup(c) ).data;

                       /* 검은 그래픽 환경 만들기 */
  g = xcb_generate_id(c);
  w = s->root;
  mask = XCB_GC_FOREGROUND | XCB_GC_GRAPHICS_EXPOSURES;
  values[0] = s->black_pixel;
  values[1] = 0;
  xcb_create_gc(c, g, w, mask, values);

                       /* 창 만들기 */
  w = xcb_generate_id(c);
  mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK;
  values[0] = s->white_pixel;
  values[1] = XCB_EVENT_MASK_EXPOSURE | XCB_EVENT_MASK_KEY_PRESS;
  xcb_create_window(c, s->root_depth, w, s->root,
                    10, 10, 100, 100, 1,
                    XCB_WINDOW_CLASS_INPUT_OUTPUT, s->root_visual,
                    mask, values);

                        /* 창 보이기 */
  xcb_map_window(c, w);

  xcb_flush(c);

                        /* 이벤트 루프 */
  while (!done && (e = xcb_wait_for_event(c))) {
    switch (e->response_type & ~0x80) {
    case XCB_EXPOSE:    /* 창을 (다시) 그리기 */
      xcb_poly_fill_rectangle(c, w, g,  1, &r);
      xcb_flush(c);
      break;
    case XCB_KEY_PRESS:  /* 키가 눌릴 때 끝내기 */
      done = 1;
      break;
    }
    free(e);
  }
                        /* 서버 연결 닫기 */
  xcb_disconnect(c);

  return 0;
}

이 예제에서 볼 수 있듯이 XCB는 Xlib와 동등하지만 그 보다 살짝 낮은 수준의 API를 가지고 있다.

프로토콜 정의

XCB 제작자들은 전문화된 인터페이스 정의 언어를 만들어서 언어 중립적인 방식으로 X11 프로토콜을 모델링하고 다른 프로그래밍 언어들과의 바인딩을 쉽게 할 수 있게 하였다. libxcb 그 자체는 코드 발생기로서 구현되어 있다.

예:

<xcb header="bigreq" extension-xname="BIG-REQUESTS"
    extension-name="BigRequests" extension-multiword="true"
    major-version="0" minor-version="0">

  <request name="Enable" opcode="0">
    <reply>
      <pad bytes="1" />
      <field type="CARD32" name="maximum_request_length" />
    </reply>
  </request>
</xcb>

로고

XCB 로고는 Neko the Kitty 웹툰 작가 Gearóid Molloy가 만들어 프로젝트에 기부한 것이다.[3]

기타 언어 바인딩

  • xpyb - XCB를 이용한 X 윈도 시스템으로의 파이썬 바인딩. 2013년 6월 기준으로 python3를 지원하지 않는다. freedesktop.org 제공.

참조

  1. “Xlib/XCB: Xlib with XCB transport”. 2008년 1월 11일. 2009년 9월 11일에 확인함. 
  2. Jamey Sharp and Josh Triplett (2006년 11월 26일). “libx11 with Xlib/XCB now in experimental; please test with your packages”. 《debian-devel-announce》 (메일링 리스트). 2009년 9월 11일에 확인함. 
  3. KittyLogo (xcb.freedesktop.org)

참고 문헌

위키미디어 공용에 관련된
미디어 분류가 있습니다.
XCB
  • Massey, Bart; Sharp, Jamey (2001년 9월 19일). 〈XCB: An X Protocol C Binding〉 (PDF). 《Proceedings of the XFree86 Technical Conference》. Oakland, California: USENIX. 2012년 3월 12일에 확인함. 
  • Massey, Bart; Bauer, Robert (2002). 〈X Meets Z: Verifying Correctness In The Presence Of POSIX Threads〉. 《Proceedings of the FREENIX Track: 2002 USENIX Annual Technical Conference》. Monterey, California: USENIX. 221–234쪽. 2008년 11월 7일에 확인함. 
  • Sharp, Jamey; Massey, Bart (2002). 〈XCL: A Compatibility Layer For XCB〉. 《Proceedings of the FREENIX Track: 2002 USENIX Annual Technical Conference》. Monterey, California: USENIX. 71–83쪽. 2008년 11월 7일에 확인함. 

외부 링크

  • (영어) XCB 위키 (freedesktop.org)
  • (영어) XCB API 참조 - 강좌
  • (영어) libxcb 강좌
  • (영어) 출판물
  • v
  • t
  • e
위젯 툴킷의 목록
저급
고급
아미가OS
  • BOOPSI
  • 매직 사용자 인터페이스
  • 리액션 GUI
클래식 맥 OS
macOS
윈도우
유닉스,
(X11)
  • 아테나 (Xaw)
  • InterViews
  • LessTif
  • 모티프
  • OPEN LOOK
크로스 플랫폼
(언어별)
CLI
C 및 C++
오브젝티브-C
플래시
자바
데스크톱
자바스크립트
커먼 리스프
  • CAPI
  • 커먼 그래픽스
  • CLIM
  • Ltk
  • McCLIM
오브젝트 파스칼
  • 크로스 플랫폼용 컴포넌트 라이브러리
  • fpGUI
  • IP 파스칼
  • 라자루스
PHP
  • PHP-GTK
  • PHP-Qt
  • WxPHP
파이썬
루비
  • 슈즈
  • QtRuby
XML
  • 앰플 SDK
  • CougarXML
  • 글레이드XML
  • 라이브리 커널
  • Pyjamas
  • Rialto 툴킷
  • XAML
  • XML 사용자 인터페이스
  • XUL
  • Wt
  • v
  • t
  • e
OS 구성 요소
라이브러리
  • 앱스트림
  • 카이로
  • 폰트콘피그
  • GStreamer
  • 메사 3D
  • fprint
  • HarfBuzz
  • 팡고
  • 포플러
  • Swfdec
  • 비디오 가속 API
  • XCB
  • Xft
프레임워크
  • CppUnit
  • Galago
  • GeoClue
  • 오픈 콜라보레이션 서비스
  • 텔레파시
미팅