lefteros_by SomniusX
EN ↗Πες ένα γεια

27 Σεπτεμβρίου 2026 / Lefteris Iliadis / SomniusX

Windows VM για Omarchy

27 Σεπτεμβρίου 2026

Το Omarchy έχει ενσωματωμένο Windows VM: με omarchy-windows-vm install στήνεις Windows 11 που τρέχουν σε container και τα ανοίγεις με RDP. Το Windows VM για Omarchy είναι το plugin μου που του δίνει θέση στην μπάρα: ένα μικρό λογότυπο των Windows που δείχνει με μια ματιά αν το VM τρέχει, και ένα panel με ό,τι χρειάζεται για να το διαχειριστείς. Έκδοση 1.0.0, άδεια MIT.

Το panel του Windows VM για Omarchy

Τι κάνει

  • Κατάσταση στην μπάρα. Το λογότυπο είναι φωτεινό όσο τρέχουν τα Windows, θαμπό όταν είναι σταματημένα, και πάλλεται όσο ξεκινούν ή κλείνουν. Στο hover: π.χ. Windows running · up 1h 5m · RDP open.
  • Ένα κλικ ως την επιφάνεια εργασίας. Αν το παράθυρο RDP είναι ήδη ανοιχτό σε άλλο workspace, σε πηγαίνει εκεί. Αν έκλεισε, ξανασυνδέεται. Αν τα Windows δεν τρέχουν, τα ξεκινά.
  • Επανεκκίνηση και τερματισμός με δικλίδα ασφαλείας. Και τα δύο θέλουν δεύτερο κλικ, γιατί τα Windows κλείνουν ό,τι τρέχει μέσα τους.
  • Κράτα τα Windows ανοιχτά (προαιρετικό). Εξ ορισμού, όταν κλείνει το παράθυρο RDP τερματίζονται και τα Windows, όπως κάνει ο launcher του Omarchy. Με την επιλογή ενεργή, κλείνει μόνο το παράθυρο· εφαρμογές, συνεδρίες SSH και εργασίες στο παρασκήνιο συνεχίζουν.
  • Αρχείο καταγραφής για κάθε εκκίνηση, επανεκκίνηση και τερματισμό, μαζί με τα μηνύματα του FreeRDP. Όταν μια συνεδρία RDP πέφτει απρόσμενα, το αρχείο λέει γιατί.
  • Web console και βοήθεια. Η οθόνη του VM στον browser — χρήσιμη όσο εκκινεί ή όταν το RDP δεν συνδέεται — και ενότητα Help που εξηγεί κάθε κουμπί.

Στην μπάρα και στο panel

  • Αριστερό κλικ: ανοίγει το panel.
  • Δεξί κλικ: πηγαίνει στην επιφάνεια εργασίας των Windows (και τα ξεκινά αν χρειάζεται).
  • Hover: κατάσταση, χρόνος λειτουργίας και αν το παράθυρο RDP είναι ανοιχτό.

