1
0
Fork 0
forked from wry/wry

docs: add book

This commit is contained in:
Claude 2026-03-20 19:14:07 +01:00 committed by Julian Orth
parent c9d6fb9e40
commit d14105eb1a
43 changed files with 7254 additions and 1204 deletions

290
book/src/features.md Normal file
View file

@ -0,0 +1,290 @@
# Features
This chapter provides a high-level overview of what Jay can do. Each feature
links to the chapter where it is covered in detail.
## Configuration
Jay can be configured via:
- a **declarative TOML file**, or
- a **shared library** that gets injected into the compositor for programmatic
control.
Most users will use the TOML file. The configuration supports composable
actions, [input modes](input-modes.md) for vim-style modal keybindings, and
powerful [match rules](window-rules.md). See
[Configuration Overview](configuration/index.md) for details on getting started
and how the config file works.
## i3 Look and Feel
Jay provides an i3-inspired tiling layout with manual tiling,
horizontal/vertical splits, fullscreen, and floating windows. Its appearance is
based on the default i3 look and feel.
Colors, sizes, and fonts can all be customized. See
[Theme & Appearance](configuration/theme.md) for details, and
[Tiling](tiling.md) and [Floating Windows](floating.md) for how window
management works.
## Stability
Jay has been stable for a long time. Crashes and incorrect behavior in released
versions are rare.
Jay also aims to be forward and backward compatible for existing setups,
allowing you to upgrade or downgrade the compositor without having to adjust
your configuration.
There is a small but growing integration test suite that is used to ensure this.
## Command-Line Interface
Jay has a comprehensive CLI that can be used to inspect and configure the
compositor at runtime:
```
~$ jay
A wayland compositor
Usage: jay [OPTIONS] <COMMAND>
Commands:
run Run the compositor
config Create/modify the toml config
generate-completion Generate shell completion scripts for jay
log Open the log file
set-log-level Sets the log level
quit Stop the compositor
unlock Unlocks the compositor
screenshot Take a screenshot
idle Inspect/modify the idle (screensaver) settings
run-privileged Run a privileged program
run-tagged Run a program with a connection tag
seat-test Tests the events produced by a seat
portal Run the desktop portal
randr Inspect/modify graphics card and connector settings
input Inspect/modify input settings
xwayland Inspect/modify xwayland settings
color-management Inspect/modify the color-management settings
clients Inspect/manipulate the connected clients
tree Inspect the surface tree
control-center Opens the control center
version Prints the Jay version and exits
pid Prints the Jay PID and exits
help Print this message or the help of the given subcommand(s)
Options:
--log-level <LOG_LEVEL> The log level [default: info] [possible values: trace, debug, info, warn, error, off]
-h, --help Print help
```
See the full [Command-Line Interface](cli.md) reference for details.
## Control Center
Jay includes a built-in GUI control center (opened with `alt-c`) for managing
outputs, input devices, GPUs, idle settings, color management, and more --
without editing the config file. See [Control Center](control-center.md).
## Multi-Monitor Support
Jay can be used with multiple monitors with hot-plug and hot-unplug support.
When a monitor is unplugged, all of its workspaces are automatically moved to
one of the remaining monitors. When the monitor is plugged in again, these
workspaces are restored.
See [Outputs (Monitors)](configuration/outputs.md) for configuration options.
## Multi-GPU Support
Jay can be used with multiple GPUs and monitors connected to different GPUs.
One GPU is always used for rendering the desktop. You can change this GPU at
runtime.
See [GPUs](configuration/gpu.md) for details.
## Screen Sharing
Jay supports screen sharing via xdg-desktop-portal. Three capture modes are
available:
- **Window capture** -- share a single window.
- **Output capture** -- share an entire monitor.
- **Workspace capture** -- like output capture, but only one workspace is shown.
See [Screen Sharing](screen-sharing.md) for setup instructions.
## Screen Locking
Jay can automatically lock your screen and disable outputs after inactivity.
See [Idle & Screen Locking](configuration/idle.md) for configuration options.
## Notifications
Jay supports the `zwlr_layer_shell_v1` protocol used by notification daemons
such as [mako](https://github.com/emersion/mako), which is launched
automatically by the default configuration.
## Fractional Scaling
Jay supports per-monitor fractional scaling. Scale factors can be set per
output in the config file or at runtime via the control center and CLI.
See [Outputs (Monitors)](configuration/outputs.md) for details.
## OpenGL and Vulkan
Jay can use either OpenGL or Vulkan for rendering. Vulkan offers better
performance and memory usage but OpenGL is still provided for older hardware.
You can change the rendering API at runtime without restarting the compositor.
See [GPUs](configuration/gpu.md) for details.
## Explicit Sync
Jay supports explicit sync for compatibility with Nvidia hardware. This
requires Linux 6.7 or later.
## Xwayland
Jay supports running X11 applications seamlessly through Xwayland. See
[Xwayland](configuration/xwayland.md) for configuration options.
## Clipboard Managers
Jay supports clipboard managers via the `zwlr_data_control_manager_v1` and
`ext_data_control_manager_v1` protocols.
## Privilege Separation
Jay splits protocols into unprivileged and privileged protocols. By default,
applications only have access to unprivileged protocols. This means that tools
like screen lockers, status bars, and clipboard managers need to be explicitly
granted access.
Jay provides several ways to grant privileges, from giving a program full
access to all privileged protocols down to granting individual capabilities to
specific tagged processes. See
[Granting Privileges](window-rules.md#granting-privileges) for a detailed
guide and the [Protocol Support](#protocol-support) section below for the full
list of protocols and their privilege requirements.
## Push to Talk
Jay's shortcut system allows you to execute an action when a key is pressed and
a different action when the key is released, enabling push-to-talk
functionality. See [Shortcuts](configuration/shortcuts.md) for details.
## VR
Jay supports leasing VR headsets to applications via the
`wp_drm_lease_device_v1` protocol.
## Adaptive Sync
Jay supports adaptive sync (VRR) with configurable cursor refresh rates.
See [Outputs (Monitors)](configuration/outputs.md) for per-output VRR settings.
## Tearing
Jay supports tearing presentation for games. See
[Outputs (Monitors)](configuration/outputs.md) for per-output tearing settings.
## Low Input Latency
Jay uses frame scheduling to achieve input latency as low as 1.5 ms.
## Color Management & HDR
Jay supports the Wayland color management protocol and HDR10 output with
per-monitor color space, transfer function, brightness, and blend space
controls. See [HDR & Color Management](hdr.md) for a full walkthrough.
## Night Light
Jay supports night-light applications via the
`zwlr_gamma_control_manager_v1` protocol.
## Window and Client Rules
Jay supports powerful, reactive window and client rules. Rules are
re-evaluated whenever matching criteria change (e.g. a window's title changes).
See [Window & Client Rules](window-rules.md) for details.
## Protocol Support
Jay supports a large number of Wayland protocols. Protocols marked as
**Privileged** are only accessible to applications that have been explicitly
granted access. See
[Granting Privileges](window-rules.md#granting-privileges) for how to do this.
| Protocol | Version | Privileged |
|------------------------------------------------------|---------|------------|
| ext_data_control_manager_v1 | 1 | Yes |
| ext_foreign_toplevel_image_capture_source_manager_v1 | 1 | |
| ext_foreign_toplevel_list_v1 | 1 | Yes |
| ext_idle_notifier_v1 | 2 | Yes |
| ext_image_copy_capture_manager_v1 | 1[^2] | Yes |
| ext_output_image_capture_source_manager_v1 | 1 | |
| ext_session_lock_manager_v1 | 1 | Yes |
| ext_transient_seat_manager_v1 | 1[^3] | Yes |
| ext_workspace_manager_v1 | 1 | Yes |
| jay_popup_ext_manager_v1 | 1 | |
| jay_tray_v1 | 1 | |
| org_kde_kwin_server_decoration_manager | 1 | |
| wl_compositor | 7 | |
| wl_data_device_manager | 4 | |
| wl_drm | 2 | |
| wl_fixes | 1 | |
| wl_output | 4 | |
| wl_seat | 10 | |
| wl_shm | 2 | |
| wl_subcompositor | 1 | |
| wp_alpha_modifier_v1 | 1 | |
| wp_color_manager_v1 | 2 | |
| wp_color_representation_manager_v1 | 1 | |
| wp_commit_timing_manager_v1 | 1 | |
| wp_content_type_manager_v1 | 1 | |
| wp_cursor_shape_manager_v1 | 2 | |
| wp_drm_lease_device_v1 | 1 | |
| wp_fifo_manager_v1 | 1 | |
| wp_fractional_scale_manager_v1 | 1 | |
| wp_linux_drm_syncobj_manager_v1 | 1 | |
| wp_pointer_warp_v1 | 1 | |
| wp_presentation | 2 | |
| wp_security_context_manager_v1 | 1 | |
| wp_single_pixel_buffer_manager_v1 | 1 | |
| wp_tearing_control_manager_v1 | 1 | |
| wp_viewporter | 1 | |
| xdg_activation_v1 | 1 | |
| xdg_toplevel_drag_manager_v1 | 1 | |
| xdg_toplevel_tag_manager_v1 | 1 | |
| xdg_wm_base | 7 | |
| xdg_wm_dialog_v1 | 1 | |
| zwlr_data_control_manager_v1 | 2 | Yes |
| zwlr_foreign_toplevel_manager_v1 | 3 | Yes |
| zwlr_gamma_control_manager_v1 | 1 | Yes |
| zwlr_layer_shell_v1 | 5 | No[^1] |
| zwlr_output_manager_v1 | 4 | Yes |
| zwlr_screencopy_manager_v1 | 3 | Yes |
| zwlr_virtual_pointer_manager_v1 | 2 | Yes |
| zwp_idle_inhibit_manager_v1 | 1 | |
| zwp_input_method_manager_v2 | 1 | Yes |
| zwp_linux_dmabuf_v1 | 5 | |
| zwp_pointer_constraints_v1 | 1 | |
| zwp_pointer_gestures_v1 | 3 | |
| zwp_primary_selection_device_manager_v1 | 1 | |
| zwp_relative_pointer_manager_v1 | 1 | |
| zwp_tablet_manager_v2 | 2 | |
| zwp_text_input_manager_v3 | 1 | |
| zwp_virtual_keyboard_manager_v1 | 1 | Yes |
| zxdg_decoration_manager_v1 | 2 | |
| zxdg_output_manager_v1 | 3 | |
[^1]: Sandboxes can restrict access to this protocol.
[^2]: Cursors are always composited.
[^3]: Seat creation is always rejected.