Rename binaries to illumos-style short names

Follow illumos CLI naming conventions (zoneadm, svcadm, dladm):

  wayray-server           → wrsrvd
  wayray-client           → wrclient
  wayray-ctl              → wradm
  wayray-greeter          → wrlogin
  wayray-session-launcher → wrsessd
  wayray-gateway          → wrgw
  wayray-wm-floating      → wr-wm-floating
  wayray-wm-tiling        → wr-wm-tiling

Updated across all 23 documentation files, ADRs, book pages,
roadmap, and CLAUDE.md. Added binary name table to CLAUDE.md.
This commit is contained in:
Till Wegmueller 2026-03-29 00:34:19 +01:00
parent c32ed5531d
commit 643c4f042d
No known key found for this signature in database
23 changed files with 90 additions and 77 deletions

View file

@ -25,10 +25,10 @@ WayRay is a modern reimplementation of Oracle/Sun's SunRay thin client architect
WayRay consists of four main components: WayRay consists of four main components:
1. **wayray-server** (compositor) - Smithay-based Wayland compositor that runs applications, captures framebuffers, and transmits them to clients. Exposes a pluggable WM protocol. 1. **wrsrvd** (compositor) - Smithay-based Wayland compositor that runs applications, captures framebuffers, and transmits them to clients. Exposes a pluggable WM protocol.
2. **wayray-client** (viewer) - Lightweight display client that decodes frames, renders them locally, captures input, and sends it to the server 2. **wrclient** (viewer) - Lightweight display client that decodes frames, renders them locally, captures input, and sends it to the server
3. **wayray-protocol** - Shared protocol definitions for the WayRay wire protocol over QUIC 3. **wayray-protocol** - Shared protocol definitions for the WayRay wire protocol over QUIC
4. **wayray-ctl** - CLI management tool for server/session administration 4. **wradm** - CLI management tool for server/session administration
## Documentation ## Documentation
@ -54,6 +54,19 @@ WayRay consists of four main components:
- Audio: PipeWire (Linux) or PulseAudio (illumos/Linux) behind trait abstraction - Audio: PipeWire (Linux) or PulseAudio (illumos/Linux) behind trait abstraction
- `shm_open` fallback when `memfd_create` unavailable (illumos portability) - `shm_open` fallback when `memfd_create` unavailable (illumos portability)
## Binary Names (illumos-style)
| Binary | Purpose |
|--------|---------|
| `wrsrvd` | Server compositor daemon |
| `wrclient` | Client viewer |
| `wradm` | Administration CLI (`zoneadm`/`svcadm` pattern) |
| `wrlogin` | Greeter / login screen (`dtlogin` heritage) |
| `wrsessd` | Session launcher daemon |
| `wrgw` | Protocol gateway service |
| `wr-wm-floating` | Default floating WM |
| `wr-wm-tiling` | Reference tiling WM |
## Conventions ## Conventions
- Use miette's diagnostic pattern for all user-facing errors with helpful messages - Use miette's diagnostic pattern for all user-facing errors with helpful messages

View file

@ -32,7 +32,7 @@
# Administration # Administration
- [wayray-ctl Reference](./admin/wayray-ctl.md) - [wradm Reference](./admin/wradm.md)
- [Security](./admin/security.md) - [Security](./admin/security.md)
- [Monitoring](./admin/monitoring.md) - [Monitoring](./admin/monitoring.md)
- [Troubleshooting](./admin/troubleshooting.md) - [Troubleshooting](./admin/troubleshooting.md)

View file

@ -17,7 +17,7 @@ WayRay exposes metrics for monitoring:
WayRay uses structured logging via the `tracing` crate. Configure log levels via `RUST_LOG`: WayRay uses structured logging via the `tracing` crate. Configure log levels via `RUST_LOG`:
```bash ```bash
RUST_LOG=wayray=info wayray-server # Standard RUST_LOG=wayray=info wrsrvd # Standard
RUST_LOG=wayray=debug wayray-server # Verbose RUST_LOG=wayray=debug wrsrvd # Verbose
RUST_LOG=wayray=trace wayray-server # Everything RUST_LOG=wayray=trace wrsrvd # Everything
``` ```

