Getting Omarchy running smoothly inside Hyper-V means fixing two things by default: the display scaling, and Hyprland's IPC socket not working over SSH. This guide walks through both, plus the full VM setup, in an SSH-first workflow you can run entirely from a Windows terminal.
What you'll do:
- Create the VM and run the base install
- Get SSH working
- Fix the display resolution
- Fix Hyprland's IPC socket + force 1:1 scaling
- Verify everything
1. VM Creation & Base Install
Open PowerShell as Administrator on your Windows host and run the following:
Create the VM:
New-VM -Name "Omarchy" `
-MemoryStartupBytes 4GB `
-Generation 2 `
-NewVHDPath "C:\Hyper-V\Omarchy.vhdx" `
-NewVHDSizeBytes 64GBAssign the virtual switch:
Set-VMNetworkAdapter -VMName "Omarchy" -SwitchName "Default Switch"Set the CPU count:
Set-VMProcessor -VMName "Omarchy" -Count 4Disable Secure Boot (required for standard Arch/Omarchy ISOs):
Set-VMFirmware -VMName "Omarchy" -EnableSecureBoot OffMount the ISO:
Add-VMDvdDrive -VMName "Omarchy" -Path "C:\Path\To\omarchy.iso"Start the VM:
Start-VM -VMName "Omarchy"Or, for a fresh setup, run all six as one script:
New-VM -Name "Omarchy" -MemoryStartupBytes 4GB -Generation 2 -NewVHDPath "C:\Hyper-V\Omarchy.vhdx" -NewVHDSizeBytes 64GB
Set-VMNetworkAdapter -VMName "Omarchy" -SwitchName "Default Switch"
Set-VMProcessor -VMName "Omarchy" -Count 4
Set-VMFirmware -VMName "Omarchy" -EnableSecureBoot Off
Add-VMDvdDrive -VMName "Omarchy" -Path "C:\Path\To\omarchy.iso"
Start-VM -VMName "Omarchy"Open the Hyper-V Connection window, complete the graphical/scripted Omarchy installation process, and log into your user account.
2. Install & Enable SSH
Switching to SSH early eliminates the need to type commands into the Hyper-V console window. Run these in the VM's local terminal:
Install OpenSSH:
sudo pacman -Sy opensshStart the service:
sudo systemctl start sshdEnable it on boot:
sudo systemctl enable sshdGet the VM's IP address:
ip aNow minimize Hyper-V and open PowerShell on your Windows host to log in remotely:
ssh username@<VM-IP-ADDRESS>3. Display Resolution
Hyper-V requires matching configuration at both the Linux kernel level and the Windows host level.
Append the video parameter to the Limine cmdline (over SSH):
sudo sed -i 's/cmdline:.*/& video=hyperv_fb:1920x1080/' /boot/limine.confVerify the change:
grep "video=hyperv_fb" /boot/limine.confReboot the VM over SSH:
sudo rebootSet the host resolution — in PowerShell as Administrator, on the Windows host:
Set-VMVideo -VMName "Omarchy" `
-ResolutionType Single `
-HorizontalResolution 1920 `
-VerticalResolution 10804. IPC Bridge & Scaling
Reconnect via SSH once the VM boots back up:
ssh username@<VM-IP-ADDRESS>Fix remote hyprctl socket access — SSH sessions don't inherit Hyprland's HYPRLAND_INSTANCE_SIGNATURE by default, and Omarchy aliases ls to formatted file listers (like eza), which corrupts automated path lookups. Add a clean, persistent hyprctl alias using /usr/bin/ls:
Remove any duplicate or outdated alias:
sed -i '/alias hyprctl=/d' ~/.zshrcAdd the socket locator alias:
echo 'alias hyprctl="HYPRLAND_INSTANCE_SIGNATURE=\$(/usr/bin/ls -1 /run/user/\$UID/hypr/ 2>/dev/null | head -n 1) hyprctl"' >> ~/.zshrcApply it to the current shell session:
source ~/.zshrcForce 1:1 pixel scaling — Omarchy configures Hyprland via Lua files in ~/.config/hypr/ (monitors.lua, input.lua, looknfeel.lua, etc). By default it assumes a high-DPI display and applies 2x scaling — on a 1080p Hyper-V framebuffer, that halves your usable workspace.
Set the GDK scale:
sed -i 's/local omarchy_gdk_scale = .*/local omarchy_gdk_scale = 1/' ~/.config/hypr/monitors.luaSet the monitor scale:
sed -i 's/local omarchy_monitor_scale = .*/local omarchy_monitor_scale = 1/' ~/.config/hypr/monitors.luaReload Hyprland to apply the changes:
hyprctl reloadIf these variables have moved in a newer Omarchy release, confirm with
grep -r "omarchy_gdk_scale\|omarchy_monitor_scale" ~/.config/hypr/before running the edits.
5. Verification
Confirm that native resolution and 1:1 scaling are active. The raw hyprctl monitors output is quite verbose, so filter it down to the essentials:
hyprctl monitors | grep -E "Monitor|^\s+[0-9]+x[0-9]+@|scale:|focused:"Expected output:
Monitor Virtual-1 (ID 0):
1920x1080@60.00000 at 0x0
scale: 1
focused: yesWith SSH access, correct resolution, and 1:1 scaling all in place, the VM is fully usable as a daily-driver Hyprland environment inside Hyper-V — no more console-window fumbling required.