River xkb config
本协议允许客户端设置各个键盘输入设备的 xkbcommon keymap。它还允许在 keymap 的不同布局之间切换,以及切换 capslock/numlock 状态。
本文档中的关键字“必须 (must)”、“不得 (must not)”、“需要 (required)”、“应当 (shall)”、“不应当 (shall not)”、“应该 (should)”、“不应该 (should not)”、“建议 (recommended)”、“可以 (may)”和“可选 (optional)”应按照 IETF RFC 2119 中的描述进行解释。
用于配置 xkb 设备的全局接口。
此全局对象仅在同时通告 river_input_manager_v1 时才会通告。
stop()
此请求表示客户端不希望再接收此对象上的事件。
Wayland 协议是异步的,这意味着在处理 stop 请求之前,服务端可能会继续发送事件。在销毁此对象之前,客户端必须等待 river_xkb_config_v1.finished 事件。
destroy()
应在接收到 finished 事件后调用此请求,以完成对象的销毁。
在接收到 finished 事件之前发出此请求属于协议错误。
如果客户端希望销毁此对象,它应当发送 river_xkb_config_v1.stop 请求并等待 river_xkb_config_v1.finished 事件。一旦接收到 finished 事件,就可以安全地销毁此对象及通过此接口创建的任何其他对象。
create_keymap(id: new_id<river_xkb_keymap_v1>, fd: fd, format: uint<river_xkb_config_v1.keymap_format>)
参数 | 类型 | 描述 |
|---|---|---|
| id | new_id<river_xkb_keymap_v1> | |
| fd | fd | |
| format | uint<river_xkb_config_v1.keymap_format> |
服务端必须能够以 MAP_PRIVATE 对 fd 建立 mmap 映射。 服务端将对 fd 执行 fstat 以获取 keymap 的大小。 在发出此请求后,客户端不得修改 fd 的内容。 客户端应当使用 fcntl 密封 (seal) 描述符 fd。
finished()
此事件表示服务端不会再发送此对象上的任何事件。客户端应销毁该对象。有关更多信息,请参阅 river_xkb_config_v1.destroy。
xkb_keyboard(id: new_id<river_xkb_keyboard_v1>)
参数 | 类型 | 描述 |
|---|---|---|
| id | new_id<river_xkb_keyboard_v1> |
已创建一个新的 xkbcommon 键盘。并非每个 river_input_device_v1 都一定是 xkbcommon 键盘。
error { invalid_destroy, invalid_format }
此对象表示一个 xkbcommon keymap,它包含 xkb_keymap_get_as_string() 输出的 keymap 格式的字符串。
当以此方式创建 river_xkb_keymap_v1 对象时,它被认为是“待处理的 (pending)”并处于非活动状态。客户端只有在接收到 river_xkb_keymap_v1.success 事件后,才能确定 keymap 已成功由服务端验证并创建。
destroy()
此请求表示客户端将不再使用该 keymap 对象,并且可以安全地销毁它。
success()
此事件表示在创建时传递的 fd 包含一个有效的 xkbcommon keymap 并且已成功由服务端解析。
从此事件开始,可以在接受 river_xkb_keymap_v1 对象的请求中使用该对象。
此对象表示一个由 xkbcommon 管理其配置和状态的物理键盘。
set_keymap(keymap: object<river_xkb_keymap_v1>)
参数 | 类型 | 描述 |
|---|---|---|
| keymap | object<river_xkb_keymap_v1> |
设置键盘的 keymap。
传递未收到 river_xkb_keymap_v1.success 事件的 keymap 对象属于协议错误。
set_layout_by_index(index: int)
参数 | 类型 | 描述 |
|---|---|---|
| index | int |
设置键盘 keymap 的活动布局。如果布局索引超出当前 keymap 的边界,则没有影响。
set_layout_by_name(name: string)
参数 | 类型 | 描述 |
|---|---|---|
| name | string |
设置键盘 keymap 的活动布局。如果键盘的 keymap 中没有给定名称的布局,则没有影响。
removed()
此事件表示 xkb 键盘已被移除。
服务端不会再发送此对象上的事件,并忽略发送此事件之后的所有请求(除了 river_xkb_keyboard_v1.destroy)。客户端应当使用 river_xkb_keyboard_v1.destroy 请求销毁此对象以释放资源。
input_device(device: object<river_input_device_v1>)
参数 | 类型 | 描述 |
|---|---|---|
| device | object<river_input_device_v1> |
此 xkb 键盘对应的 river_input_device_v1。此事件将始终作为在 river_xkb_keyboard_v1 对象上发送的第一个事件,并且仅发送一次。
当前活动的布局索引及其名称。如果更改了 keymap,与布局索引关联的名称可能会发生变化。
此事件在创建 river_xkb_keyboard_v1 时发送一次,并在随后每次通过影响给定 river_xkb_keyboard_v1 的按键或请求导致布局更改时再次发送。
capslock_enabled()
键盘当前启用了 capslock。
当创建 river_xkb_keyboard_v1 时发送一次,随后每次 capslock 状态改变时再次发送。
capslock_disabled()
键盘当前禁用了 capslock。
当创建 river_xkb_keyboard_v1 时发送一次,随后每次 capslock 状态改变时再次发送。
numlock_enabled()
键盘当前启用了 numlock。
当创建 river_xkb_keyboard_v1 时发送一次,随后每次 numlock 状态改变时再次发送。
numlock_disabled()
键盘当前禁用了 numlock。
当创建 river_xkb_keyboard_v1 时发送一次,随后每次 numlock 状态改变时再次发送。
合成器支持
Copyright
SPDX-FileCopyrightText: © 2026 Isaac Freund SPDX-License-Identifier: MIT
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.