View file

@ -7,7 +7,7 @@
### Client can't connect to server ### Client can't connect to server
- Check that UDP port 4433 is open - Check that UDP port 4433 is open
- Verify TLS certificates are correct - Verify TLS certificates are correct
- Check server logs: `RUST_LOG=wayray=debug wayray-server` - Check server logs: `RUST_LOG=wayray=debug wrsrvd`
### High latency / poor responsiveness ### High latency / poor responsiveness
- Check network latency: `ping <server>` - Check network latency: `ping <server>`

View file

@ -1,11 +1,11 @@
# wayray-ctl Reference # wradm Reference
> This page will be expanded as the management tool is implemented. > This page will be expanded as the management tool is implemented.
## Commands ## Commands
``` ```
wayray-ctl wradm
session session
list List all sessions list List all sessions
info <id> Show session details info <id> Show session details

View file

@ -4,7 +4,7 @@
## Configuration File ## Configuration File
WayRay client reads configuration from `wayray-client.toml`: WayRay client reads configuration from `wrclient.toml`:
```toml ```toml
[connection] [connection]

View file

@ -5,7 +5,7 @@
## Basic Connection ## Basic Connection
```bash ```bash
wayray-client --server <host>:<port> --token <token> wrclient --server <host>:<port> --token <token>
``` ```
## Connection Troubleshooting ## Connection Troubleshooting

View file

@ -8,7 +8,7 @@ The simplest token type. A UUID is generated and stored on the client.
```bash ```bash
# Generate a new software token # Generate a new software token
wayray-client token generate wrclient token generate
# Output: Token: a1b2c3d4-e5f6-7890-abcd-ef1234567890 # Output: Token: a1b2c3d4-e5f6-7890-abcd-ef1234567890
``` ```
@ -18,10 +18,10 @@ Requires a PC/SC compatible smart card reader.
```bash ```bash
# List available smart card readers # List available smart card readers
wayray-client token list-readers wrclient token list-readers
# Use smart card for session identity # Use smart card for session identity
wayray-client --token-type smartcard --server <host>:<port> wrclient --token-type smartcard --server <host>:<port>
``` ```
## NFC Tokens ## NFC Tokens
@ -30,5 +30,5 @@ Requires an NFC reader.
```bash ```bash
# Use NFC for session identity # Use NFC for session identity
wayray-client --token-type nfc --server <host>:<port> wrclient --token-type nfc --server <host>:<port>
``` ```

View file

@ -16,21 +16,21 @@ cargo build
cargo build --release cargo build --release
# Build only the server # Build only the server
cargo build -p wayray-server cargo build -p wrsrvd
# Build only the client # Build only the client
cargo build -p wayray-client cargo build -p wrclient
# Run tests # Run tests
cargo test --workspace cargo test --workspace
# Run with logging # Run with logging
RUST_LOG=wayray=debug cargo run -p wayray-server RUST_LOG=wayray=debug cargo run -p wrsrvd
``` ```
## Feature Flags ## Feature Flags
### wayray-server ### wrsrvd
| Feature | Default | Description | | Feature | Default | Description |
|---------|---------|-------------| |---------|---------|-------------|
@ -39,7 +39,7 @@ RUST_LOG=wayray=debug cargo run -p wayray-server
| `xwayland` | no | X11 application support | | `xwayland` | no | X11 application support |
| `vaapi` | no | Hardware video encoding | | `vaapi` | no | Hardware video encoding |
### wayray-client ### wrclient
| Feature | Default | Description | | Feature | Default | Description |
|---------|---------|-------------| |---------|---------|-------------|
@ -53,7 +53,7 @@ RUST_LOG=wayray=debug cargo run -p wayray-server
During development, run the WayRay server nested inside your existing desktop using the Winit backend: During development, run the WayRay server nested inside your existing desktop using the Winit backend:
```bash ```bash
cargo run -p wayray-server -- --backend winit cargo run -p wrsrvd -- --backend winit
``` ```
This opens a window on your desktop that acts as the WayRay display. No need for a separate TTY. This opens a window on your desktop that acts as the WayRay display. No need for a separate TTY.
@ -62,8 +62,8 @@ This opens a window on your desktop that acts as the WayRay display. No need for
```bash ```bash
# Terminal 1: Start server # Terminal 1: Start server
cargo run -p wayray-server -- --backend winit --listen 127.0.0.1:4433 cargo run -p wrsrvd -- --backend winit --listen 127.0.0.1:4433
# Terminal 2: Start client # Terminal 2: Start client
cargo run -p wayray-client -- --server 127.0.0.1:4433 --token dev cargo run -p wrclient -- --server 127.0.0.1:4433 --token dev
``` ```

