docs(readme): document the Ubuntu .deb install
- commit
- 49b88fb15daee652016301d71e69010b76aa48b0
- author
- brice · · 2026-10-08 05:12 UTC
- parent
- 360492d
- signature
- GPG Verified
CD88F9E564E0102646FB6077A1A07C7C7C3E349D· arch-gpg Verified for the committer email
2 files · +23 -2
M README.md +22 -1
| @@ -101,7 +101,26 @@ make install # build a package from HEAD and install it with pacman | |||
| 101 | 101 | ||
| 102 | 102 | `make pkg` builds the package without installing it. | |
| 103 | 103 | ||
| 104 | - | The package provides: | |
| 104 | + | ### Ubuntu 24.04 and later | |
| 105 | + | ||
| 106 | + | Download the `.deb` for your architecture (`amd64` or `arm64`) and `checksums.txt` from [Releases](https://github.com/bnema/neferwl/releases), then install it with apt, which pulls the runtime dependencies: | |
| 107 | + | ||
| 108 | + | ```sh | |
| 109 | + | sha256sum -c --ignore-missing checksums.txt | |
| 110 | + | sudo apt install ./neferwl_<version>_amd64.deb | |
| 111 | + | ``` | |
| 112 | + | ||
| 113 | + | Optional tools: | |
| 114 | + | ||
| 115 | + | ```sh | |
| 116 | + | sudo apt install foot fuzzel xdg-desktop-portal-gtk xdg-desktop-portal-wlr | |
| 117 | + | ``` | |
| 118 | + | ||
| 119 | + | X11 apps need [xwayland-satellite](https://github.com/Supreeeme/xwayland-satellite) 0.7 or later, which you may have to build. The package is tested on Ubuntu 24.04 and 26.04; Debian with the same library packages should work but is untested. | |
| 120 | + | ||
| 121 | + | ### What the packages provide | |
| 122 | + | ||
| 123 | + | The Arch and Debian packages provide: | |
| 105 | 124 | ||
| 106 | 125 | - `neferwl` with CAP_SYS_NICE for real-time scheduling. | |
| 107 | 126 | - A **NeferWL** session for display managers such as Ly, GDM and SDDM. | |
| @@ -109,6 +128,8 @@ The package provides: | |||
| 109 | 128 | ||
| 110 | 129 | Running `neferwl --session` directly also exports the display environment to D-Bus and systemd user services. See [Desktop integration](docs/desktop.md) for session setup. | |
| 111 | 130 | ||
| 131 | + | Copy `/usr/share/doc/neferwl/config.example` to `~/.config/neferwl/config` to start from the example config. | |
| 132 | + | ||
| 112 | 133 | ### Other distributions | |
| 113 | 134 | ||
| 114 | 135 | Download a `linux_amd64` or `linux_arm64` archive from [Releases](https://github.com/bnema/neferwl/releases) and verify it against `checksums.txt`. To build locally, run `make bin`; the binary is `bin/neferwl`. | |
| @@ -101,7 +101,26 @@ make install # build a package from HEAD and install it with pacman | |||||
| 101 | 101 | ||||
| 102 | `make pkg` builds the package without installing it. | 102 | `make pkg` builds the package without installing it. | ||
| 103 | 103 | ||||
| 104 | - | The package provides: | 104 | + | ### Ubuntu 24.04 and later |
| 105 | + | ||||
| 106 | + | Download the `.deb` for your architecture (`amd64` or `arm64`) and `checksums.txt` from [Releases](https://github.com/bnema/neferwl/releases), then install it with apt, which pulls the runtime dependencies: | |||
| 107 | + | ||||
| 108 | + | ```sh | |||
| 109 | + | sha256sum -c --ignore-missing checksums.txt | |||
| 110 | + | sudo apt install ./neferwl_<version>_amd64.deb | |||
| 111 | + | ``` | |||
| 112 | + | ||||
| 113 | + | Optional tools: | |||
| 114 | + | ||||
| 115 | + | ```sh | |||
| 116 | + | sudo apt install foot fuzzel xdg-desktop-portal-gtk xdg-desktop-portal-wlr | |||
| 117 | + | ``` | |||
| 118 | + | ||||
| 119 | + | X11 apps need [xwayland-satellite](https://github.com/Supreeeme/xwayland-satellite) 0.7 or later, which you may have to build. The package is tested on Ubuntu 24.04 and 26.04; Debian with the same library packages should work but is untested. | |||
| 120 | + | ||||
| 121 | + | ### What the packages provide | |||
| 122 | + | ||||
| 123 | + | The Arch and Debian packages provide: | |||
| 105 | 124 | ||||
| 106 | - `neferwl` with CAP_SYS_NICE for real-time scheduling. | 125 | - `neferwl` with CAP_SYS_NICE for real-time scheduling. | ||
| 107 | - A **NeferWL** session for display managers such as Ly, GDM and SDDM. | 126 | - A **NeferWL** session for display managers such as Ly, GDM and SDDM. | ||
| @@ -109,6 +128,8 @@ The package provides: | |||||
| 109 | 128 | ||||
| 110 | Running `neferwl --session` directly also exports the display environment to D-Bus and systemd user services. See [Desktop integration](docs/desktop.md) for session setup. | 129 | Running `neferwl --session` directly also exports the display environment to D-Bus and systemd user services. See [Desktop integration](docs/desktop.md) for session setup. | ||
| 111 | 130 | ||||
| 131 | + | Copy `/usr/share/doc/neferwl/config.example` to `~/.config/neferwl/config` to start from the example config. | |||
| 132 | + | ||||
| 112 | ### Other distributions | 133 | ### Other distributions | ||
| 113 | 134 | ||||
| 114 | Download a `linux_amd64` or `linux_arm64` archive from [Releases](https://github.com/bnema/neferwl/releases) and verify it against `checksums.txt`. To build locally, run `make bin`; the binary is `bin/neferwl`. | 135 | Download a `linux_amd64` or `linux_arm64` archive from [Releases](https://github.com/bnema/neferwl/releases) and verify it against `checksums.txt`. To build locally, run `make bin`; the binary is `bin/neferwl`. | ||
M docs/performance.md +1 -1
| @@ -14,7 +14,7 @@ How NeferWL keeps its CPU and memory use low, how to measure it, and the referen | |||
| 14 | 14 | - **Bounded capture.** Protocol requests and sync-file handles still need small allocations; pixel storage and worker batches are reused. At most 32 protocol requests are outstanding globally, with up to eight per output frame, one SHM-copy worker and two reusable GPU staging slots per output. Saturation fails requests instead of waiting or growing a queue. Two 4K slots use about 63 MiB of host-visible memory, capped at 128 MiB per output; HDR adds one GPU-local 8-bit conversion image (about 32 MiB at 4K, up to 64 MiB), outside the host-memory cap. Display capture resources are allocated on first capture and retained until the output stops. Hidden workspace capture uses a separate, demand-driven child renderer and pipeline with its own worker and two staging slots (up to 128 MiB host-visible memory), plus child render targets; each child image is capped at 256 MiB and 16384 pixels per side. The child retires once unused and idle, and is recreated for session or size changes. Copies cost GPU time and bandwidth. Capture of the displayed frame forces composition, and so does the capture indicator (red border or pill, shown while a session lives and for one second after each captured frame; see `docs/headless.md`), which also costs a second composition per capture frame because no capture holds it (a request waits at most 250 ms for the scene that shows its indicator, without drawing anything while it waits); hidden workspace capture can keep display scanout. Offscreen capture currently serves only a whole-workspace target and requests matching its exact physical dimensions, not crops. There is no per-client reservation of the shared request limit. | |
| 15 | 15 | - **Default GOGC.** The Go live heap is a few MB (client buffers live in shared and GPU memory), so the runtime default `GOGC=100` with a 256 MiB soft limit gives 2 collections on the tiled playback test where `GOGC=50` gave 13. `GOGC` and `GOMEMLIMIT` from the environment win. | |
| 16 | 16 | ||
| 17 | - | Output and input threads request real-time scheduling, and the Vulkan queue requests elevated priority. Both require CAP_SYS_NICE, which the Arch packages set on `/usr/bin/neferwl` at install. Apps launched by NeferWL inherit neither. Set `performance.realtime = false` to opt out. A binary built with `make bin` runs at normal priority unless you grant it: `sudo setcap cap_sys_nice+ep bin/neferwl`. | |
| 17 | + | Output and input threads request real-time scheduling, and the Vulkan queue requests elevated priority. Both require CAP_SYS_NICE, which the Arch and Debian packages set on `/usr/bin/neferwl` at install. Apps launched by NeferWL inherit neither. Set `performance.realtime = false` to opt out. A binary built with `make bin` runs at normal priority unless you grant it: `sudo setcap cap_sys_nice+ep bin/neferwl`. | |
| 18 | 18 | ||
| 19 | 19 | With the capability, the dynamic loader ignores `LD_PRELOAD` and `LD_LIBRARY_PATH` for NeferWL, and debuggers need root to attach. | |
| 20 | 20 | ||
| @@ -14,7 +14,7 @@ How NeferWL keeps its CPU and memory use low, how to measure it, and the referen | |||||
| 14 | - **Bounded capture.** Protocol requests and sync-file handles still need small allocations; pixel storage and worker batches are reused. At most 32 protocol requests are outstanding globally, with up to eight per output frame, one SHM-copy worker and two reusable GPU staging slots per output. Saturation fails requests instead of waiting or growing a queue. Two 4K slots use about 63 MiB of host-visible memory, capped at 128 MiB per output; HDR adds one GPU-local 8-bit conversion image (about 32 MiB at 4K, up to 64 MiB), outside the host-memory cap. Display capture resources are allocated on first capture and retained until the output stops. Hidden workspace capture uses a separate, demand-driven child renderer and pipeline with its own worker and two staging slots (up to 128 MiB host-visible memory), plus child render targets; each child image is capped at 256 MiB and 16384 pixels per side. The child retires once unused and idle, and is recreated for session or size changes. Copies cost GPU time and bandwidth. Capture of the displayed frame forces composition, and so does the capture indicator (red border or pill, shown while a session lives and for one second after each captured frame; see `docs/headless.md`), which also costs a second composition per capture frame because no capture holds it (a request waits at most 250 ms for the scene that shows its indicator, without drawing anything while it waits); hidden workspace capture can keep display scanout. Offscreen capture currently serves only a whole-workspace target and requests matching its exact physical dimensions, not crops. There is no per-client reservation of the shared request limit. | 14 | - **Bounded capture.** Protocol requests and sync-file handles still need small allocations; pixel storage and worker batches are reused. At most 32 protocol requests are outstanding globally, with up to eight per output frame, one SHM-copy worker and two reusable GPU staging slots per output. Saturation fails requests instead of waiting or growing a queue. Two 4K slots use about 63 MiB of host-visible memory, capped at 128 MiB per output; HDR adds one GPU-local 8-bit conversion image (about 32 MiB at 4K, up to 64 MiB), outside the host-memory cap. Display capture resources are allocated on first capture and retained until the output stops. Hidden workspace capture uses a separate, demand-driven child renderer and pipeline with its own worker and two staging slots (up to 128 MiB host-visible memory), plus child render targets; each child image is capped at 256 MiB and 16384 pixels per side. The child retires once unused and idle, and is recreated for session or size changes. Copies cost GPU time and bandwidth. Capture of the displayed frame forces composition, and so does the capture indicator (red border or pill, shown while a session lives and for one second after each captured frame; see `docs/headless.md`), which also costs a second composition per capture frame because no capture holds it (a request waits at most 250 ms for the scene that shows its indicator, without drawing anything while it waits); hidden workspace capture can keep display scanout. Offscreen capture currently serves only a whole-workspace target and requests matching its exact physical dimensions, not crops. There is no per-client reservation of the shared request limit. | ||
| 15 | - **Default GOGC.** The Go live heap is a few MB (client buffers live in shared and GPU memory), so the runtime default `GOGC=100` with a 256 MiB soft limit gives 2 collections on the tiled playback test where `GOGC=50` gave 13. `GOGC` and `GOMEMLIMIT` from the environment win. | 15 | - **Default GOGC.** The Go live heap is a few MB (client buffers live in shared and GPU memory), so the runtime default `GOGC=100` with a 256 MiB soft limit gives 2 collections on the tiled playback test where `GOGC=50` gave 13. `GOGC` and `GOMEMLIMIT` from the environment win. | ||
| 16 | 16 | ||||
| 17 | - | Output and input threads request real-time scheduling, and the Vulkan queue requests elevated priority. Both require CAP_SYS_NICE, which the Arch packages set on `/usr/bin/neferwl` at install. Apps launched by NeferWL inherit neither. Set `performance.realtime = false` to opt out. A binary built with `make bin` runs at normal priority unless you grant it: `sudo setcap cap_sys_nice+ep bin/neferwl`. | 17 | + | Output and input threads request real-time scheduling, and the Vulkan queue requests elevated priority. Both require CAP_SYS_NICE, which the Arch and Debian packages set on `/usr/bin/neferwl` at install. Apps launched by NeferWL inherit neither. Set `performance.realtime = false` to opt out. A binary built with `make bin` runs at normal priority unless you grant it: `sudo setcap cap_sys_nice+ep bin/neferwl`. |
| 18 | 18 | ||||
| 19 | With the capability, the dynamic loader ignores `LD_PRELOAD` and `LD_LIBRARY_PATH` for NeferWL, and debuggers need root to attach. | 19 | With the capability, the dynamic loader ignores `LD_PRELOAD` and `LD_LIBRARY_PATH` for NeferWL, and debuggers need root to attach. | ||
| 20 | 20 | ||||