2024/3/12

wayland. weston hello-world

wayland 是新的 X protocol (?)。
wayland 也是一樣,一個 server 負責顯示,一堆 client 藉由 wayland protocol 要求 server 畫圖。
wayland server 的實做就是 weston。

weston 也可以 run 在 X上(變成 interpreter ?),所以在 ubuntu 上,使用 X 的系統,也可以 run wayland client.
開啟console 啟動 weston 就可以。
~$ weston
Date: 2024-03-12 CST
[15:11:15.003] weston 9.0.0
               https://wayland.freedesktop.org
               Bug reports to: https://gitlab.freedesktop.org/wayland/weston/issues/
               Build: 9.0.0
[15:11:15.003] Command line: weston
[15:11:15.003] OS: Linux, 6.5.0-25-generic, #25~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Feb 20 16:09:15 UTC 2, x86_64
[15:11:15.003] Starting with no config file.
[15:11:15.003] Output repaint window is 7 ms maximum.
[15:11:15.003] Loading module '/usr/lib/x86_64-linux-gnu/libweston-9/x11-backend.so'
[15:11:15.009] Loading module '/usr/lib/x86_64-linux-gnu/libweston-9/gl-renderer.so'
[15:11:15.019] EGL client extensions: EGL_EXT_platform_base EGL_EXT_device_base
               EGL_EXT_device_enumeration EGL_EXT_device_query
               EGL_KHR_client_get_all_proc_addresses EGL_EXT_client_extensions
               EGL_KHR_debug EGL_KHR_platform_x11 EGL_EXT_platform_x11
               EGL_EXT_platform_device EGL_KHR_platform_wayland
               EGL_EXT_platform_wayland EGL_EXT_platform_xcb
               EGL_MESA_platform_gbm EGL_KHR_platform_gbm
               EGL_MESA_platform_surfaceless
[15:11:15.026] EGL version: 1.5
[15:11:15.026] EGL vendor: NVIDIA
[15:11:15.026] EGL client APIs: OpenGL_ES OpenGL
...
然後看到一個小window 跑起來,裡面有小游標。

然後clone 這個 client example: hello-wayland make 就可以。
然後 run ./hello-wayland
就可以看到一個圖片show 在剛剛的 weston windows 上。



另外一個簡單測試 wayland server connection 的 client code:
#include <stdio.h>
#include <wayland-client.h>

int
main(int argc, char *argv[])
{
    struct wl_display *display = wl_display_connect(NULL);
    if (!display) {
        fprintf(stderr, "Failed to connect to Wayland display.\n");
        return 1;
    }
    fprintf(stderr, "Connection established!\n");

    wl_display_disconnect(display);
    return 0;
}
compile 的時候要 link wayland-client.so
gcc -o waylandclient waylandclient.c -lwayland-client
另外一個簡單的,紙提供 wayland sock connect 的 server (chatgpt 寫的):
#include <stdio.h>
#include <wayland-server.h>

int
main(int argc, char *argv[])
{
    struct wl_display *display = wl_display_create();
    if (!display) {
        fprintf(stderr, "Unable to create Wayland display.\n");
        return 1;
    }

    const char *socket = wl_display_add_socket_auto(display);
    if (!socket) {
        fprintf(stderr, "Unable to add socket to Wayland display.\n");
        return 1;
    }

    fprintf(stderr, "Running Wayland display on %s\n", socket);
    wl_display_run(display);

    wl_display_destroy(display);
    return 0;
}
一樣,compile 的時候要link wayland-server (-lwayland-server)

沒有留言:

張貼留言