mirror of
https://github.com/CloudNebulaProject/wayray.git
synced 2026-04-10 13:10:41 +00:00
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:
parent
c32ed5531d
commit
643c4f042d
23 changed files with 90 additions and 77 deletions
19
CLAUDE.md
19
CLAUDE.md
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -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>`
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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]
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -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 .
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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]
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 |
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue