A lightweight web-based tool to remotely change boot order on Windows machines with multi-boot setups (Windows/Ubuntu). Control which OS boots next from any device with a browser.
If you dual-boot Windows and Ubuntu, you typically need to be at your computer to select which OS to boot. This tool provides a simple web interface accessible from your phone, tablet, or any other device to change the boot order and reboot into your desired OS remotely.
Use Cases:
- Switch to Ubuntu remotely when you need Linux tools
- Boot back to Windows from your phone without physically accessing the machine
- Manage boot order across multiple dual-boot machines from one interface
The tool uses Windows bcdedit command to modify UEFI firmware boot order, then reboots the system. A Flask web server provides a browser-accessible interface for triggering these actions.
- Windows 10/11 with UEFI boot (not legacy BIOS)
- Dual-boot setup with Ubuntu (or other Linux distro)
- Administrator privileges
- Python 3.8+ (for running the web server)
git clone https://github.com/ibrunner/win-remote-boot-manager.git
cd win-remote-boot-managerWindows and Ubuntu each have unique boot entry identifiers (UUIDs) that vary per installation. You need to find these.
Run the detection script as administrator:
- Navigate to
scripts\detect-boot-entries.bat - Right-click → Run as administrator
- Look for entries like:
- Ubuntu: May appear as "ubuntu" or "Linux Boot Manager"
- Windows: Usually "Windows Boot Manager"
- Copy the identifier (GUID in curly braces, e.g.,
{12345678-1234-1234-1234-123456789012})
Example output:
Firmware Boot Manager
---------------------
identifier {fwbootmgr}
Firmware Application (101fffff)
-------------------------------
identifier {85e3790e-bc6e-11f0-8f85-dbeafe36350d}
description ubuntu
Windows Boot Manager
--------------------
identifier {9dea862c-5cdd-4e70-acc1-f32b344d4795}
description Windows Boot Manager
In this example:
- Ubuntu UUID:
{85e3790e-bc6e-11f0-8f85-dbeafe36350d} - Windows UUID:
{9dea862c-5cdd-4e70-acc1-f32b344d4795}
-
Copy the example environment file:
copy .env.example .env
-
Edit
.envand fill in your actual values:# Boot Entry UUIDs (from step 2) UBUNTU_BOOT_UUID={your-ubuntu-uuid-here} WINDOWS_BOOT_UUID={your-windows-uuid-here} # Web Server Configuration SERVER_HOST=0.0.0.0 SERVER_PORT=5000 # Authentication (generate a new token for security) AUTH_TOKEN=your-secure-token-here # Optional: Restrict to specific IPs ALLOWED_IPS=
-
Generate a secure auth token (optional but recommended):
# PowerShell [Convert]::ToBase64String((1..32 | ForEach-Object { Get-Random -Minimum 0 -Maximum 256 }))
Or with Python:
python -c "import secrets; print(secrets.token_urlsafe(32))"
# Create virtual environment (recommended)
python -m venv venv
venv\Scripts\activate
# Install required packages
pip install -r requirements.txtpython app.pyAccess the web interface at: http://localhost:5000
From other devices on your network: http://<your-pc-ip>:5000
By default, the server is accessible from any device on your local network. Find your PC's IP address:
ipconfig | findstr IPv4Then access from your phone/tablet at http://<pc-ip>:5000
For access from anywhere, use one of these options:
Option 1: Tailscale (Recommended)
- Free, secure VPN mesh network
- Install Tailscale on your PC and remote devices
- Access via Tailscale IP (e.g.,
http://100.x.x.x:5000) - Download Tailscale
Option 2: Cloudflare Tunnel
- Free permanent tunnel
- Provides public HTTPS URL
- Cloudflare Tunnel docs
Option 3: ngrok
- Quick temporary tunnels (good for testing)
- Free tier available
ngrok http 5000
- Authentication Required: The
AUTH_TOKENin your.envprotects against unauthorized access - HTTPS Recommended: Use Tailscale or a reverse proxy for encrypted connections
- Admin Privileges: The app needs admin rights to modify boot order
- IP Whitelisting: Configure
ALLOWED_IPSin.envto restrict access to specific devices
win-remote-boot-manager/
├── README.md # This file
├── .env.example # Environment variable template
├── .env # Your actual config (not in git)
├── requirements.txt # Python dependencies
├── app.py # Flask web server (coming soon)
├── scripts/
│ └── detect-boot-entries.bat # Helper to find boot UUIDs
├── static/ # CSS/JavaScript (coming soon)
└── templates/ # HTML templates (coming soon)
"bcdedit is not recognized"
- Ensure you're on Windows and running with administrator privileges
"Permission denied" when running bcdedit
- Right-click the script and select "Run as administrator"
Can't find Ubuntu entry in bcdedit output
- Your Ubuntu installation may not have created a UEFI boot entry
- Check your BIOS/UEFI settings to see available boot options
Web server not accessible from other devices
- Check Windows Firewall - you may need to allow port 5000
- Verify your PC and device are on the same network
- Try accessing via IP address, not hostname
To use this on another dual-boot machine:
- Clone the repository
- Run
scripts\detect-boot-entries.batas admin - Copy
.env.exampleto.envand configure with that machine's UUIDs - Install dependencies and run
- Support for multiple boot entries
- Scheduled boot changes
- Wake-on-LAN integration
- Multi-machine dashboard
- Mobile-optimized UI
- Windows service for auto-start
MIT
Issues and pull requests welcome!