Skip to content

Commit dfd6ddc

Browse files
committed
Add commands
1 parent 5b82b63 commit dfd6ddc

3 files changed

Lines changed: 246 additions & 0 deletions

File tree

assets/commands/index.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6828,6 +6828,7 @@ sidecar.md
68286828
siege.md
68296829
sieve.md
68306830
sig.md
6831+
sigmap.md
68316832
signal-desktop.md
68326833
silentcast.md
68336834
silicon.md
@@ -8061,6 +8062,7 @@ winecfg.md
80618062
winetricks.md
80628063
winicontopam.md
80638064
winicontoppm.md
8065+
winpodx.md
80648066
winrm.md
80658067
wipe.md
80668068
wipeclean.md

assets/commands/sigmap.md

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# TAGLINE
2+
3+
Map Unix signals on the way to a child process
4+
5+
# TLDR
6+
7+
**Translate SIGWINCH (28) into SIGINT (2)** for sleep
8+
9+
```sigmap -m 28:2 /bin/sleep 30```
10+
11+
**Forward SIGTERM as SIGHUP** to a long-running daemon
12+
13+
```sigmap -m 15:1 [path/to/program] [args]```
14+
15+
**Remap several signals at once** by repeating -m
16+
17+
```sigmap -m 1:15 -m 2:15 [path/to/program]```
18+
19+
# SYNOPSIS
20+
21+
**sigmap** **-m** _from_:_to_ [**-m** _from_:_to_ ...] _program_ [_arguments_]
22+
23+
# PARAMETERS
24+
25+
**-m** _from_:_to_, **--map=**_from_:_to_
26+
> Translate signal _from_ into signal _to_ when forwarding to the child process. Both values are integer signal numbers as listed in **signal(7)**. The option may be repeated to install multiple mappings.
27+
28+
_program_
29+
> Path to the executable to launch. Because **sigmap** uses **execve(2)**, this must be an absolute or relative path; **PATH** lookup is **not** performed.
30+
31+
_arguments_
32+
> Forwarded unchanged to the launched program.
33+
34+
# DESCRIPTION
35+
36+
**sigmap** is a small wrapper that launches a child process and rewrites the signals delivered to it. The wrapper installs a handler for each _from_ signal listed on the command line; when the host kernel delivers _from_ to **sigmap**, the wrapper instead sends the corresponding _to_ signal to the child. Signals not listed pass through unchanged.
37+
38+
This is useful when one process insists on emitting a signal that the wrapped program does not understand, when bridging between shells and applications that disagree on which signal means "reload", or when adapting legacy software to a different supervisor. Because the rewrite happens entirely in the wrapper, the child process sees only the translated signals and needs no modification.
39+
40+
**sigmap** uses **execve(2)** to spawn the child, so the resolved binary must be a real executable file with a full path. Shell built-ins, aliases, and bare program names that rely on **PATH** will not work.
41+
42+
# EXAMPLES
43+
44+
Make a SIGTERM act like a graceful SIGHUP reload for a daemon:
45+
46+
```sigmap -m 15:1 /usr/local/sbin/myd```
47+
48+
Catch terminal-resize events and turn them into SIGINT so a script exits when the window is resized:
49+
50+
```sigmap -m 28:2 /usr/local/bin/myscript```
51+
52+
# CAVEATS
53+
54+
Signal numbers are **not portable** across architectures; **SIGUSR1** is **10** on x86 Linux but **30** on Alpha. Always check **signal(7)** on the target platform before hardcoding numeric values. Real-time signals (**SIGRTMIN**+_n_) can be remapped but the numeric value depends on the C library. **SIGKILL (9)** and **SIGSTOP (19)** cannot be caught and therefore cannot be remapped.
55+
56+
# HISTORY
57+
58+
**sigmap** is an open-source utility published by Martin Jacobsson on GitHub as a minimal Unix signals converter. It is intentionally small and depends only on a POSIX C runtime, making it easy to drop into containers and minimal init systems.
59+
60+
# SEE ALSO
61+
62+
[signal](/man/signal)(7), [kill](/man/kill)(1), [trap](/man/trap)(1), [execve](/man/execve)(2)

