docs: distill the retired workstation's KB pages into general pages
Frank's call: no per-host graveyard. The four /system/dankware/ pages carried two pieces of knowledge that outlive the box, and one that does not. Distilled: - omp-docs/system/network.md (new) — LAN topology plus the multi-link resolver law: a client with two +DefaultRoute links flaps its DNS, and the fix is a static per-connection resolver, not resolved.conf. Keeps the flush-caches-loop verification, because one successful dig proves nothing. - omp-docs/tools/niri/displays.md (new) — the multi-monitor rig: portrait transforms, absolute positions, auto-placed third panel, the iGPU render-node pin, and the three failure modes (duplicate output blocks, positions that do not reflow, a mode the panel cannot drive). Dropped: the machine's own spec sheet (CPU/GPU/PCI/NVMe inventory for a box Frank sold) and its quick-facts table. The OS and userspace facts it repeated already live in tools/cachyos.md. omp-docs/system/dankware/ moved to .AGENTTRASH/20260928-retired-workstation/ (not deleted; git history holds it too). system/index.md and the niri index repoint; niri's [[displays]] wikilink now resolves to the new page instead of the trashed one. kb-lint: 0 violations.
This commit is contained in:
@@ -1,123 +0,0 @@
|
||||
---
|
||||
type: reference
|
||||
title: Display Configuration
|
||||
description: Three-monitor display setup on dankware — dual Samsung Odyssey G75F (portrait) and internal BOE panel.
|
||||
tags:
|
||||
- display
|
||||
- monitors
|
||||
- niri
|
||||
- unverified
|
||||
generated:
|
||||
by: chief-designer/agent
|
||||
at: 2026-08-26T00:00:00Z
|
||||
status: stable
|
||||
verified: 2026-08-28
|
||||
|
||||
# Display Configuration — dankware
|
||||
|
||||
Three displays in a horizontal arrangement. Two external Samsung Odyssey G75F monitors in portrait orientation flank the internal laptop panel.
|
||||
|
||||
---
|
||||
|
||||
## Layout
|
||||
|
||||
```
|
||||
┌──────────────┬──────────────┬──────────────┐
|
||||
│ │ │ │
|
||||
│ DP-1 │ DP-3 │ eDP-1 │
|
||||
│ Samsung │ Samsung │ BOE │
|
||||
│ 1920x1200 │ 1920x1200 │ 2560x1600 │
|
||||
│ Portrait │ Portrait │ Landscape │
|
||||
│ 90° rotate │ 270° rotate │ 1.5x scale │
|
||||
│ │ │ │
|
||||
└──────────────┴──────────────┴──────────────┘
|
||||
x=0,0 x=1200,0 auto-placed
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Display Specifications
|
||||
|
||||
### DP-1 — Samsung Odyssey G75F (Left)
|
||||
|
||||
| Property | Value |
|
||||
|----------|-------|
|
||||
| **Make** | Samsung Electric Company |
|
||||
| **Model** | Odyssey G75F HNTY601056 |
|
||||
| **Resolution** | 1920x1200 @ 59.95 Hz (preferred) |
|
||||
| **Transform** | 90° (portrait) |
|
||||
| **Position** | x=0, y=0 |
|
||||
| **Scale** | 1.0 |
|
||||
|
||||
### DP-3 — Samsung Odyssey G75F (Center)
|
||||
|
||||
| Property | Value |
|
||||
|----------|-------|
|
||||
| **Make** | PNP(XYM) |
|
||||
| **Model** | PM1601 |
|
||||
| **Resolution** | 1920x1200 @ 59.95 Hz (preferred) |
|
||||
| **Transform** | 270° (portrait) |
|
||||
| **Position** | x=1200, y=0 |
|
||||
| **Scale** | 1.0 |
|
||||
|
||||
### eDP-1 — Internal BOE Panel (Right)
|
||||
|
||||
| Property | Value |
|
||||
|----------|-------|
|
||||
| **Make** | BOE |
|
||||
| **Model** | 0x0C06 |
|
||||
| **Resolution** | 2560x1600 @ 240 Hz (preferred) |
|
||||
| **Transform** | normal (landscape) |
|
||||
| **Position** | auto-placed |
|
||||
| **Scale** | 1.5 |
|
||||
| **Physical Size** | 340x220 mm |
|
||||
|
||||
---
|
||||
|
||||
## Niri Configuration
|
||||
|
||||
**File:** `~/.config/niri/cfg/display.kdl`
|
||||
|
||||
```kdl
|
||||
output "Samsung Electric Company Odyssey G75F HNTY601056" {
|
||||
mode "3840x2160@60"
|
||||
scale 1
|
||||
transform "normal"
|
||||
position x=0 y=0
|
||||
}
|
||||
|
||||
output "DP-1" {
|
||||
transform "90"
|
||||
position x=0 y=0
|
||||
}
|
||||
|
||||
output "DP-3" {
|
||||
transform "270"
|
||||
position x=1200 y=0
|
||||
}
|
||||
|
||||
output "eDP-1" {
|
||||
// no position - auto-placed to the right of DP-* outputs
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## GPU Assignment
|
||||
|
||||
The Intel Arc iGPU handles display output. The render node is explicitly assigned:
|
||||
|
||||
```kdl
|
||||
// In ~/.config/niri/cfg/misc.kdl
|
||||
environment {
|
||||
render-node "/dev/dri/renderD129" // Intel Arc iGPU
|
||||
}
|
||||
```
|
||||
|
||||
The NVIDIA RTX 4070 Mobile is available for compute tasks but does not drive displays.
|
||||
|
||||
---
|
||||
|
||||
## See Also
|
||||
|
||||
- [niri](../../tools/niri/index.md) — Compositor configuration + full niri config breakdown
|
||||
@@ -1,106 +0,0 @@
|
||||
---
|
||||
type: reference
|
||||
title: Hardware Specifications
|
||||
description: Complete hardware specifications for dankware — Alienware m16 R2.
|
||||
tags:
|
||||
- hardware
|
||||
- alienware
|
||||
- specifications
|
||||
- unverified
|
||||
generated:
|
||||
by: chief-designer/agent
|
||||
at: 2026-08-26T00:00:00Z
|
||||
verified: 2026-08-28
|
||||
---
|
||||
|
||||
# Hardware Specifications — dankware
|
||||
|
||||
## System
|
||||
|
||||
| Property | Value |
|
||||
|----------|-------|
|
||||
| **Manufacturer** | Alienware |
|
||||
| **Model** | Alienware m16 R2 |
|
||||
| **BIOS Vendor** | Alienware |
|
||||
|
||||
## Processor
|
||||
|
||||
| Property | Value |
|
||||
|----------|-------|
|
||||
| **Model** | Intel Core Ultra 7 155H |
|
||||
| **Architecture** | Meteor Lake (6p+8e cores) |
|
||||
| **Threads** | 22 |
|
||||
| **Architecture** | x86_64 |
|
||||
|
||||
## Graphics
|
||||
|
||||
| Device | PCI Address | Details |
|
||||
|--------|-------------|---------|
|
||||
| **Intel Arc** | `00:02.0` | Meteor Lake-P [Intel Arc Graphics] (rev 08) |
|
||||
| **NVIDIA RTX 4070 Mobile** | `01:00.0` | AD106M [GeForce RTX 4070 Max-Q / Mobile] (rev a1) |
|
||||
| **NVIDIA Audio** | `01:00.1` | AD106M High Definition Audio Controller |
|
||||
|
||||
**NVIDIA Driver:** 610.57.04
|
||||
|
||||
## Accelerators
|
||||
|
||||
| Device | PCI Address | Details |
|
||||
|--------|-------------|---------|
|
||||
| **NPU** | `00:0b.0` | Core Ultra 200H/200V Series NPU (rev 04) |
|
||||
| **GNNA** | `00:08.0` | Meteor Lake-P Gaussian & Neural-Network Accelerator |
|
||||
| **DTT** | `00:04.0` | Dynamic Tuning Technology |
|
||||
|
||||
## Memory
|
||||
|
||||
| Type | Size | Notes |
|
||||
|------|------|-------|
|
||||
| **RAM** | 62 GiB | System memory |
|
||||
| **Swap** | 62 GiB | zram0 (compressed RAM swap) |
|
||||
|
||||
## Storage
|
||||
|
||||
| Device | Model | Size | Mount |
|
||||
| **nvme0n1** | Samsung 990 EVO (2TB) | 1.8 TB | LUKS encrypted, `/` (4G boot, 1.8T root) |
|
||||
**Root filesystem:** 1.8 TB total, ~1.2 TB available (~39% used).
|
||||
|
||||
## USB and Thunderbolt
|
||||
|
||||
| Device | PCI Address | Details |
|
||||
|--------|-------------|---------|
|
||||
| **USB xHCI** | `00:0d.0` | Core Ultra 200 Series USB xHCI |
|
||||
| **Thunderbolt DMA** | `00:0d.3` | Core Ultra 200 Series Thunderbolt DMA1 |
|
||||
| **USB 3.2** | `00:14.0` | Meteor Lake-P USB 3.2 Gen 2x1 xHCI |
|
||||
|
||||
## Network
|
||||
|
||||
| Device | Details |
|
||||
| **Wi-Fi** | wlan0 — Intel Wi-Fi 7 BE202 (AX1775*) — connected to FRANKFI-5G (192.168.0.12/24) |
|
||||
| **USB Ethernet** | enp0s13f0u1u1 — no carrier |
|
||||
| **Built-in Ethernet** | enp47s0 (Killer E3000 2.5GbE) — UP, 192.168.0.226/24 |
|
||||
|
||||
## Other
|
||||
|
||||
| Device | PCI Address | Details |
|
||||
|--------|-------------|---------|
|
||||
| **Audio** | `00:1f.3` | Meteor Lake-P HD Audio Controller |
|
||||
| **Card Reader** | `2e:00.0` | Realtek RTS525A PCIe Card Reader |
|
||||
| **Sensor Hub** | `00:12.0` | Meteor Lake-P Integrated Sensor Hub |
|
||||
| **CSME HECI** | `00:16.0` | Meteor Lake-P CSME HECI |
|
||||
| **SMBus** | `00:1f.4` | Meteor Lake-P SMBus Controller |
|
||||
|
||||
---
|
||||
|
||||
## PCI Summary
|
||||
|
||||
```
|
||||
├── Intel Host Bridge/DRAM (00:00.0)
|
||||
├── Intel Arc Graphics (00:02.0) ──── iGPU
|
||||
├── NVIDIA RTX 4070 Mobile (01:00.0) ── dGPU
|
||||
├── Intel NPU (00:0b.0) ──── AI acceleration
|
||||
├── Intel GNNA (00:08.0) ─── AI acceleration
|
||||
├── Samsung NVMe PM9C1a (02:00.0) ── primary SSD (/ + /boot)
|
||||
├── KIOXIA NVMe BG6 (2d:00.0) ── secondary SSD
|
||||
├── Killer E3000 2.5GbE (2f:00.0) ── built-in Ethernet
|
||||
├── Intel Wi-Fi 7 BE202 (30:00.0) ── Wi-Fi
|
||||
└── Realtek Card Reader (2e:00.0)
|
||||
```
|
||||
@@ -1,86 +0,0 @@
|
||||
# System Overview — dankware
|
||||
|
||||
**dankware** is an Alienware m16 R2 laptop. It runs CachyOS Linux with the Niri scrollable-tiling Wayland compositor and Noctalia Shell. It serves as the primary workstation for the Frank Program, running the pi coding agent locally and connecting to remote llama.cpp servers.
|
||||
|
||||
---
|
||||
|
||||
## Quick Facts
|
||||
|
||||
| Property | Value |
|
||||
|----------|-------|
|
||||
| **Hostname** | `dankware` |
|
||||
| **System** | Alienware m16 R2 |
|
||||
| **OS** | CachyOS (Arch-based rolling) |
|
||||
| **Kernel** | `linux-cachyos 7.2.0-1` (EEVDF + LTO + AutoFDO + Propeller) |
|
||||
| **LTS Kernel** | `linux-cachyos-lts 6.18.42-1` |
|
||||
| **Desktop** | Niri 26.04 (Wayland) |
|
||||
| **Shell** | Noctalia Shell 4.7.7 |
|
||||
| **Terminal** | Ghostty 1.3.1 |
|
||||
| **Shell (CLI)** | zsh (fish also installed) |
|
||||
| **Display Manager** | SDDM |
|
||||
| **Bootloader** | GRUB |
|
||||
| **Init** | systemd (graphical.target) |
|
||||
|
||||
---
|
||||
|
||||
## Hardware Summary
|
||||
|
||||
| Component | Specification |
|
||||
|-----------|---------------|
|
||||
| **CPU** | Intel Core Ultra 7 155H (Meteor Lake, 22 threads) |
|
||||
| **iGPU** | Intel Arc Graphics (Meteor Lake-P) |
|
||||
| **dGPU** | NVIDIA GeForce RTX 4070 Laptop (AD106M, Max-Q) |
|
||||
| **NVIDIA Driver** | 610.57.04 |
|
||||
| **RAM** | 62 GiB |
|
||||
| **Swap** | 62 GiB (zram0) |
|
||||
| **Boot Disk** | Samsung 990 EVO (1.8 TB), /boot + LUKS-encrypted / |
|
||||
| **Secondary Disk** | KIOXIA BG6 (953.9 GB) |
|
||||
| **Root** | LUKS encrypted, ~1.2 TB available |
|
||||
|
||||
---
|
||||
|
||||
## Software Stack
|
||||
|
||||
### Compositor and Shell
|
||||
|
||||
- **Niri 26.04** — Scrollable-tiling Wayland compositor
|
||||
- **Noctalia Shell 4.7.7** — Desktop shell built with Quickshell (qs 0.0.12)
|
||||
- **Shelly Notifications** — Notification tray service
|
||||
|
||||
### Applications
|
||||
|
||||
- **Ghostty 1.3.1** — Terminal emulator
|
||||
- **Firefox 153.0** — Primary browser
|
||||
- **Chromium 150.0** — Secondary browser
|
||||
- **Nautilus 50.2.2** — File manager
|
||||
- **Neovim 0.12.4** — Text editor
|
||||
- **Steam 1.0.0.86** — Gaming platform
|
||||
|
||||
### Audio
|
||||
|
||||
- **PipeWire 1.6.8** — Multimedia router
|
||||
- **WirePlumber 0.5.15** — Session manager
|
||||
- **pavucontrol** — Volume control GUI
|
||||
|
||||
### Screenshots and Recording
|
||||
|
||||
- **grim** — Wayland screenshot utility
|
||||
- **slurp** — Screen region selector
|
||||
- **swappy** —Screenshot annotator
|
||||
- **wl-clipboard 2.3.0** — Wayland clipboard
|
||||
- **hyprpicker** — Color picker
|
||||
- **wf-recorder** — Screen recording
|
||||
|
||||
### Display Management
|
||||
|
||||
- **wlr-randr** — Display configuration utility
|
||||
|
||||
See [[hardware|hardware]] for full hardware details.
|
||||
See [[displays|displays]] for the three-monitor layout.
|
||||
See [[cachyos|cachyos]] for operating system details.
|
||||
|
||||
* [Display Configuration](displays.md) — Three-monitor display setup on dankware — dual Samsung Odyssey G75F (portrait) and internal BOE panel.
|
||||
|
||||
* [Hardware Specifications](hardware.md) — Complete hardware specifications for dankware — Alienware m16 R2.
|
||||
|
||||
* [Network Interfaces](network.md) — Network configuration for dankware — Wi-Fi, USB Ethernet, and local network topology.
|
||||
@@ -1,54 +0,0 @@
|
||||
---
|
||||
type: reference
|
||||
title: Network Interfaces
|
||||
description: Network configuration for dankware — Wi-Fi, USB Ethernet, and local network topology.
|
||||
tags:
|
||||
- network
|
||||
- interfaces
|
||||
- wifi
|
||||
- unverified
|
||||
generated:
|
||||
by: chief-designer/agent
|
||||
at: 2026-08-26T00:00:00Z
|
||||
verified: 2026-08-28
|
||||
---
|
||||
|
||||
# Network Interfaces — dankware
|
||||
|
||||
## Active Interfaces
|
||||
|
||||
| Interface | Type | Status | Address | Connection |
|
||||
| `wlan0` | Wi-Fi | Connected | 192.168.0.12/24 | FRANKFI-5G |
|
||||
| `enp0s13f0u1u1` | USB Ethernet | Down (no carrier) | — | — |
|
||||
| `enp47s0` | Built-in Ethernet (Killer E3000) | Connected | 192.168.0.226/24 | Wired connection 1 |
|
||||
| `lo` | Loopback | Connected | 127.0.0.1/8 | lo |
|
||||
|
||||
## Network Manager
|
||||
|
||||
| Property | Value |
|
||||
|----------|-------|
|
||||
| **Tool** | nmcli 1.58.0 |
|
||||
| **DNS** | systemd-resolved (127.0.0.53) |
|
||||
| **mDNS** | Enabled (resolve) |
|
||||
|
||||
## Local Network
|
||||
|
||||
| Host | IP | Service | Port |
|
||||
| **dankware** | 192.168.0.12 (Wi-Fi) / 192.168.0.226 (Built-in Eth) | This machine | — |
|
||||
| **dankserver** | 192.168.0.235 | llama.cpp | 7770 |
|
||||
| **dankclaw** | 192.168.0.143 | llama.cpp | 7770 |
|
||||
|
||||
## Services
|
||||
|
||||
| Service | Status |
|
||||
|---------|--------|
|
||||
| **sshd** | Active |
|
||||
| **bluetooth** | Active (BlueZ 5.87) |
|
||||
|
||||
---
|
||||
|
||||
## See Also
|
||||
|
||||
- [[dankserver|dankserver]] — Primary llama.cpp server
|
||||
- [[dankclaw|dankclaw]] — Secondary llama.cpp server
|
||||
- ](../index.md) — System overview
|
||||
@@ -1,15 +1,13 @@
|
||||
# System Documentation
|
||||
|
||||
Hardware, operating system, and network documentation for the Frank Program
|
||||
infrastructure. dankware is the primary workstation; Dankserver and Dankclaw are
|
||||
the llama.cpp inference servers it talks to.
|
||||
infrastructure. A client workstation runs the desktop stack; Dankserver and
|
||||
Dankclaw are the inference servers it talks to.
|
||||
|
||||
## Local System
|
||||
|
||||
- [System Overview](/system/dankware/index.md) — dankware: Alienware m16 R2 laptop running CachyOS with Niri Wayland.
|
||||
- [Hardware Specifications](/system/dankware/hardware.md) — CPU, GPU, memory, storage, network controllers, and PCI devices for dankware.
|
||||
- [Display Configuration](/system/dankware/displays.md) — Three-monitor setup: dual Samsung Odyssey G75F (portrait) plus the internal BOE panel.
|
||||
- [Network Interfaces](/system/dankware/network.md) — Wi-Fi (Intel BE202), built-in Ethernet (Killer E3000), USB Ethernet, and local network topology.
|
||||
- [Network](/system/network.md) — LAN topology, and the client-side DNS pinning rule for workstations with both Wi-Fi and Ethernet.
|
||||
- [Workstation stack](/tools/cachyos.md) — operating system, packages, and userspace; [niri](/tools/niri/index.md) for the compositor and display rig.
|
||||
|
||||
## Network Systems
|
||||
|
||||
@@ -20,7 +18,7 @@ the llama.cpp inference servers it talks to.
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph Local[dankware - Alienware m16 R2]
|
||||
subgraph Local[Workstation - CachyOS + Niri]
|
||||
A[Niri Wayland]
|
||||
B[Noctalia Shell]
|
||||
C[Ghostty Terminal]
|
||||
@@ -39,7 +37,7 @@ graph TB
|
||||
A --> B
|
||||
```
|
||||
|
||||
## Related Knowledge Bases (sibling projects on dankware)
|
||||
## Related Knowledge Bases (sibling project repos)
|
||||
|
||||
The fleet has one sibling OKF knowledge base outside this bundle. Read it for
|
||||
deployment and inference details. This bundle links to it from the server pages.
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
---
|
||||
type: reference
|
||||
title: Network
|
||||
description: LAN topology for the fleet and the client-side DNS pinning rule for multi-homed Linux workstations.
|
||||
tags:
|
||||
- network
|
||||
- dns
|
||||
- systemd-resolved
|
||||
- workstation
|
||||
- unverified
|
||||
verified: 2026-08-28
|
||||
---
|
||||
|
||||
# Network
|
||||
|
||||
How the LAN is addressed, which host answers what, and the one DNS rule that
|
||||
bites every Linux workstation with both Wi-Fi and Ethernet plugged in.
|
||||
|
||||
---
|
||||
|
||||
## Topology
|
||||
|
||||
| Host | IP | Role |
|
||||
|------|----|------|
|
||||
| Router | 192.168.0.1 | DHCP; hands out the DNS server to clients |
|
||||
| Dankclaw | 192.168.0.143 | Pi-hole DNS, Caddy edge, Gitea, large inference model |
|
||||
| Dankserver | 192.168.0.235 | small inference model |
|
||||
| Clients | DHCP from 192.168.0.0/24 | workstations, phones |
|
||||
|
||||
The router hands clients `192.168.0.143` as their DNS server; Pi-hole answers
|
||||
every `*.franksdank.cloud` name with the LAN address of the box that serves
|
||||
it. Names that resolve to the public WAN address time out on the LAN because
|
||||
the G36 has no NAT loopback — a symptom that looks like "the network is
|
||||
down" and is not. Full DNS mechanics live in the serverAppConfigs knowledge
|
||||
base (`Infrastructure/LAN-DNS.md`); this page is the client-side view.
|
||||
|
||||
---
|
||||
|
||||
## The multi-link resolver rule
|
||||
|
||||
**A Linux client with two `+DefaultRoute` links will flap its DNS.**
|
||||
|
||||
NetworkManager marks both a wired and a Wi-Fi connection as default routes.
|
||||
Both get the same DHCP DNS list from the router, and `systemd-resolved`
|
||||
resolves queries against one "current" resolver *per link*. When the links
|
||||
disagree — one landed on the Pi-hole address, the other on a DHCP-provided
|
||||
upstream that answers with the public WAN IP — every lookup can return a
|
||||
different address, and half of them time out on the LAN.
|
||||
|
||||
Enumerate the links and their resolvers before changing anything:
|
||||
|
||||
```bash
|
||||
nmcli -t -f NAME,DEVICE connection show --active # one entry per default link
|
||||
resolvectl status # per-link "Current DNS Server"
|
||||
ip -br addr
|
||||
```
|
||||
|
||||
The fix is to pin the LAN resolver **on each connection**, because
|
||||
`/etc/systemd/resolved.conf`'s `DNS=` is only a per-link fallback and does
|
||||
not override what the link itself was handed:
|
||||
|
||||
```bash
|
||||
for c in "<wired connection>" "<wifi connection>"; do
|
||||
nmcli connection modify "$c" ipv4.method auto \
|
||||
ipv4.dns 192.168.0.143 \
|
||||
ipv4.ignore-auto-dns yes \
|
||||
ipv4.ignore-auto-routes no
|
||||
done
|
||||
nmcli connection up "<wired connection>"
|
||||
nmcli connection up "<wifi connection>"
|
||||
systemctl restart systemd-resolved
|
||||
```
|
||||
|
||||
`method auto` keeps DHCP for address, gateway, and routes; `ignore-auto-dns
|
||||
yes` makes the static resolver the only one used; `ignore-auto-routes no`
|
||||
keeps the DHCP routes, so the dual-default traffic path survives.
|
||||
|
||||
Verify with a cache-clear loop — the name must return the LAN address on
|
||||
every run, not on average:
|
||||
|
||||
```bash
|
||||
for i in $(seq 1 10); do resolvectl flush-caches; dig romm.franksdank.cloud +short; done
|
||||
```
|
||||
|
||||
A single successful `dig` proves nothing on a flapping resolver.
|
||||
|
||||
---
|
||||
|
||||
## Servers
|
||||
|
||||
- [Dankserver](/system/dankserver.md) — small inference model
|
||||
- [Dankclaw](/system/dankclaw.md) — large inference model, DNS, proxy
|
||||
|
||||
## See Also
|
||||
|
||||
- [System Documentation](/system/index.md) — bundle navigation
|
||||
- [CachyOS](/tools/cachyos.md) — NetworkManager, systemd-resolved, BlueZ
|
||||
@@ -0,0 +1,126 @@
|
||||
---
|
||||
type: reference
|
||||
title: Display Configuration
|
||||
description: Niri output configuration for a multi-monitor desk rig — portrait transforms, position pinning, scale, and iGPU display ownership.
|
||||
tags:
|
||||
- niri
|
||||
- display
|
||||
- monitors
|
||||
- rotation
|
||||
verified: 2026-08-28
|
||||
---
|
||||
|
||||
# Display Configuration
|
||||
|
||||
How a multi-monitor desk rig is configured in niri: portrait external panels
|
||||
flanking a laptop panel, positions pinned by hand, and the integrated GPU kept
|
||||
as the display owner.
|
||||
|
||||
**Config:** `~/.config/niri/cfg/display.kdl`
|
||||
**Probe:** `wlr-randr` (installed by CachyOS) reports what the compositor
|
||||
actually committed — connectors, preferred modes, transforms, scale, positions.
|
||||
|
||||
---
|
||||
|
||||
## The rig
|
||||
|
||||
Three outputs in a row: two external monitors rotated to portrait, one
|
||||
internal laptop panel in landscape at the right.
|
||||
|
||||
```
|
||||
┌──────────────┬──────────────┬──────────────┐
|
||||
│ │ │ │
|
||||
│ DP-1 │ DP-3 │ eDP-1 │
|
||||
│ external │ external │ internal │
|
||||
│ 1920x1200 │ 1920x1200 │ 2560x1600 │
|
||||
│ Portrait │ Portrait │ Landscape │
|
||||
│ 90° rotate │ 270° rotate │ 1.5x scale │
|
||||
│ │ │ │
|
||||
└──────────────┴──────────────┴──────────────┘
|
||||
x=0,0 x=1200,0 auto-placed
|
||||
```
|
||||
|
||||
| Output | Role | Transform | Position | Scale |
|
||||
|--------|------|-----------|----------|-------|
|
||||
| `DP-1` | External, left | `90` (portrait) | `x=0 y=0` | 1.0 |
|
||||
| `DP-3` | External, center | `270` (portrait) | `x=1200 y=0` | 1.0 |
|
||||
| `eDP-1` | Internal panel | none (landscape) | auto-placed | 1.5 |
|
||||
|
||||
The two portrait panels are 1200 px wide after rotation, which is why the
|
||||
second one starts at `x=1200`. The internal panel declares no position at
|
||||
all — niri auto-places it to the right of the explicitly positioned outputs.
|
||||
That is the only reliable way to keep a third panel from landing on top of
|
||||
the rig when a cable is re-seated.
|
||||
|
||||
---
|
||||
|
||||
## The config pattern
|
||||
|
||||
```kdl
|
||||
output "DP-1" {
|
||||
transform "90"
|
||||
position x=0 y=0
|
||||
}
|
||||
|
||||
output "DP-3" {
|
||||
transform "270"
|
||||
position x=1200 y=0
|
||||
}
|
||||
|
||||
output "eDP-1" {
|
||||
// no position — auto-placed to the right of the DP-* outputs
|
||||
scale 1.5
|
||||
}
|
||||
```
|
||||
|
||||
Three rules learned the hard way:
|
||||
|
||||
1. **One output, one block.** A second block keyed by the make/model string
|
||||
(`output "Samsung Electric Company …"`) that also sets `transform` fights
|
||||
the connector-keyed block. Use the make/model form only to pin a `mode`
|
||||
for an output whose connector name is unstable across boots, and never
|
||||
set a transform in both places.
|
||||
2. **Positions are absolute, not relational.** Niri does not reflow the rig
|
||||
when one panel is disconnected — a missing output leaves a hole at its
|
||||
coordinates. Verify with `wlr-randr` after any cable or dock change.
|
||||
3. **Re-assert rotation after a config reload, then confirm.** A transform
|
||||
silently reverting to landscape is the usual symptom of a duplicate
|
||||
output block, not of a failed reload.
|
||||
|
||||
Modes must match what the panel reports. Check `wlr-randr` for the preferred
|
||||
mode before writing a `mode` line; a `mode` the panel cannot drive leaves the
|
||||
output dark or drops it.
|
||||
|
||||
---
|
||||
|
||||
## GPU assignment
|
||||
|
||||
The integrated GPU drives all display output; the discrete GPU is available
|
||||
for compute but must not take the outputs. Pin the render node explicitly in
|
||||
`~/.config/niri/cfg/misc.kdl`:
|
||||
|
||||
```kdl
|
||||
environment {
|
||||
render-node "/dev/dri/renderD129"
|
||||
}
|
||||
```
|
||||
|
||||
Without the pin, the session's render node follows probe order and can land
|
||||
on the discrete GPU — which costs display-linked copies and, on hybrid
|
||||
graphics laptops, is a common trigger of the suspend/resume deadlock covered
|
||||
in the sleep-wake investigation report.
|
||||
|
||||
---
|
||||
|
||||
## Reload
|
||||
|
||||
`niri msg action load-config-file` reloads live. Never `SIGHUP` the process
|
||||
— see [[tips]].
|
||||
|
||||
---
|
||||
|
||||
## See Also
|
||||
|
||||
- [Niri](/tools/niri/index.md) — compositor overview and config layout
|
||||
- [[tips|tips]] — reload path and other gotchas
|
||||
- [[cachyos|cachyos]] — operating system, including `wlr-randr`
|
||||
@@ -85,11 +85,12 @@ Column-based scrollable tiling. Columns are cycled with Mod+Left/Right (or Mod+H
|
||||
| [[default-bindings|default-bindings.md]] | reference | Default key bindings organized by category |
|
||||
| [[key-bindings-syntax|key-bindings-syntax.md]] | reference | KDL configuration syntax for key bindings |
|
||||
| [[tips|tips.md]] | howto | Practical tips for working with niri |
|
||||
| [[displays|displays.md]] | reference | Multi-monitor display rig: portrait transforms, positions, scale, iGPU display ownership |
|
||||
|
||||
---
|
||||
|
||||
## See Also
|
||||
|
||||
- [[noctalia-shell|noctalia-shell]] — Desktop shell integration
|
||||
- [[displays|displays]] — Three-monitor setup
|
||||
- [[displays|displays]] — Multi-monitor desk rig configuration
|
||||
- [[cachyos|cachyos]] — Operating system
|
||||
|
||||
Reference in New Issue
Block a user