Στο panel, το κύριο κουμπί αλλάζει ανάλογα με την κατάσταση — Show Windows desktop, Reconnect RDP ή Start Windows — και ακολουθούν Restart, Shut down, Web console (http://127.0.0.1:8006), Logs, Help και δύο ρυθμίσεις: Keep Windows running και Hide icon while stopped. Ο τερματισμός από το μενού Έναρξη των Windows δουλεύει κι αυτός· το εικονίδιο θαμπώνει μόλις σταματήσει το VM.

«Keep Windows running»: το αντάλλαγμα

Ο launcher του Omarchy θεωρεί ότι ένα κλειστό παράθυρο RDP σημαίνει «τελείωσα» και σβήνει τα Windows. Με την επιλογή ενεργή, κλείνει μόνο το παράθυρο, και την επόμενη φορά επιστρέφεις στην ίδια συνεδρία με τις εφαρμογές σου όπως τις άφησες.

Το τίμημα: το VM κρατά τη RAM που του έδωσες στην εγκατάσταση (το RAM_SIZE) μέχρι να πατήσεις Shut down ή να το κλείσεις από τα Windows. Γι' αυτό, όσο η επιλογή είναι ενεργή, το panel δείχνει υπενθύμιση με το ακριβές ποσό — π.χ. holding its 16 GB of RAM. Η ρύθμιση ισχύει από την επόμενη εκκίνηση ή επανασύνδεση μέσω του plugin.

Εγκατάσταση

omarchy plugin add https://github.com/Somnius/Windows-VM-for-Omarchy.git --enable

Απαιτήσεις: Omarchy με εγκατεστημένο το Windows VM (omarchy-windows-vm install) και πρόσβαση στο Docker. Αν ο χρήστης σου είναι στην ομάδα docker, το εικονίδιο ενημερώνεται αθόρυβα· αλλιώς η κατάσταση μένει άγνωστη και η εκκίνηση ή ο τερματισμός ζητούν τον κωδικό σου, όπως πάντα. Άλλες εξαρτήσεις δεν υπάρχουν: χρησιμοποιεί μόνο εργαλεία που φέρνει ήδη το Omarchy — omarchy-windows-vm, docker, hyprctl και uwsm-app.

Από τη γραμμή εντολών

Κάθε ενέργεια του panel είναι και εντολή, οπότε δένεται εύκολα σε συντόμευση του Hyprland:

omarchy-shell lef.windows-vm show       # επιφάνεια εργασίας, ή εκκίνηση/επανασύνδεση
omarchy-shell lef.windows-vm restart
omarchy-shell lef.windows-vm stop
omarchy-shell lef.windows-vm status     # η κατάσταση σε JSON
omarchy-shell lef.windows-vm toggle     # άνοιγμα/κλείσιμο του panel

Πως δουλεύει

Το VM του Omarchy, από κάτω

Το omarchy-windows-vm τρέχει τα Windows 11 στο container dockurr/windows: QEMU με επιτάχυνση KVM μέσα σε privileged Docker container, με RAM, πυρήνες και δίσκο που ορίζεις στην εγκατάσταση. Εκθέτει μόνο στο 127.0.0.1 τη θύρα 8006 (web console) και την 3389 (RDP), και ο launcher συνδέεται με FreeRDP (xfreerdp3) με ήχο, μικρόφωνο, πρόχειρο και δυναμική ανάλυση, σε παράθυρο με τίτλο Windows VM - Omarchy. Ο φάκελος ~/Windows μοιράζεται με τα Windows. Το αρχείο docker compose ανήκει στον root και περιέχει και τον κωδικό του λογαριασμού των Windows.

Κατάσταση χωρίς να αγγίζει τον κωδικό

Κάθε 5 δευτερόλεπτα (κάθε 2 όσο τρέχει μια ενέργεια) το plugin ρωτά το Docker για το container omarchy-windows με ένα στενό πρότυπο του docker inspect: την κατάσταση, την ώρα εκκίνησης και μόνο τη μεταβλητή RAM_SIZE, που επιλέγεται μέσα στο πρότυπο. Επειδή το περιβάλλον του container κρατά και τον κωδικό των Windows, το plugin δεν τον λαμβάνει ποτέ.

Η απάντηση γίνεται μία από έξι καταστάσεις: running, stopped, absent (δεν υπάρχει container — τότε ελέγχει αν το VM είναι καν εγκατεστημένο, στη σημερινή ή στην παλιά θέση του compose), no-access (χωρίς δικαίωμα στο Docker), docker-down και error. Από την ώρα εκκίνησης βγαίνει ο χρόνος λειτουργίας (2d 3h, 1h 5m, <1m), και το RAM_SIZE=16G γίνεται «16 GB» για την υπενθύμιση.

Το παράθυρο RDP

Παράλληλα, το hyprctl clients -j λέει αν υπάρχει παράθυρο με τον τίτλο του RDP, τη διεύθυνσή του και το workspace του. Το «Show Windows desktop» εστιάζει εκείνο ακριβώς το παράθυρο — η διεύθυνση ελέγχεται πρώτα ότι είναι δεκαεξαδική, πριν δοθεί στο hyprctl — με τη νέα σύνταξη Lua του Hyprland και εφεδρεία την παλιά focuswindow.

Ενέργειες που αντέχουν επανεκκίνηση του shell

Εκκίνηση, επανεκκίνηση και τερματισμός τρέχουν μέσω του Launch.sh, που καλεί τον ίδιο τον launcher του Omarchy (omarchy-windows-vm launch, launch --keep-alive ή stop) και ξεκινά detached μέσω uwsm-app, σε δική του systemd scope. Έτσι ένα ανοιχτό παράθυρο RDP δεν κλείνει αν ξαναφορτωθεί το shell του Omarchy.

Όσο μια ενέργεια εκκρεμεί, το plugin ξέρει πότε τελείωσε από αυτό που φαίνεται: η εκκίνηση όταν το VM τρέχει και το RDP είναι ανοιχτό, η επανεκκίνηση μόνο αφού είδε πρώτα το VM σταματημένο και μετά ξανά σε λειτουργία, ο τερματισμός όταν δεν τρέχει πια. Μετά από 4 λεπτά σταματά να περιμένει και δείχνει που είναι το αρχείο καταγραφής.

Ένα bug του Omarchy, παρακαμπτόμενο με ασφάλεια

Ο launcher του Omarchy απαιτεί ο ~/Windows να έχει δικαιώματα 700, αλλά ο Samba του Dockur βάζει το setgid bit, που το chmod 0700 διατηρεί — και ο launcher αρνείται να ξεκινήσει (omacom/omarchy#10256). Πριν από κάθε εκκίνηση, το Launch.sh καθαρίζει μόνο αυτό το bit, μόνο στον δικό σου φάκελο: αν δεν είναι symbolic link και αν τον έχεις εσύ.

Αρχεία καταγραφής

Κάθε ενέργεια γράφει ένα αρχείο στο ~/.local/state/windows-vm/logs/ (ακολουθεί το $XDG_STATE_HOME), π.χ. launch-20260927-101545.log, σε φάκελο με δικαιώματα 700· κρατιούνται τα 30 πιο πρόσφατα. Το FreeRDP τρέχει με WLOG_LEVEL=INFO, γιατί στο προεπιλεγμένο WARN δεν γράφει τον λόγο που τελείωσε μια συνεδρία.

Ρυθμίσεις και όρια

Οι δύο ρυθμίσεις αποθηκεύονται στο ~/.config/omarchy/windows-vm/config.json και διαβάζονται ζωντανά αν αλλάξει το αρχείο. Το plugin δεν τροποποιεί ποτέ τη ρύθμιση Docker του VM, δεν χρειάζεται root, και η αφαίρεσή του δεν αγγίζει το VM ή τον δίσκο του.

Δοκιμές

Όλη η λογική (ανάγνωση του docker inspect, εύρεση του παραθύρου, χρόνος λειτουργίας, μετατροπή της RAM, πότε τελειώνει μια ενέργεια, η σύνοψη) είναι σε ένα καθαρό JavaScript module χωρίς εξαρτήσεις από το Quickshell, ώστε το qmltestrunner του Qt 6 να το ελέγχει offscreen με οκτώ ομάδες δοκιμών. Το tests/run.sh ελέγχει επίσης τη σύνταξη του Launch.sh και ότι απορρίπτει άγνωστες ενέργειες.

Πηγές και ημερομηνία

Πρώτη έκδοση: 2026-09-27. Το plugin εγκρίθηκε για το Omarchy plugin marketplace και θα εμφανιστεί εκεί με τον επόμενο κύκλο ενημέρωσης.

Αφαίρεση: omarchy plugin remove lef.windows-vm (προαιρετικά και rm -rf ~/.config/omarchy/windows-vm ~/.local/state/windows-vm για ρυθμίσεις και αρχεία καταγραφής). Άδεια: MIT.

Μάθετε περισσότερα ↗