assets/commands/winpodx.md

Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
# TAGLINE
2+
3+
Run Windows apps on Linux as native windows
4+
5+
# TLDR
6+
7+
**Start the Windows pod** and wait until RDP is ready
8+
9+
```winpodx pod start --wait```
10+
11+
**List available Windows applications** detected inside the pod
12+
13+
```winpodx app list```
14+
15+
**Launch a registered application** (e.g. Microsoft Word)
16+
17+
```winpodx app run [app_name]```
18+
19+
**Open a local file** with a Windows application
20+
21+
```winpodx app run [app_name] [path/to/file]```
22+
23+
**Launch the full Windows desktop** as a single RDP window
24+
25+
```winpodx app run desktop```
26+
27+
**Open the Qt6 graphical interface**
28+
29+
```winpodx gui```
30+
31+
**Stop the pod** when finished
32+
33+
```winpodx pod stop```
34+
35+
**Run the interactive setup wizard**
36+
37+
```winpodx setup```
38+
39+
# SYNOPSIS
40+
41+
**winpodx** _domain_ _command_ [_arguments_] [**--flags**]
42+
43+
# PARAMETERS
44+
45+
**app list**
46+
> Show every Windows application detected inside the pod.
47+
48+
**app run** _name_ [_file_]
49+
> Launch the named application as a RemoteApp window. An optional file is opened with that application.
50+
51+
**app install** _name_
52+
> Register a custom application in the desktop launcher menu.
53+
54+
**app install-all**
55+
> Register every detected application as a desktop launcher entry.
56+
57+
**app sessions**
58+
> List active RemoteApp sessions.
59+
60+
**app kill** _name_
61+
> Terminate a running RemoteApp session.
62+
63+
**app refresh**
64+
> Rescan the Windows guest for newly installed applications.
65+
66+
**pod start** [**--wait**]
67+
> Start the Windows container. **--wait** blocks until RDP is reachable.
68+
69+
**pod stop**
70+
> Stop the Windows container.
71+
72+
**pod restart**
73+
> Restart the Windows container.
74+
75+
**pod status**
76+
> Print container, RDP, and agent state.
77+
78+
**pod wait-ready** [**--logs**]
79+
> Block until the first-boot Sysprep / OEM phase finishes. **--logs** streams progress.
80+
81+
**pod apply-fixes**
82+
> Reapply Windows-side configuration tweaks (registry, services, defaults).
83+
84+
**pod sync-password**
85+
> Synchronise the RDP password between **winpodx.toml** and the Windows guest.
86+
87+
**pod multi-session** {_on_|_off_|_status_}
88+
> Toggle bundled rdprrap multi-session support.
89+
90+
**power --suspend**
91+
> Pause the running container.
92+
93+
**power --resume**
94+
> Resume a paused container.
95+
96+
**rotate-password**
97+
> Generate and apply a new RDP password.
98+
99+
**setup**
100+
> Run the interactive first-time configuration wizard.
101+
102+
**check** [**--json**]
103+
> Run health probes (pod, RDP, agent, round-trip, disk) and print results.
104+
105+
**info**
106+
> Print system diagnostics (versions, paths, dependencies).
107+
108+
**cleanup**
109+
> Remove stale Office lock files in the guest.
110+
111+
**timesync**
112+
> Force a time synchronisation in the Windows guest.
113+
114+
**debloat**
115+
> Disable telemetry and unneeded services in the guest.
116+
117+
**config show**
118+
> Print the current configuration.
119+
120+
**config set** _key_ _value_
121+
> Update a configuration key (e.g. **rdp.scale 140**).
122+
123+
**config import**
124+
> Import settings from an existing **winapps.conf**.
125+
126+
**gui**
127+
> Launch the Qt6 main window.
128+
129+
**tray**
130+
> Launch the system tray icon.
131+
132+
# DESCRIPTION
133+
134+
**winpodx** runs a Windows guest inside a Podman or Docker container and presents individual Windows applications as native Linux windows through **FreeRDP** RemoteApp. Each app gets its own pinnable, alt-tabbable window with the original icon and file association, without exposing the underlying Windows desktop.
135+
136+
A small HTTP agent inside the guest receives bearer-authenticated commands from the host so app launches do not flash a PowerShell window. Application discovery, password rotation, multi-session, and health checks are all driven from the **winpodx** CLI; a Qt6 GUI provides the same actions plus an allowlisted in-app terminal.
137+
138+
**winpodx** targets Linux only. The first run downloads a Windows ISO, runs Sysprep, and applies an OEM customisation pass; expect five to ten minutes before the pod is usable.
139+
140+
# CONFIGURATION
141+
142+
The configuration file lives at _~/.config/winpodx/winpodx.toml_ and is editable through **winpodx config set**:
143+
144+
```
145+
[pod]
146+
backend = "podman" # or "docker"
147+
cpus = 4
148+
ram = "8G"
149+
auto_start = true
150+
idle_timeout = "30m"
151+
152+
[rdp]
153+
host = "127.0.0.1"
154+
port = 3389
155+
scale = 100
156+
dpi = 96
157+
user = "winpodx"
158+
password_rotation_days = 7
159+
160+
[agent]
161+
port = 8765
162+
token = "<generated>"
163+
```
164+
165+
Environment variables read at start:
166+
167+
```
168+
WINPODX_CONFIG Override config file path
169+
WINPODX_LOG_LEVEL debug | info | warn | error
170+
```
171+
172+
# CAVEATS
173+
174+
Requires a working Podman or Docker installation, a usable KVM accelerator, and a recent **FreeRDP 3** build with RemoteApp support. The first boot performs a full Windows install plus Sysprep; do not interrupt **winpodx pod wait-ready**. Microsoft Windows itself remains subject to its own licensing terms and is **not redistributed** by winpodx; the user supplies a valid Windows installation. The guest agent listens on **localhost:8765** with a bearer token; do not expose this port to other hosts.
175+
176+
# HISTORY
177+
178+
**winpodx** is a Python 3.9+ project that pairs the **dockur/windows** container image with **FreeRDP** RemoteApp and a custom PowerShell HTTP guest agent. It targets the same use case as **WinApps** but ships container, agent, and GUI as a single tool rather than relying on a manually configured VM. Active development continues on the **kernalix7/winpodx** repository.
179+
180+
# SEE ALSO
181+
182+
[podman](/man/podman)(1), [docker](/man/docker)(1), [xfreerdp](/man/xfreerdp)(1), [virsh](/man/virsh)(1), [wine](/man/wine)(1)

0 commit comments

Comments
 (0)