19 KiB
O11 Pro WSL (Windows Subsystem for Linux) Setup Guide
Complete guide to running O11 Pro on Windows using WSL. This covers everything from installing WSL to running O11 as a background service with auto-start.
Prerequisites
- Windows 10 (Build 19041+) or Windows 11
- WSL 2 with Ubuntu (recommended)
- At least 2 GB RAM free for WSL
- 4 GB+ disk space for O11 + dependencies
Step 1 Install WSL 2
Open PowerShell as Administrator (right-click Start → Terminal (Admin)):
wsl --install
This installs WSL 2 with Ubuntu by default. Restart your computer when prompted.
After restart, a Ubuntu terminal will open and ask you to create a username and password. This is your Linux user remember it.
If you already have WSL installed, make sure you're on WSL 2:
wsl --set-default-version 2 wsl --install Ubuntu
Verify your installation:
wsl --list --verbose
You should see:
NAME STATE VERSION
* Ubuntu Running 2
If VERSION shows 1, upgrade it:
wsl --set-version Ubuntu 2
Step 2 Update Ubuntu
Open WSL (search "Ubuntu" in Start menu or run wsl in PowerShell):
sudo apt update && sudo apt upgrade -y
Step 3 Install Dependencies
O11 requires FFmpeg for transcoding and remuxing streams. Install it along with other useful tools:
sudo apt install -y ffmpeg curl wget nano unzip
Verify FFmpeg:
ffmpeg -version | head -1
You should see something like: ffmpeg version 4.4.2-0ubuntu0.22.04.1
Step 4 Download O11 Pro
Option A: From GitHub Release
# Create o11 directory
mkdir -p ~/o11 && cd ~/o11
# Download the latest unpacked binary
wget https://github.com/Ap0dexMe0/o11pro-unpacked/releases/latest/download/o11pro_unpacked -O o11pro_unpacked
# Make it executable
chmod +x o11pro_unpacked
Option B: From Local Windows File
If you already downloaded the binary on Windows, you can access it from WSL. Windows drives are mounted under /mnt/:
# Example: file is in your Windows Downloads folder
mkdir -p ~/o11 && cd ~/o11
# Copy from Windows to WSL home
cp /mnt/c/Users/YOUR_USERNAME/Downloads/o11pro_unpacked ./
# Make it executable
chmod +x o11pro_unpacked
Replace
YOUR_USERNAMEwith your actual Windows username. Use tab-completion: type/mnt/c/Users/and press Tab.
Option C: Using Windows Explorer
You can also drag and drop files directly into the WSL filesystem:
- Open WSL terminal
- Type
explorer.exe .to open Windows Explorer at the current WSL directory - Copy
o11pro_unpackedinto the Explorer window
Step 5 First Run
cd ~/o11
# Start with a port and credentials
./o11pro_unpacked -p 8080 -user admin -password mypass -stdout
You should see:
╔══════════════════════════════════════════════╗
║ o11 Pro Cracked [Nulled] ║
║ Unpacked Version [Ap0dexMe0] ║
╚══════════════════════════════════════════════╝
INFO: O11 is starting [version nulled!!]
INFO: loglevel set to 2
WARN: Use temporary account to login to Web UI: admin / OtoN4Fx0
INFO: streaming listening at 0.0.0.0:8080
INFO: webif http listening at 0.0.0.0:8080
INFO: loaded 0 provider(s)
If you get "Permission denied": Run
chmod +x o11pro_unpackedagain. If you get a "cannot execute binary file" error, make sure you're on WSL 2 (not WSL 1) and using an x86-64 Ubuntu.
Open your Windows browser and go to:
http://localhost:8080
Log in with admin / mypass (or the temporary credentials shown in the log).
Press Ctrl+C in the WSL terminal to stop O11.
Step 6 Accessing the Web UI from Windows
WSL 2 automatically forwards ports to Windows. You can access O11 from your Windows browser using:
| URL | When to use |
|---|---|
http://localhost:8080 |
Works in most cases (automatic port forwarding) |
http://127.0.0.1:8080 |
Same as above, explicit IP |
http://<WSL-IP>:8080 |
If localhost doesn't work (find IP with hostname -I inside WSL) |
Finding your WSL IP address
hostname -I | awk '{print $1}'
Example output: 172.26.155.210 then access http://172.26.155.210:8080
Accessing from other devices on your LAN
By default, WSL 2 uses a NAT network. To allow other devices on your local network to access O11, you need to set up port forwarding on Windows:
Open PowerShell as Administrator and run:
# Get WSL IP
$wslIP = wsl hostname -I
$wslIP = $wslIP.Trim()
# Forward port 8080 from Windows to WSL
netsh interface portproxy add v4tov4 address=0.0.0.0 port=8080 connectaddress=$wslIP connectport=8080
# Open Windows Firewall
New-NetFirewallRule -DisplayName "O11 Pro" -Direction Inbound -LocalPort 8080 -Protocol TCP -Action Allow
Now other devices can access O11 at http://<YOUR_WINDOWS_IP>:8080
Note
: The port proxy resets when WSL restarts (WSL gets a new IP). See the Auto-Start section for a permanent solution.
Step 7 Running in Background
Method A: Using nohup (Simple)
cd ~/o11
nohup ./o11pro_unpacked -p 8080 -user admin -password mypass \
-path ~/o11/data -stdout >> ~/o11/o11.log 2>&1 &
echo $! > ~/o11/o11.pid
echo "O11 started with PID $(cat ~/o11/o11.pid)"
To check if it's running:
ps -p $(cat ~/o11/o11.pid)
To stop it:
kill $(cat ~/o11/o11.pid)
To view logs:
tail -f ~/o11/o11.log
Method B: Using screen (Recommended for Interactive)
# Install screen if not already
sudo apt install -y screen
# Create a named screen session
screen -S o11
# Start O11
cd ~/o11
./o11pro_unpacked -p 8080 -user admin -password mypass -path ~/o11/data
# Detach from screen: press Ctrl+A then D
# Reattach later:
screen -r o11
Method C: Using systemd Service (Best for Production)
WSL 2 supports systemd (on Ubuntu 22.04+). Create a service file:
sudo nano /etc/systemd/system/o11.service
Paste the following (adjust paths and user):
[Unit]
Description=O11 Pro Streaming Server
After=network.target
[Service]
Type=simple
User=YOUR_LINUX_USERNAME
WorkingDirectory=/home/YOUR_LINUX_USERNAME/o11
ExecStart=/home/YOUR_LINUX_USERNAME/o11/o11pro_unpacked -p 8080 -user admin -password mypass -path /home/YOUR_LINUX_USERNAME/o11/data
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
Replace
YOUR_LINUX_USERNAMEwith your WSL username (runwhoamito check).
Enable and start:
sudo systemctl daemon-reload
sudo systemctl enable o11
sudo systemctl start o11
Check status:
sudo systemctl status o11
View logs:
sudo journalctl -u o11 -f
Stop / restart:
sudo systemctl stop o11
sudo systemctl restart o11
If systemd doesn't work in WSL, add this to
/etc/wsl.conf:[boot] systemd=trueThen restart WSL:
wsl --shutdownin PowerShell, then reopen Ubuntu.
Step 8 Setting Up with Working Directory
Use the -path flag to keep all O11 data organized:
mkdir -p ~/o11/data
./o11pro_unpacked -p 8080 -user admin -password mypass -path ~/o11/data
O11 will create its directory structure automatically:
~/o11/data/
├── hls/live/ # Live stream segments
├── hls/replay/ # Replay segments
├── hls/vod/ # VOD segments
├── dl/tmp/ # VOD download temp files
├── epg/ # EPG data
├── logos/ # Channel logos
├── logs/ # Log files
├── providers/ # Provider scripts & configs
├── scripts/ # Auto-generated o11.py
├── rec/ # Recordings
├── o11.cfg # Main config
├── o11-job.cfg # Jobs config
└── o11-rec.cfg # Recordings config
Step 9 Adding Providers
Via Web UI (Easiest)
- Open
http://localhost:8080in your Windows browser - Log in with your credentials
- Click "Add New Provider" on the Providers page
- Fill in the provider name and script settings
- Click Save
Via Provider Script
Place a Python script in the providers/ directory:
nano ~/o11/data/providers/my_provider.py
Example provider script:
#!/usr/bin/env python3
import requests, json
def get_channels():
# Return list of channels
return [
{"name": "Channel 1", "url": "https://example.com/stream1.m3u8", "type": "live"},
{"name": "Channel 2", "url": "https://example.com/stream2.m3u8", "type": "live"},
]
if __name__ == "__main__":
action = sys.argv[1] if len(sys.argv) > 1 else "channels"
if action == "channels":
print(json.dumps(get_channels()))
Make it executable:
chmod +x ~/o11/data/providers/my_provider.py
Then configure O11 to use this script through the Web UI → Config → Script section.
Step 10 Auto-Start on Windows Boot
Method A: Windows Task Scheduler
This is the most reliable method for auto-starting O11 when Windows boots.
-
Open Task Scheduler on Windows (search "Task Scheduler")
-
Click Create Task (not Basic Task)
-
General tab:
- Name:
O11 Pro Server - Select Run whether user is logged on or not
- Check Run with highest privileges
- Name:
-
Triggers tab:
- Click New
- Begin the task: At log on
- Click OK
-
Actions tab:
- Click New
- Action: Start a program
- Program/script:
wsl - Add arguments:
-d Ubuntu -u YOUR_LINUX_USERNAME -- bash -c "cd ~/o11 && ./o11pro_unpacked -p 8080 -user admin -password mypass -path ~/o11/data -stdout >> ~/o11/o11.log 2>&1" - Click OK
-
Conditions tab:
- Uncheck "Start the task only if the computer is on AC power"
-
Settings tab:
- Check "Run task as soon as possible after a scheduled start is missed"
- Click OK
Method B: Windows Startup Script with Port Forwarding
Create a PowerShell script that starts WSL + sets up port forwarding:
Open Notepad and save this as C:\o11-start.ps1:
# Start O11 in WSL
wsl -d Ubuntu -u YOUR_LINUX_USERNAME -- bash -c "cd ~/o11 && nohup ./o11pro_unpacked -p 8080 -user admin -password mypass -path ~/o11/data >> ~/o11/o11.log 2>&1 & echo $! > ~/o11/o11.pid"
# Wait for O11 to start
Start-Sleep -Seconds 3
# Set up port forwarding for LAN access
$wslIP = (wsl hostname -I).Trim()
netsh interface portproxy delete v4tov4 address=0.0.0.0 port=8080 2>$null
netsh interface portproxy add v4tov4 address=0.0.0.0 port=8080 connectaddress=$wslIP connectport=8080
# Open firewall
$rule = Get-NetFirewallRule -DisplayName "O11 Pro" -ErrorAction SilentlyContinue
if (-not $rule) {
New-NetFirewallRule -DisplayName "O11 Pro" -Direction Inbound -LocalPort 8080 -Protocol TCP -Action Allow
}
Write-Host "O11 Pro is running at http://localhost:8080"
Write-Host "LAN access: http://$((Get-NetIPAddress -AddressFamily IPv4 | Where-Object { $_.InterfaceAlias -notmatch 'Loopback|vEthernet' -and $_.IPAddress -notmatch '^169' } | Select-Object -First 1).IPAddress):8080"
Create a shortcut in the Startup folder:
- Press
Win+R, typeshell:startup, press Enter - Right-click → New → Shortcut
- Location:
powershell.exe -ExecutionPolicy Bypass -File "C:\o11-start.ps1" - Name:
O11 Pro - Right-click the shortcut → Properties → Advanced → Check Run as administrator
Method C: WSL Boot Command
If using systemd (Ubuntu 22.04+), O11 starts automatically via the systemd service created in Step 7. You just need to ensure WSL starts on boot.
Create a Windows startup shortcut:
- Press
Win+R, typeshell:startup, press Enter - Right-click → New → Shortcut
- Location:
wsl -d Ubuntu - Name:
Start WSL for O11
Or use Task Scheduler as in Method A, but with simpler arguments:
wsl -d Ubuntu -- sudo systemctl start o11
Step 11 HTTPS Setup
Generate Self-Signed Certificates (for testing)
cd ~/o11
openssl req -x509 -newkey rsa:4096 -keyout server.key -out server.crt \
-days 365 -nodes -subj "/CN=localhost"
Use Let's Encrypt (for production with a domain)
# Install certbot
sudo apt install -y certbot
# Get certificate (replace example.com and your email)
sudo certbot certonly --standalone -d o11.example.com --non-interactive --agree-tos -m your@email.com
# Copy certificates to o11 directory
sudo cp /etc/letsencrypt/live/o11.example.com/fullchain.pem ~/o11/server.crt
sudo cp /etc/letsencrypt/live/o11.example.com/privkey.pem ~/o11/server.key
Start with HTTPS:
./o11pro_unpacked -p 8443 -https -user admin -password mypass -path ~/o11/data
Note for WSL: Windows Firewall will prompt you to allow the connection. Click Allow.
Step 12 Network Configuration for WSL
Port Forwarding Reference
If you need to expose multiple ports (streaming, EPG), forward each one:
# Run in PowerShell as Administrator
$wslIP = (wsl hostname -I).Trim()
# Web UI
netsh interface portproxy add v4tov4 address=0.0.0.0 port=8080 connectaddress=$wslIP connectport=8080
# Streaming port
netsh interface portproxy add v4tov4 address=0.0.0.0 port=9090 connectaddress=$wslIP connectport=9090
# EPG port
netsh interface portproxy add v4tov4 address=0.0.0.0 port=9091 connectaddress=$wslIP connectport=9091
# Firewall rules
New-NetFirewallRule -DisplayName "O11 Pro Web" -Direction Inbound -LocalPort 8080 -Protocol TCP -Action Allow
New-NetFirewallRule -DisplayName "O11 Pro Stream" -Direction Inbound -LocalPort 9090 -Protocol TCP -Action Allow
New-NetFirewallRule -DisplayName "O11 Pro EPG" -Direction Inbound -LocalPort 9091 -Protocol TCP -Action Allow
View Current Port Forwards
netsh interface portproxy show all
Remove Port Forwards
netsh interface portproxy delete v4tov4 address=0.0.0.0 port=8080
Step 13 Performance Tuning for WSL
RAMFS for HLS Live Segments
By default, O11 uses hls/live/ for live stream segments. On a real Linux system, this is typically a RAMFS for performance. On WSL, you can create one:
# Create a 512MB RAMFS
sudo mkdir -p ~/o11/data/hls/live
sudo mount -t tmpfs -o size=512m tmpfs ~/o11/data/hls/live
To make it persistent across reboots, add to /etc/fstab:
echo "tmpfs /home/YOUR_LINUX_USERNAME/o11/data/hls/live tmpfs defaults,size=512m 0 0" | sudo tee -a /etc/fstab
If you skip RAMFS, use the
-noramfsflag when starting O11:./o11pro_unpacked -p 8080 -noramfs -path ~/o11/data
WSL Memory Limits
Create or edit %USERPROFILE%\.wslconfig on Windows:
[wsl2]
memory=4GB
swap=2GB
processors=4
Apply changes:
wsl --shutdown
Reopen Ubuntu. Check memory:
free -h
Step 14 File Management Between Windows and WSL
Accessing WSL Files from Windows
In Windows Explorer, navigate to:
\\wsl$\Ubuntu\home\YOUR_LINUX_USERNAME\o11
Or type this in Explorer's address bar:
\\wsl.localhost\Ubuntu\home\YOUR_LINUX_USERNAME\o11
You can also open Explorer from WSL:
explorer.exe ~/o11/data
Accessing Windows Files from WSL
Windows drives are mounted under /mnt/:
| Windows Path | WSL Path |
|---|---|
C:\ |
/mnt/c/ |
D:\ |
/mnt/d/ |
C:\Users\John\Downloads |
/mnt/c/Users/John/Downloads |
Moving O11 Data to a Windows Drive (for larger storage)
If your C: drive is small, you can point -path to a Windows drive:
# Create data directory on D: drive (Windows)
mkdir -p /mnt/d/o11-data
# Start O11 with data on Windows drive
./o11pro_unpacked -p 8080 -path /mnt/d/o11-data -user admin -password mypass
Performance note: WSL filesystem (
~/o11/) is faster than Windows drives (/mnt/d/). For best performance, keep the binary and live HLS segments in WSL, and use Windows drives only for VOD downloads and recordings.
Step 15 Troubleshooting
"Permission denied" when running the binary
chmod +x ~/o11/o11pro_unpacked
If still failing, check if the file is on a Windows drive (NTFS doesn't support Linux permissions):
# Move to WSL filesystem
mv /mnt/c/Users/.../o11pro_unpacked ~/o11/
chmod +x ~/o11/o11pro_unpacked
"cannot execute binary file: Exec format error"
You're likely on WSL 1 or ARM. Verify:
wsl --list --verbose
Make sure VERSION is 2. If not:
wsl --set-version Ubuntu 2
Port already in use
# Find what's using port 8080
sudo lsof -i :8080
# Kill the process
kill -9 <PID>
Or use a different port:
./o11pro_unpacked -p 8081 -path ~/o11/data
Can't access from Windows browser
- Check O11 is running:
curl http://localhost:8080inside WSL - Check Windows Firewall it may be blocking the connection
- Try the WSL IP directly:
http://$(wsl hostname -I).Trim():8080 - If using a specific bind address, try
-b 0.0.0.0:./o11pro_unpacked -p 8080 -b 0.0.0.0 -path ~/o11/data
WSL keeps shutting down O11 when terminal closes
Use nohup, screen, or systemd as described in Step 7. The nohup method is simplest:
nohup ./o11pro_unpacked -p 8080 -path ~/o11/data >> ~/o11/o11.log 2>&1 &
FFmpeg not found
sudo apt install -y ffmpeg
which ffmpeg
# Should output: /usr/bin/ffmpeg
# If using a custom path:
./o11pro_unpacked -p 8080 -f /usr/bin/ffmpeg -path ~/o11/data
WSL port forwarding resets after reboot
This happens because WSL gets a new IP on each start. Use the PowerShell script from Step 10 (Method B) to automatically reconfigure port forwarding.
To manually fix right now:
# PowerShell as Administrator
$wslIP = (wsl hostname -I).Trim()
netsh interface portproxy delete v4tov4 address=0.0.0.0 port=8080 2>$null
netsh interface portproxy add v4tov4 address=0.0.0.0 port=8080 connectaddress=$wslIP connectport=8080
Quick Reference Card
Start O11
cd ~/o11
./o11pro_unpacked -p 8080 -user admin -password mypass -path ~/o11/data
Start in Background
cd ~/o11
nohup ./o11pro_unpacked -p 8080 -user admin -password mypass -path ~/o11/data >> ~/o11/o11.log 2>&1 &
echo $! > ~/o11/o11.pid
Stop O11
kill $(cat ~/o11/o11.pid)
View Logs
tail -f ~/o11/o11.log
Check if Running
ps aux | grep o11pro
Update Binary
cd ~/o11
wget https://github.com/Ap0dexMe0/o11pro-unpacked/releases/latest/download/o11pro_unpacked -O o11pro_unpacked
chmod +x o11pro_unpacked
Complete Start with All Options
./o11pro_unpacked \
-p 8080 \
-streamport 9090 \
-epgport 9091 \
-user admin \
-password mysecretpass \
-jwtsecret my-secret-key-12345 \
-path ~/o11/data \
-f /usr/bin/ffmpeg \
-v 2 \
-noramfs \
-b 0.0.0.0