Working demos of Wayland application?
Hello. I try to create Wayland applications with inspiration from demo-code. I did lot of search in internet and finally found one site that gives +- working demos: https://wayland-book.com There are some code that must be updated (because obsolete) but all "steps" souce code are working. Sadly the steps ended at chapter 10 and all the other chapters have "todo" as code. Are there plans to continue the explanation with demo-code? Does it exist somewhere a complete demo that can be compiled in 2023? All the (very) few code I found did not compile. Thanks. Fre;D
RE: Problem with mmap keyboard.
Sorry for that double post. It was already solved by Emmanuel. Fre;D De : wayland-devel de la part de Fred vS Envoyé : mercredi 4 octobre 2023 20:14 À : wayland-devel@lists.freedesktop.org Objet : Problem with mmap keyboard. Hello. I try to make work the "Keyboard event" step from the Wayland-book but the C demo crash at loading. The problem comes from the mapping: with that error: Line 301: wl_keyboard_keymap: Assertion map_shm != MAP_FAILED' failed. Here is the function: static void wl_keyboard_keymap(void *data, struct wl_keyboard *wl_keyboard, uint32_t format, int32_t fd, uint32_t size) { struct client_state *client_state = data; assert(format == WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1); // Line 301: Here problem with mapping char *map_shm = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0); assert(map_shm != MAP_FAILED); struct xkb_keymap *xkb_keymap = xkb_keymap_new_from_string( client_state->xkb_context, map_shm, XKB_KEYMAP_FORMAT_TEXT_V1, XKB_KEYMAP_COMPILE_NO_FLAGS); munmap(map_shm, size); close(fd); struct xkb_state *xkb_state = xkb_state_new(xkb_keymap); xkb_keymap_unref(client_state->xkb_keymap); xkb_state_unref(client_state->xkb_state); client_state->xkb_keymap = xkb_keymap; client_state->xkb_state = xkb_state; } Why does the mapping fails, I did check fd and size and they are correctly assigned? Thanks.
Problem with mmap keyboard.
Hello. I try to make work the "Keyboard event" step from the Wayland-book but the C demo crash at loading. The problem comes from the mapping: with that error: Line 301: wl_keyboard_keymap: Assertion map_shm != MAP_FAILED' failed. Here is the function: static void wl_keyboard_keymap(void *data, struct wl_keyboard *wl_keyboard, uint32_t format, int32_t fd, uint32_t size) { struct client_state *client_state = data; assert(format == WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1); // Line 301: Here problem with mapping char *map_shm = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0); assert(map_shm != MAP_FAILED); struct xkb_keymap *xkb_keymap = xkb_keymap_new_from_string( client_state->xkb_context, map_shm, XKB_KEYMAP_FORMAT_TEXT_V1, XKB_KEYMAP_COMPILE_NO_FLAGS); munmap(map_shm, size); close(fd); struct xkb_state *xkb_state = xkb_state_new(xkb_keymap); xkb_keymap_unref(client_state->xkb_keymap); xkb_state_unref(client_state->xkb_state); client_state->xkb_keymap = xkb_keymap; client_state->xkb_state = xkb_state; } Why does the mapping fails, I did check fd and size and they are correctly assigned? Thanks.
RE: Problem with mmap keyboard.
Hello! >“From version 7 onwards, the fd must be mapped with MAP_PRIVATE by the recipient, as MAP_SHARED may fail.” Yep, it does the trick, well seen, now all the infos of the keyboard are working. >I don’t know which wl_shell version you are using, Huh, I did copy the source from: https://wayland-book.com/seat/example.html But I dont know where/who to advice to fix the code of wayland-book. Anyway, many thanks Emmanuel for your precious eyes and advices. I can continue now the Wayland exploration... Fre;D De : Fred vS Envoyé : mercredi 4 octobre 2023 20:44 À : wayland-devel@lists.freedesktop.org Objet : RE: Problem with mmap keyboard. Ho, many thanks Emmanuel. I will deeply study your mail. By the way, I am busy to translate all the "steps" demos of the Wayland-book into Pascal: https://github.com/fredvs/wayland-pascal Now, Free Pascal compiler can create nice and working "Pure Wayland applications". Note too that the C demos in Wayland-book have some ommisions in code ( I added the fixes in /src/c). But for the "Keyboard events" step, I am blocked, the C "Keyboard events" demo in /src/c does not use the key-map, but it works to give the actions of the keys and the number of the keys. The same for the translated Pascal code. But ok, I will try to make the map-keyboard working thanks to with your advices. Many thanks. Write you later. Fre;D De : Emmanuel Gil Peyrot Envoyé : mercredi 4 octobre 2023 20:28 À : Fred vS Cc : wayland-devel@lists.freedesktop.org Objet : Re: Problem with mmap keyboard. On Wed, Oct 04, 2023 at 06:19:30PM +, Fred vS wrote: > Hello. Hi, > > > I try to make work the "Keyboard event" step from the Wayland-book but the C > demo crash at loading. > > The problem comes from the mapping: with that error: > > > Line 301: wl_keyboard_keymap: Assertion map_shm != MAP_FAILED' failed. > > > Here is the function: > > static void > wl_keyboard_keymap(void *data, struct wl_keyboard *wl_keyboard, > uint32_t format, int32_t fd, uint32_t size) > { > struct client_state *client_state = data; > assert(format == WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1); > > // Line 301: Here problem with mapping > char *map_shm = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0); We can read in the documentation of this protocol: https://wayland.app/protocols/wayland#wl_keyboard:event:keymap “From version 7 onwards, the fd must be mapped with MAP_PRIVATE by the recipient, as MAP_SHARED may fail.” I don’t know which wl_shell version you are using, but check that maybe. > assert(map_shm != MAP_FAILED); > > struct xkb_keymap *xkb_keymap = xkb_keymap_new_from_string( > client_state->xkb_context, map_shm, > XKB_KEYMAP_FORMAT_TEXT_V1, XKB_KEYMAP_COMPILE_NO_FLAGS); > munmap(map_shm, size); > close(fd); > > struct xkb_state *xkb_state = xkb_state_new(xkb_keymap); > xkb_keymap_unref(client_state->xkb_keymap); > xkb_state_unref(client_state->xkb_state); > client_state->xkb_keymap = xkb_keymap; > client_state->xkb_state = xkb_state; > } > > > > Why does the mapping fails, I did check fd and size and they are correctly > assigned? > > > Thanks. > -- Link Mauve
RE: Problem with mmap keyboard.
Ho, many thanks Emmanuel. I will deeply study your mail. By the way, I am busy to translate all the "steps" demos of the Wayland-book into Pascal: https://github.com/fredvs/wayland-pascal Now, Free Pascal compiler can create nice and working "Pure Wayland applications". Note too that the C demos in Wayland-book have some ommisions in code ( I added the fixes in /src/c). But for the "Keyboard events" step, I am blocked, the C "Keyboard events" demo in /src/c does not use the key-map, but it works to give the actions of the keys and the number of the keys. The same for the translated Pascal code. But ok, I will try to make the map-keyboard working thanks to with your advices. Many thanks. Write you later. Fre;D De : Emmanuel Gil Peyrot Envoyé : mercredi 4 octobre 2023 20:28 À : Fred vS Cc : wayland-devel@lists.freedesktop.org Objet : Re: Problem with mmap keyboard. On Wed, Oct 04, 2023 at 06:19:30PM +, Fred vS wrote: > Hello. Hi, > > > I try to make work the "Keyboard event" step from the Wayland-book but the C > demo crash at loading. > > The problem comes from the mapping: with that error: > > > Line 301: wl_keyboard_keymap: Assertion map_shm != MAP_FAILED' failed. > > > Here is the function: > > static void > wl_keyboard_keymap(void *data, struct wl_keyboard *wl_keyboard, > uint32_t format, int32_t fd, uint32_t size) > { > struct client_state *client_state = data; > assert(format == WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1); > > // Line 301: Here problem with mapping > char *map_shm = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0); We can read in the documentation of this protocol: https://wayland.app/protocols/wayland#wl_keyboard:event:keymap “From version 7 onwards, the fd must be mapped with MAP_PRIVATE by the recipient, as MAP_SHARED may fail.” I don’t know which wl_shell version you are using, but check that maybe. > assert(map_shm != MAP_FAILED); > > struct xkb_keymap *xkb_keymap = xkb_keymap_new_from_string( > client_state->xkb_context, map_shm, > XKB_KEYMAP_FORMAT_TEXT_V1, XKB_KEYMAP_COMPILE_NO_FLAGS); > munmap(map_shm, size); > close(fd); > > struct xkb_state *xkb_state = xkb_state_new(xkb_keymap); > xkb_keymap_unref(client_state->xkb_keymap); > xkb_state_unref(client_state->xkb_state); > client_state->xkb_keymap = xkb_keymap; > client_state->xkb_state = xkb_state; > } > > > > Why does the mapping fails, I did check fd and size and they are correctly > assigned? > > > Thanks. > -- Link Mauve
Problem with mmap keyboard.
Hello. I try to make work the "Keyboard event" step from the Wayland-book but the C demo crash at loading. The problem comes from the mapping: with that error: Line 301: wl_keyboard_keymap: Assertion map_shm != MAP_FAILED' failed. Here is the function: static void wl_keyboard_keymap(void *data, struct wl_keyboard *wl_keyboard, uint32_t format, int32_t fd, uint32_t size) { struct client_state *client_state = data; assert(format == WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1); // Line 301: Here problem with mapping char *map_shm = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0); assert(map_shm != MAP_FAILED); struct xkb_keymap *xkb_keymap = xkb_keymap_new_from_string( client_state->xkb_context, map_shm, XKB_KEYMAP_FORMAT_TEXT_V1, XKB_KEYMAP_COMPILE_NO_FLAGS); munmap(map_shm, size); close(fd); struct xkb_state *xkb_state = xkb_state_new(xkb_keymap); xkb_keymap_unref(client_state->xkb_keymap); xkb_state_unref(client_state->xkb_state); client_state->xkb_keymap = xkb_keymap; client_state->xkb_state = xkb_state; } Why does the mapping fails, I did check fd and size and they are correctly assigned? Thanks.