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)
沒有留言:
張貼留言