Problem with mmap keyboard.
Fred vS
fiens at hotmail.com
Wed Oct 4 18:44:59 UTC 2023
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 <linkmauve at linkmauve.fr>
Envoyé : mercredi 4 octobre 2023 20:28
À : Fred vS <fiens at hotmail.com>
Cc : wayland-devel at lists.freedesktop.org <wayland-devel at lists.freedesktop.org>
Objet : Re: Problem with mmap keyboard.
On Wed, Oct 04, 2023 at 06:19:30PM +0000, 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/wayland-devel/attachments/20231004/b0d821aa/attachment-0001.htm>
More information about the wayland-devel
mailing list