5.7 KiB
Omarchy Satellite in a VM
How sat-werk1 on think became a satellite on 2026-10-14, with Omarchy 4.0.4.
The steps were done by hand; #sat.vm and #sat.apply in werkregie.werkbaum automate them.
What a satellite needs in general is in satellite-inventory.md.
The VM
- libvirt with
qemu:///system; disks and ISOs in the storage pooldefault,/var/lib/libvirt/images. - 6 GiB memory, 4 vCPUs, a 64 GiB qcow2 disk, the NAT network
default. - UEFI without Secure Boot; Omarchy does not boot with BIOS.
virtiovideo with 3D acceleration and SPICE with OpenGL; without 3D, Hyprland does not start.
Unattended Install
The Omarchy ISO installs without any input when a second drive labeled cidata carries the answers of its setup form
(Omarchy Manual: Unattended Installs).
| File | Content |
|---|---|
user_configuration.json |
the full-disk template of the 4.0.4 configurator, filled for /dev/vda |
user_credentials.json |
user werk1 with sudo, the password hash for the user and for root |
user_encrypt_installation.txt |
false: no LUKS, so no passphrase at boot |
authorized_keys |
the SSH key of think; the installer enables sshd and opens the firewall |
user_full_name.txt, user_email_address.txt |
the git identity claude-code |
- The template comes from
/root/configuratorinsidearch/x86_64/airootfs.sfsof the ISO; the default branchquattroofomacom/omarchy-isohas a newer one. - The values: hostname
sat-werk1, time zoneEurope/Berlin, keymapde, kernellinux-omarchy, an ESP of 2 GiB and btrfs on the rest of the disk. - The user makes the hash with
openssl passwd -6, so the password never reaches the agent.
genisoimage -output cidata-sat-werk1.iso -volid cidata -joliet -rock cidata-sat-werk1/
virt-install --connect qemu:///system --name sat-werk1 --memory 6144 --vcpus 4 --osinfo archlinux \
--boot uefi,firmware.feature0.name=secure-boot,firmware.feature0.enabled=no \
--disk vol=default/sat-werk1.qcow2,bus=virtio,boot.order=1 \
--disk vol=default/omarchy-4.0.4.iso,device=cdrom,bus=sata,boot.order=2 \
--disk vol=default/cidata-sat-werk1.iso,device=cdrom,bus=sata \
--network network=default,model=virtio \
--graphics spice,gl.enable=yes,listen=none --video virtio,model.acceleration.accel3d=yes \
--import --noautoconsole
The empty disk falls through to the ISO; after the install the VM boots from the disk. SSH answered after 11 minutes.
Pitfalls:
- Omarchy 4.0.4 ignores
custom_commands; everything after the install goes over SSH. - The live system answers SSH at the same address with another host key;
a check with
StrictHostKeyChecking=accept-newstores that key, and the installed system is then refused.
After the Install, over SSH
sudowithout a password: the only step that needs the user's password, typed once onthink./etc/sudoers.d/90-werk1-nopasswdalso needsDefaults:werk1 verifypw=any, sinceomarchy-updatecallssudo -vand Omarchy's own rule(ALL) ALLkeeps asking otherwise.- Every command runs in a login shell,
bash -lc; a plain SSH shell lacksOMARCHY_PATH. omarchy-update -yupdates without questions.yay -S --noconfirm --answerdiff None --answerclean None --removemake aur/claude-desktop aur/hypr-rdp. The PKGBUILD ofclaude-desktoprepackages Anthropic's.deb; its hash must match Anthropic's apt index,downloads.claude.ai/claude-desktop/apt/stable/dists/stable/main/binary-amd64/Packages.- SDDM:
/etc/sddm.conf.d/60-werk-satellite.conflogswerk1in automatically intoomarchy.desktop, because hypr-rdp attaches to a running Hyprland session. The same file points the greeter at/etc/sddm/werk-greeter.lua, a copy of/usr/share/sddm/hyprland.luawithkb_layout = "de"; the greeter of 4.0.4 sets no layout and types US. - hypr-rdp:
~/.config/hypr-rdp/config.tomlwithbind = "0.0.0.0:3389", userwerk1and apassword_filethat the user writes; the systemd user unithypr-rdp.servicestarts withgraphical-session.target;ufwadmits port 3389 from192.168.122.1only. - For the SPICE console only:
~/.config/hypr/monitors.luafixesVirtual-1at 1920x1080, since virt-viewer cannot pass its window size to Hyprland.
RDP Client on think
Remmina profile ~/.local/share/remmina/sat-werk1.remmina:
[remmina]
name=sat-werk1
protocol=RDP
server=192.168.122.153
username=werk1
security=nla
scale=2
keyboard_grab=1
window_width=1600
window_height=900
window_maximize=1
- hypr-rdp accepts NLA only; with
security=tlsthe server refuses the connection. scale=2sends the window size; hypr-rdp gives its headless output that size.keyboard_grab=1passes the Super key on; GNOME asks once whether Remmina may inhibit its shortcuts.- A Remmina process left over takes each new
remmina -cand writes its own settings back into the profile. - Remmina can store a window size below 200 pixels; FreeRDP then fails with
ERRCONNECT_PRE_CONNECT_FAILED.
Result
Verified: the unattended install, SSH, RDP with a window that resizes, the Super key, the clipboard in both directions, the German keyboard, and Claude Desktop logged in with the user's sessions.
Not yet tried: the Code tab of Claude Desktop with a repository, and the preview of a frontend in the satellite. Omarchy's first login still offers an update, although the system is up to date.