View file

@ -43,15 +43,15 @@ cd wayray
cargo build --release cargo build --release
# Binaries are in target/release/ # Binaries are in target/release/
ls target/release/wayray-server target/release/wayray-client target/release/wayray-ctl ls target/release/wrsrvd target/release/wrclient target/release/wradm
``` ```
### Docker ### Docker
```dockerfile ```dockerfile
# Server image available # Server image available
docker pull wayray/wayray-server:latest docker pull wayray/wrsrvd:latest
# Or build locally # Or build locally
docker build -t wayray-server -f docker/server.Dockerfile . docker build -t wrsrvd -f docker/server.Dockerfile .
``` ```

View file

@ -4,7 +4,7 @@
WayRay consists of four components: WayRay consists of four components:
### wayray-server ### wrsrvd
The server is a Wayland compositor built on [Smithay](https://github.com/Smithay/smithay). It: The server is a Wayland compositor built on [Smithay](https://github.com/Smithay/smithay). It:
@ -17,7 +17,7 @@ The server is a Wayland compositor built on [Smithay](https://github.com/Smithay
The server runs on Linux and can operate headless (no GPU required) or with GPU acceleration. The server runs on Linux and can operate headless (no GPU required) or with GPU acceleration.
### wayray-client ### wrclient
The client is a lightweight viewer application that: The client is a lightweight viewer application that:
@ -34,7 +34,7 @@ The client runs on Linux, with macOS and Windows support planned.
A shared library defining the wire protocol between server and client. This ensures both sides agree on message formats at compile time. A shared library defining the wire protocol between server and client. This ensures both sides agree on message formats at compile time.
### wayray-ctl ### wradm
A command-line tool for administering WayRay servers: A command-line tool for administering WayRay servers:

View file

@ -7,7 +7,7 @@ This guide gets you running a WayRay server and connecting a client in minutes.
WayRay requires TLS for all connections. For development, generate self-signed certificates: WayRay requires TLS for all connections. For development, generate self-signed certificates:
```bash ```bash
wayray-ctl cert generate --output ./certs wradm cert generate --output ./certs
``` ```
This creates `certs/server.crt` and `certs/server.key`. This creates `certs/server.crt` and `certs/server.key`.
@ -15,7 +15,7 @@ This creates `certs/server.crt` and `certs/server.key`.
## 2. Start the Server ## 2. Start the Server
```bash ```bash
wayray-server \ wrsrvd \
--cert ./certs/server.crt \ --cert ./certs/server.crt \
--key ./certs/server.key \ --key ./certs/server.key \
--listen 0.0.0.0:4433 \ --listen 0.0.0.0:4433 \
@ -29,7 +29,7 @@ The server starts and listens for client connections on port 4433.
On another machine (or the same machine for testing): On another machine (or the same machine for testing):
```bash ```bash
wayray-client \ wrclient \
--server 192.168.1.100:4433 \ --server 192.168.1.100:4433 \
--token my-dev-token \ --token my-dev-token \
--ca ./certs/server.crt # Trust the self-signed cert --ca ./certs/server.crt # Trust the self-signed cert
@ -58,7 +58,7 @@ nautilus & # File manager
3. Your applications keep running on the server 3. Your applications keep running on the server
4. Reconnect with the same token: 4. Reconnect with the same token:
```bash ```bash
wayray-client --server 192.168.1.100:4433 --token my-dev-token wrclient --server 192.168.1.100:4433 --token my-dev-token
``` ```
5. Your desktop reappears with all windows intact 5. Your desktop reappears with all windows intact

View file

@ -4,7 +4,7 @@
## Configuration File ## Configuration File
WayRay server reads configuration from `wayray-server.toml`: WayRay server reads configuration from `wrsrvd.toml`:
```toml ```toml
[server] [server]

View file

@ -5,7 +5,7 @@
## Standalone ## Standalone
```bash ```bash
wayray-server --config /etc/wayray/wayray-server.toml wrsrvd --config /etc/wayray/wrsrvd.toml
``` ```
## Systemd Service ## Systemd Service
@ -17,7 +17,7 @@ After=network.target
[Service] [Service]
Type=simple Type=simple
ExecStart=/usr/bin/wayray-server --config /etc/wayray/wayray-server.toml ExecStart=/usr/bin/wrsrvd --config /etc/wayray/wrsrvd.toml
Restart=always Restart=always
User=wayray User=wayray
Group=wayray Group=wayray
@ -30,8 +30,8 @@ WantedBy=multi-user.target
```bash ```bash
docker run -d \ docker run -d \
--name wayray-server \ --name wrsrvd \
-p 4433:4433/udp \ -p 4433:4433/udp \
-v /etc/wayray:/etc/wayray:ro \ -v /etc/wayray:/etc/wayray:ro \
wayray/wayray-server:latest wayray/wrsrvd:latest
``` ```

View file

@ -13,14 +13,14 @@
```bash ```bash
# List active sessions # List active sessions
wayray-ctl session list wradm session list
# View session details # View session details
wayray-ctl session info <session-id> wradm session info <session-id>
# Terminate a session # Terminate a session
wayray-ctl session kill <session-id> wradm session kill <session-id>
# Set session timeout # Set session timeout
wayray-ctl session set-timeout <session-id> 48h wradm session set-timeout <session-id> 48h
``` ```

View file

@ -13,7 +13,7 @@ WayRay consists of multiple binaries and shared libraries. We need a project str
wayray/ wayray/
├── Cargo.toml # Workspace root ├── Cargo.toml # Workspace root
├── crates/ ├── crates/
│ ├── wayray-server/ # Wayland compositor + frame encoder + network server │ ├── wrsrvd/ # Wayland compositor + frame encoder + network server
│ │ ├── Cargo.toml │ │ ├── Cargo.toml
│ │ └── src/ │ │ └── src/
│ │ ├── main.rs │ │ ├── main.rs
@ -22,7 +22,7 @@ wayray/
│ │ ├── network/ # QUIC server, session management │ │ ├── network/ # QUIC server, session management
│ │ └── audio/ # PipeWire integration │ │ └── audio/ # PipeWire integration
│ │ │ │
│ ├── wayray-client/ # Remote viewer + input capture + decoder │ ├── wrclient/ # Remote viewer + input capture + decoder
│ │ ├── Cargo.toml │ │ ├── Cargo.toml
│ │ └── src/ │ │ └── src/
│ │ ├── main.rs │ │ ├── main.rs
@ -40,7 +40,7 @@ wayray/
│ │ ├── codec.rs # Serialization/deserialization │ │ ├── codec.rs # Serialization/deserialization
│ │ └── version.rs # Protocol versioning │ │ └── version.rs # Protocol versioning
│ │ │ │
│ └── wayray-ctl/ # CLI management tool │ └── wradm/ # CLI management tool
│ ├── Cargo.toml │ ├── Cargo.toml
│ └── src/ │ └── src/
│ └── main.rs │ └── main.rs
@ -54,7 +54,7 @@ wayray/
- `crates/` directory keeps workspace root clean - `crates/` directory keeps workspace root clean
- Protocol crate ensures server and client agree on wire format at compile time - Protocol crate ensures server and client agree on wire format at compile time
- Server and client have completely different dependency trees (smithay vs wgpu) - Server and client have completely different dependency trees (smithay vs wgpu)
- `wayray-ctl` as separate binary avoids bloating server/client with admin dependencies - `wradm` as separate binary avoids bloating server/client with admin dependencies
- Integration tests at workspace root can spin up server + client together - Integration tests at workspace root can spin up server + client together
## Consequences ## Consequences

View file

@ -93,7 +93,7 @@ This is analogous to:
- Sway: greetd + gtkgreet/regreet - Sway: greetd + gtkgreet/regreet
- GNOME: GDM + gnome-shell (but GDM IS a compositor; our greeter is a client) - GNOME: GDM + gnome-shell (but GDM IS a compositor; our greeter is a client)
We provide a **reference session launcher** (`wayray-session-launcher`) but the interface is a simple protocol/hook so admins can replace it with their own. We provide a **reference session launcher** (`wrsessd`) but the interface is a simple protocol/hook so admins can replace it with their own.
### The Greeter ### The Greeter
@ -103,7 +103,7 @@ A Wayland client application that:
- On success, signals the session launcher to proceed with user session setup - On success, signals the session launcher to proceed with user session setup
- Exits - Exits
We ship a reference greeter (`wayray-greeter`) but any Wayland client implementing the greeter protocol works. Community can build GTK, Qt, or TUI-based greeters. We ship a reference greeter (`wrlogin`) but any Wayland client implementing the greeter protocol works. Community can build GTK, Qt, or TUI-based greeters.
### The User Session (Desktop Experience) ### The User Session (Desktop Experience)
@ -113,8 +113,8 @@ After authentication, the session launcher starts the user's configured environm
# Example: ~/.config/wayray/session.toml # Example: ~/.config/wayray/session.toml
# Window manager (connects via wayray_wm_manager_v1 protocol) # Window manager (connects via wayray_wm_manager_v1 protocol)
wm = "wayray-wm-floating" wm = "wr-wm-floating"
# wm = "wayray-wm-tiling" # wm = "wr-wm-tiling"
# wm = "/usr/local/bin/my-custom-wm" # wm = "/usr/local/bin/my-custom-wm"
# Panel (layer-shell Wayland client) # Panel (layer-shell Wayland client)

View file

@ -116,7 +116,7 @@ Wayland apps → Smithay compositor → PixmanRenderer → CPU buffer
### Tier 2: Loopback Optimization (Local Server+Client) ### Tier 2: Loopback Optimization (Local Server+Client)
When wayray-server and wayray-client run on the same machine, skip encoding entirely: When wrsrvd and wrclient run on the same machine, skip encoding entirely:
1. Server renders to shared memory ring buffer (`shm_open` + `mmap`) 1. Server renders to shared memory ring buffer (`shm_open` + `mmap`)
2. Client reads framebuffers directly from shared memory 2. Client reads framebuffers directly from shared memory
@ -125,7 +125,7 @@ When wayray-server and wayray-client run on the same machine, skip encoding enti
``` ```
Wayland apps → Smithay compositor → PixmanRenderer → shared memory Wayland apps → Smithay compositor → PixmanRenderer → shared memory
→ wayray-client (local) → fbdev or X11 SHM → screen → wrclient (local) → fbdev or X11 SHM → screen
``` ```
Performance: sub-millisecond frame latency (vs 5-30ms with encode/decode), near-zero CPU overhead for transport, pixel-perfect quality. Performance: sub-millisecond frame latency (vs 5-30ms with encode/decode), near-zero CPU overhead for transport, pixel-perfect quality.

View file

@ -90,7 +90,7 @@ The greeter is the natural integration point -- it runs before any user context
### Pre-Auth Ephemeral Session ### Pre-Auth Ephemeral Session
The greeter itself needs a Wayland session to display the login UI, but no user is authenticated yet. The session launcher creates a minimal **ephemeral session** running as a service user (e.g., `wayray-greeter`): The greeter itself needs a Wayland session to display the login UI, but no user is authenticated yet. The session launcher creates a minimal **ephemeral session** running as a service user (e.g., `wrlogin`):
- Limited compositor session (no user apps, no shell access) - Limited compositor session (no user apps, no shell access)
- Only the greeter client is allowed to connect - Only the greeter client is allowed to connect
- Destroyed after authentication succeeds or times out - Destroyed after authentication succeeds or times out
@ -259,7 +259,7 @@ What changes is how the greeter *arrives* at that identity.
Rather than hardcoding auth methods, the greeter supports **auth plugins**: Rather than hardcoding auth methods, the greeter supports **auth plugins**:
``` ```
wayray-greeter wrlogin
├── auth-local (username + password → PAM) ├── auth-local (username + password → PAM)
├── auth-oidc (OAuth/OIDC device code or auth code) ├── auth-oidc (OAuth/OIDC device code or auth code)
├── auth-smartcard (PC/SC → certificate → PAM or IdP) ├── auth-smartcard (PC/SC → certificate → PAM or IdP)

View file

@ -352,7 +352,7 @@ Scenario 3 in practice:
``` ```
Company B admin: Company B admin:
1. Publishes app "internal-tool" for federation 1. Publishes app "internal-tool" for federation
2. Creates invite: wayray-ctl federation invite \ 2. Creates invite: wradm federation invite \
--app internal-tool \ --app internal-tool \
--peer wayray.companya.com \ --peer wayray.companya.com \
--user jdoe@companya.com \ --user jdoe@companya.com \
@ -360,7 +360,7 @@ Company B admin:
Company A user (jdoe): Company A user (jdoe):
1. Sits at their normal WayRay terminal 1. Sits at their normal WayRay terminal
2. Opens federation panel or runs: wayray-ctl federation accept <invite-url> 2. Opens federation panel or runs: wradm federation accept <invite-url>
3. OIDC authentication confirms jdoe's identity to Company B 3. OIDC authentication confirms jdoe's identity to Company B
4. Company B's "internal-tool" appears as a window in jdoe's desktop 4. Company B's "internal-tool" appears as a window in jdoe's desktop
5. Window has "Trusted" border and "Company B" origin badge 5. Window has "Trusted" border and "Company B" origin badge

View file

@ -171,7 +171,7 @@ The user sees: "Connect to Customer D" → windows appear. The gateway handles V
│ │ ForeignWindow protocol (Unix socket or QUIC) │ │ │ ForeignWindow protocol (Unix socket or QUIC) │
│ │ │ │ │ │
│ ┌─┴────────────────────────────────────────────────────┐ │ │ ┌─┴────────────────────────────────────────────────────┐ │
│ │ Protocol Gateway Service (wayray-gateway) │ │ │ │ Protocol Gateway Service (wrgw) │ │
│ │ │ │ │ │ │ │
│ │ ┌─────────────┐ ┌───────────────┐ ┌───────────┐ │ │ │ │ ┌─────────────┐ ┌───────────────┐ ┌───────────┐ │ │
│ │ │ VPN Client │ │ RDP Client │ │ Surface │ │ │ │ │ │ VPN Client │ │ RDP Client │ │ Surface │ │ │
@ -273,25 +273,25 @@ name = "Customer D"
auto_workspace = true auto_workspace = true
``` ```
### Gateway Management via wayray-ctl ### Gateway Management via wradm
```bash ```bash
# List configured gateways # List configured gateways
wayray-ctl gateway list wradm gateway list
# Connect to a gateway # Connect to a gateway
wayray-ctl gateway connect customer-d wradm gateway connect customer-d
# Status of active gateways # Status of active gateways
wayray-ctl gateway status wradm gateway status
# customer-d: connected (VPN: up, RDP: 3 windows active) # customer-d: connected (VPN: up, RDP: 3 windows active)
# customer-b: connected (WayRay federation: 2 apps) # customer-b: connected (WayRay federation: 2 apps)
# Disconnect # Disconnect
wayray-ctl gateway disconnect customer-d wradm gateway disconnect customer-d
# Import a gateway profile (shared by team lead / IT admin) # Import a gateway profile (shared by team lead / IT admin)
wayray-ctl gateway import customer-d.toml wradm gateway import customer-d.toml
``` ```
### Network Isolation ### Network Isolation
@ -375,14 +375,14 @@ Putting it all together:
→ Workspace 1: "My Desktop" with email, chat, docs → Workspace 1: "My Desktop" with email, chat, docs
09:00 - Customer B maintenance window 09:00 - Customer B maintenance window
→ wayray-ctl gateway connect customer-b → wradm gateway connect customer-b
→ VPN tunnel establishes automatically → VPN tunnel establishes automatically
→ Workspace 2 appears: "Customer B" → Workspace 2 appears: "Customer B"
→ SAP GUI and monitoring console open seamlessly → SAP GUI and monitoring console open seamlessly
→ Fix the issue, close the ticket in customer's Jira → Fix the issue, close the ticket in customer's Jira
10:30 - Disconnect Customer B 10:30 - Disconnect Customer B
→ wayray-ctl gateway disconnect customer-b → wradm gateway disconnect customer-b
→ VPN torn down, workspace closes → VPN torn down, workspace closes
→ Back to Workspace 1 → Back to Workspace 1

View file

@ -3,7 +3,7 @@
## Phase 0: Foundation (Weeks 1-2) ## Phase 0: Foundation (Weeks 1-2)
### 0.1 Project Structure ### 0.1 Project Structure
- Set up Cargo workspace with four crates: `wayray-server`, `wayray-client`, `wayray-protocol`, `wayray-ctl` - Set up Cargo workspace with four crates: `wrsrvd`, `wrclient`, `wayray-protocol`, `wradm`
- Configure shared dependencies, feature flags, CI (Linux + illumos) - Configure shared dependencies, feature flags, CI (Linux + illumos)
- Set up tracing/logging infrastructure with miette error handling - Set up tracing/logging infrastructure with miette error handling
- Smithay with `default-features = false` + portable features only in core - Smithay with `default-features = false` + portable features only in core
@ -30,8 +30,8 @@
- Version negotiation and capability exchange - Version negotiation and capability exchange
### 1.2 QUIC Transport Layer ### 1.2 QUIC Transport Layer
- Implement QUIC server (quinn) in wayray-server - Implement QUIC server (quinn) in wrsrvd
- Implement QUIC client (quinn) in wayray-client - Implement QUIC client (quinn) in wrclient
- Stream mapping: - Stream mapping:
- Stream 0: Control channel (session mgmt, capabilities) - Stream 0: Control channel (session mgmt, capabilities)
- Stream 1: Display channel (frame updates, damage regions) - Stream 1: Display channel (frame updates, damage regions)
@ -52,7 +52,7 @@
## Phase 2: Client Viewer (Weeks 5-7) ## Phase 2: Client Viewer (Weeks 5-7)
### 2.1 Display Client ### 2.1 Display Client
- Implement wayray-client as a standalone application - Implement wrclient as a standalone application
- Use winit + wgpu for cross-platform display - Use winit + wgpu for cross-platform display
- Frame decoding pipeline: receive -> decompress -> decode -> upload to GPU -> display - Frame decoding pipeline: receive -> decompress -> decode -> upload to GPU -> display
- Double-buffered rendering with VSync - Double-buffered rendering with VSync
@ -78,7 +78,7 @@
- Generate Rust bindings via wayland-scanner - Generate Rust bindings via wayland-scanner
### 2.5.2 WM Protocol Server (in compositor) ### 2.5.2 WM Protocol Server (in compositor)
- Implement WM global in wayray-server - Implement WM global in wrsrvd
- Window lifecycle events (new, closed, properties) - Window lifecycle events (new, closed, properties)
- Manage phase: receive policy decisions, send configures - Manage phase: receive policy decisions, send configures
- Render phase: apply positions/z-order atomically - Render phase: apply positions/z-order atomically
@ -91,7 +91,7 @@
- Yields to external WM on connect - Yields to external WM on connect
### 2.5.4 Example Tiling WM ### 2.5.4 Example Tiling WM
- Ship a reference tiling WM as a separate binary (`wayray-wm-tiling`) - Ship a reference tiling WM as a separate binary (`wr-wm-tiling`)
- Demonstrates the protocol for third-party WM developers - Demonstrates the protocol for third-party WM developers
- Basic BSP tiling with keyboard-driven focus - Basic BSP tiling with keyboard-driven focus
@ -104,12 +104,12 @@
### 3.2 Greeter and Session Launch ### 3.2 Greeter and Session Launch
- Define session launcher interface (events over Unix socket: session_requested, session_authenticated, session_logout) - Define session launcher interface (events over Unix socket: session_requested, session_authenticated, session_logout)
- Implement reference session launcher (`wayray-session-launcher`) that: - Implement reference session launcher (`wrsessd`) that:
- Receives "new session needed" events from WayRay - Receives "new session needed" events from WayRay
- Creates user environment (delegates to PAM, system tools) - Creates user environment (delegates to PAM, system tools)
- Starts WayRay compositor session for the user - Starts WayRay compositor session for the user
- Launches greeter as first Wayland client - Launches greeter as first Wayland client
- Implement reference greeter (`wayray-greeter`) as a Wayland client: - Implement reference greeter (`wrlogin`) as a Wayland client:
- Login form (username + password) - Login form (username + password)
- Authenticates via PAM through session launcher - Authenticates via PAM through session launcher
- On success, session launcher starts user's configured session (WM, panel, apps) - On success, session launcher starts user's configured session (WM, panel, apps)
@ -160,7 +160,7 @@
## Phase 5: Production Hardening (Weeks 14-17) ## Phase 5: Production Hardening (Weeks 14-17)
### 5.1 Platform-Specific Backends ### 5.1 Platform-Specific Backends
- Linux: DRM/KMS backend for running wayray-server on hardware (optional, feature-gated) - Linux: DRM/KMS backend for running wrsrvd on hardware (optional, feature-gated)
- Linux: Multi-GPU support via MultiRenderer - Linux: Multi-GPU support via MultiRenderer
- Linux: Session management via logind/libseat - Linux: Session management via logind/libseat
- illumos: Custom input backend for `/dev/kbd` + `/dev/mouse` (local console use) - illumos: Custom input backend for `/dev/kbd` + `/dev/mouse` (local console use)
@ -187,7 +187,7 @@
## Phase 6: Management & Operations (Weeks 16-20) ## Phase 6: Management & Operations (Weeks 16-20)
### 6.1 Administration ### 6.1 Administration
- CLI tool: `wayray-ctl` for server/session management - CLI tool: `wradm` for server/session management
- REST API for external integration - REST API for external integration
- Session monitoring: active sessions, resource usage, network stats - Session monitoring: active sessions, resource usage, network stats

View file

@ -181,7 +181,7 @@ WayRay is a compositor, not a desktop environment or login system.
| Compositor | X server (Xnewt) | Wayland (Smithay) | | Compositor | X server (Xnewt) | Wayland (Smithay) |
| Client Hardware | Purpose-built DTU | Any Linux/macOS/Windows device | | Client Hardware | Purpose-built DTU | Any Linux/macOS/Windows device |
| Session Mobility | Smart card | Pluggable tokens (smart card, NFC, software) | | Session Mobility | Smart card | Pluggable tokens (smart card, NFC, software) |
| Login Screen | dtlogin (X11 client) | wayray-greeter (Wayland client) | | Login Screen | dtlogin (X11 client) | wrlogin (Wayland client) |
| Desktop | CDE/GNOME on X11 | Composable: pluggable WM + panel + launcher | | Desktop | CDE/GNOME on X11 | Composable: pluggable WM + panel + launcher |
| Audio | Custom ALP channel | Opus over QUIC | | Audio | Custom ALP channel | Opus over QUIC |
| USB Forwarding | Custom | Userspace over QUIC | | USB Forwarding | Custom | Userspace over QUIC |