Forritun í XCB/Tenging við X-þjóninn

Til að nota XCB-bindingarnar verður fyrst að tengjast X-þjóninum. Það er gert með fallinu xcb_connect()[1] sem er hlæðstætt XOpenDisplay() í Xlib. Hér er skilgreining fallsins xcb_connect():

xcb_connection_t *xcb_connect (const char *displayname, int *screenp);
Útkoman úr skipuninni echo $DISPLAY, fallið xcb_connect() notar þetta gildi sjálfkrafa ef fyrri færibreytan er NULL.

og það sést að xcb_connect tekur við tveimur færibreytum:

  • displayname, hvaða X-þjón skal tengjast við. Ef þetta færibreyta er NULL þá er notar fallið það gildi sem er í DISPLAY-umhverfisbreytunni sem má breyta með skipuninni export DISPLAY=:1.0 (frekari upplýsingar). Annars er hægt að gefa upp
    tenging = xcb_connect(":1", NULL); — sem tengist við X-þjón :1
  • Önnur færibreytan skilar skjánúmerinu sem er notað fyrir tenginguna.

Fallið skilar bendi í skipanina xcb_connection_t sem er hliðstæð Display í Xlib.

Tengst þjóninum breyta

Hér er einfalt forrit sem opnar tengingu við X-þjóninn og lokar tengingunni strax aftur:

#include <xcb/xcb.h>

int main ()
{
  /*
   * Tengist X-þjóninum og notar DISPLAY-umhverfisbreytuna þar sem fyrri færibreytan er NULL.
   * Skilar upplýsingum um tenginguna í skipanina „tenging“. 
   */
  xcb_connection_t *tenging = tenging = xcb_connect (NULL, NULL);
 
  /* Lokar tengingunni. */
  xcb_disconnect (tenging);
  return 0;
}

Þessa skrá mætti svo vista sem tenging.c og þýða með skipuninni sem er gefin undir kaflanum um þýðingu XCB-forrita. Þegar tenging skráin er keyrð ætti forritið að ljúka keyrslu án þess að prenta neitt á skjáinn.

Sækja upplýsingar um tengingu breyta

Þar sem tengingu er komið á er nú hægt að sækja frekari upplýsingar um hana, upplýsingar um tenginguna munu reynast nauðsynlegar síðar meir, til dæmis til að nálgast stærð skjásins og litastuðning hans í gegnum skipanina xcb_screen_t sem er skilgreind í skránni xproto.h.

#include <stdio.h>
#include <xcb/xcb.h>

int main ()
{
  xcb_connection_t *tenging;
  xcb_screen_t *skjar;
  int skjanumer;
  xcb_screen_iterator_t iter;

  /* Tengist X-þjóninum, notar DISPLAY-breytuna og skilar númer skjás í skjanumer */
  tenging = xcb_connect (NULL, &skjanumer);

  /* Sækir skjáinn sem er númer #screen_nbr með skipuninni „xcb_setup_roots_iterator“. */
  iter = xcb_setup_roots_iterator (xcb_get_setup (tenging));
  for (; iter.rem; --skjanumer, xcb_screen_next (&iter))
    if (skjanumer == 0) {
      skjar = iter.data;
      break;
    }
  printf ("Upplýsingar um skjá númer %i\n"
          " * Breidd: %i\n"         /* Breidd skjásins í dílum. */
          " * Hæð: %i\n"            /* Hæð skjásins í dílum. */
          " * Hvítur litur: %i\n"   /* Gildi hvíts litar sem er #FFFFFF í HEX eða 16777215 */
          " * Svartur litur: %i\n", /* Gildi svarts litar sem er #000000 í HEX eða 0 */
          skjar->root, skjar->width_in_pixels, skjar->height_in_pixels,
          skjar->white_pixel, skjar->black_pixel);

  xcb_disconnect (tenging);
  return 0;
}

sem ætti að prenta út eitthvað eins og:

Upplýsing um skjá númer 258:
 * Breidd: 800
 * Hæð: 600
 * Hvítur litur: 16777215
 * Svartur litur: 0

Þýða breyta

Til að þýða XCB-forrit með gcc-þýðandanum:

gcc -Wall nafnforrits.c -o nafnforrits `pkg-config --cflags --libs xcb`

svo er hægt að keyra mörg forritin úr núverandi X-þjóni með skipuninni

cd ~notandi/mappa/sem/hefur/að/geyma/forritið
./nafnforrits

eftir að búið er gera skránan keyranlega

chmod u+x nafnforrits

en annars er ráðlegt að keyra þetta í nýjum X-þjóni

X :$n &
xterm -display :$n &

þar sem breytan $n er náttúruleg tala sem táknar hvaða X-þjónn er notaður. Oftast dugar að nota n=1. Svo er xterm-útstöðin valin og forritið keyrt þaðan með

cd ~notandi/mappa/sem/hefur/að/geyma/forritið
./nafnforrits

eftir að búið er gera skránan keyranlega

chmod u+x nafnforrits

Tilvísanir breyta

  1. xcb_connection_t* xcb_connect (const char *displayname, int *screenp) á XCB API