Rufux brings the Rufus workflow to Linux: pick a drive and an image, check the options, and press START. It writes Linux ISOs, builds Windows 10/11 installation drives, and formats USB sticks and SD cards. It runs on any modern Linux distribution.

Rufux is an independent project inspired by Rufus. It is not affiliated with Rufus or its author.
.img.xz, .gz, .bz2, .zst, .zip and raw .img.bootmgr).install.wim splitting (via wimlib) when the image has a file over
4 GB. This uses Windows' own signed boot files, so Secure Boot keeps working.autorun.inf + icon)./, /boot,
/home, swap and so on are never shown. USB hard disks are hidden unless you tick
List USB Hard Drives.Rufux needs:
pkexec), which every desktop has, to ask for your password when writinglsblk, sfdisk, wipefs), dosfstools and e2fsprogsRecommended extras: wimlib (lets Windows images with an install.wim over 4 GB stay on
FAT32), ntfs-3g (NTFS) and exfatprogs (exFAT).
Follow the section for your distribution: install the dependencies, download the source, then
install. Every method except the Arch package installs under /usr/local.
sudo apt install git make python3-pyqt6 pkexec dosfstools fdisk e2fsprogs
sudo apt install ntfs-3g exfatprogs wimtools # recommended
git clone https://github.com/oreo1298/WindowsUSBLinux.git
cd WindowsUSBLinux
make uefi-ntfs.img # optional, see below
sudo make install
On older releases (Ubuntu 22.04, Debian 11) the pkexec package is called policykit-1. If
python3-pyqt6 doesn't exist on your release, see Without a packaged Qt binding.
sudo dnf install git make python3-pyqt6 polkit dosfstools util-linux e2fsprogs
sudo dnf install ntfs-3g ntfsprogs exfatprogs wimlib-utils # recommended
git clone https://github.com/oreo1298/WindowsUSBLinux.git
cd WindowsUSBLinux
make uefi-ntfs.img # optional, see below
sudo make install
sudo zypper install git make python3-PyQt6 polkit dosfstools util-linux e2fsprogs
sudo zypper install ntfs-3g ntfsprogs exfatprogs wimtools # recommended
git clone https://github.com/oreo1298/WindowsUSBLinux.git
cd WindowsUSBLinux
make uefi-ntfs.img # optional, see below
sudo make install
The repository includes a PKGBUILD, so Rufux installs as a normal pacman package (with the UEFI:NTFS image included):
sudo pacman -S --needed git base-devel
sudo pacman -S --needed ntfs-3g exfatprogs wimlib # recommended
git clone https://github.com/oreo1298/WindowsUSBLinux.git
cd WindowsUSBLinux
makepkg -si
Install the requirements listed above (plus git and make) with your package manager, then:
git clone https://github.com/oreo1298/WindowsUSBLinux.git
cd WindowsUSBLinux
sudo make install
If your distribution has neither PyQt6 nor PySide6, install PySide6 from PyPI into a private
virtual environment and point the installed launcher at it (run this in the repository folder,
instead of the plain sudo make install):
python3 -m venv ~/.local/share/rufux-venv
~/.local/share/rufux-venv/bin/pip install PySide6-Essentials
sudo make PYTHON_GUI=$HOME/.local/share/rufux-venv/bin/python install
make uefi-ntfs.img downloads the UEFI:NTFS boot image from the Rufus v4.15 release (with
curl or wget) and checks its SHA-256, so make install can bundle it. It's only needed for
NTFS/exFAT boot drives. If you skip it, Rufux offers to download it the first time you need it.
Legacy BIOS boot for Windows drives (MBR → "BIOS or UEFI") needs GRUB's BIOS modules:
| Distribution family | Packages |
|---|---|
| Debian / Ubuntu | grub-pc-bin grub2-common |
| Fedora | grub2-pc-modules grub2-tools |
| openSUSE | grub2-i386-pc |
| Arch-based | grub |
Installing these does not change your own boot loader. Rufux only runs grub-install
against the USB drive.
UDF formatting needs udftools (same name everywhere).
Package names for Debian/Ubuntu were checked on Ubuntu 24.04. The Fedora and openSUSE names
are the usual ones for those distributions; if one isn't found, search for it with
dnf search or zypper search.
When a tool is missing, Rufux tells you which package to install, using your distribution's package manager.
Start Rufux from your application menu, or run rufux (optionally rufux some-image.iso).
To update, run git pull in the repository folder, then repeat the install command you used
(sudo make install or makepkg -si).
With the requirements installed, you can also run it straight from the repository:
./bin/rufux
Polkit then asks for your password to run bin/rufux-helper. Without the installed polkit
policy, the prompt shows the helper's full path instead of a friendly message.
Use the command that matches how you installed Rufux:
| Installed with | Remove with |
|---|---|
sudo make install | sudo make uninstall (run it from the repository folder) |
makepkg -si (Arch-based) | sudo pacman -Rns rufux |
sudo make install with the PySide6 virtual environment | sudo make uninstall, then rm -rf ~/.local/share/rufux-venv |
Then remove your personal settings, the UEFI:NTFS download cache (only present if Rufux downloaded it), and the repository folder:
rm -rf ~/.config/rufux ~/.cache/rufux
rm -rf ~/WindowsUSBLinux # or wherever you cloned it
Packages you installed yourself (such as wimlib, ntfs-3g, exfatprogs or GRUB) stay
installed; remove them with your package manager if nothing else needs them. Don't remove
GRUB if your computer boots with it.
ALL DATA ON DEVICE … WILL BE DESTROYED confirmation, then a polkit
password prompt.install.wim is larger than 4 GB, it is
split into install.swm + install2.swm… (Windows Setup supports this natively). If
wimlib is missing, or the image uses a solid-compressed install.esd larger than 4 GB,
pick NTFS instead.grub).autounattend.xml at the root of the drive. If you
only chose options that apply after installation, they go to
sources/$OEM$/$$/Panther/unattend.xml instead, which is the same split Rufus uses. With the
requirement bypass enabled, sources/appraiserres.dll is also neutralized for in-place upgrades.lsblk and reads images with a built-in ISO 9660 / Joliet / Rock Ridge / UDF reader, the way
Rufus uses libcdio.<prefix>/lib/rufux/bin/rufux-helper) is started through
pkexec. Polkit caches the authorization for a few minutes. The helper reads one JSON job,
reports progress as JSON lines, and can be cancelled at any time.wipefs, sfdisk, mkfs.*, mount, wimlib-imagex and
grub-install.0xEF on MBR).Not implemented: Windows To Go, FreeDOS, installing Syslinux/GRUB for Linux ISO mode (use DD mode), and the built-in Windows ISO downloader (Fido). The ▾ menu next to SELECT links to the official download pages instead.
Additions: verification of written data in both modes, compressed-image writing with progress, a checksum compare box, and a Safely remove the drive when finished option.
polkit-kde-agent
or lxqt-policykit.The tests use pytest (python3-pytest on Debian/Ubuntu and Fedora, python-pytest on Arch):
make test # unit tests; the end-to-end tests also need root and loop devices
sudo make test # runs everything, including real partition/format/copy tests on loop devices
tests/vm/run.sh is an optional full-system test. It starts your own system in a VM (with
virtme-ng) with 8 virtual USB sticks attached. It runs
the helper against them with the real kernel file system drivers, then boots each resulting stick
in QEMU with UEFI (OVMF) and legacy BIOS to check that the expected boot loader really starts.
This covers Windows FAT32/NTFS/exFAT, GPT/MBR, UEFI:NTFS and BIOS boot through GRUB, hybrid DD
images, and Linux ISO mode with label patching:
sudo tests/vm/run.sh # uses the running kernel; set KERNEL=/path/to/vmlinuz to pick another
Code layout:
rufux/core/: Qt-free logic. The image reader (isofs.py), image analysis (image.py),
drive enumeration (blockdevs.py), file system rules (fsdefs.py), UI decisions (plan.py)
and the Windows answer file generator (unattend.py).rufux/helper/: the privileged helper. DD writing, ISO mode, partitioning, formatting, bad
blocks, and saving a drive.rufux/ui/: the Qt interface.GPL-3.0-or-later, see LICENSE. The UEFI:NTFS boot image is © Pete Batard and licensed under the GPLv2+. It is downloaded from the Rufus repository when the package is built.
Python
96.6%
Shell
2.2%
Rufux brings the Rufus workflow to Linux: pick a drive and an image, check the options, and press START. It writes Linux ISOs, builds Windows 10/11 installation drives, and formats USB sticks and SD cards. It runs on any modern Linux distribution.

Rufux is an independent project inspired by Rufus. It is not affiliated with Rufus or its author.
.img.xz, .gz, .bz2, .zst, .zip and raw .img.bootmgr).install.wim splitting (via wimlib) when the image has a file over
4 GB. This uses Windows' own signed boot files, so Secure Boot keeps working.autorun.inf + icon)./, /boot,
/home, swap and so on are never shown. USB hard disks are hidden unless you tick
List USB Hard Drives.Rufux needs:
pkexec), which every desktop has, to ask for your password when writinglsblk, sfdisk, wipefs), dosfstools and e2fsprogsRecommended extras: wimlib (lets Windows images with an install.wim over 4 GB stay on
FAT32), ntfs-3g (NTFS) and exfatprogs (exFAT).
Follow the section for your distribution: install the dependencies, download the source, then
install. Every method except the Arch package installs under /usr/local.
sudo apt install git make python3-pyqt6 pkexec dosfstools fdisk e2fsprogs
sudo apt install ntfs-3g exfatprogs wimtools # recommended
git clone https://github.com/oreo1298/WindowsUSBLinux.git
cd WindowsUSBLinux
make uefi-ntfs.img # optional, see below
sudo make install
On older releases (Ubuntu 22.04, Debian 11) the pkexec package is called policykit-1. If
python3-pyqt6 doesn't exist on your release, see Without a packaged Qt binding.
sudo dnf install git make python3-pyqt6 polkit dosfstools util-linux e2fsprogs
sudo dnf install ntfs-3g ntfsprogs exfatprogs wimlib-utils # recommended
git clone https://github.com/oreo1298/WindowsUSBLinux.git
cd WindowsUSBLinux
make uefi-ntfs.img # optional, see below
sudo make install
sudo zypper install git make python3-PyQt6 polkit dosfstools util-linux e2fsprogs
sudo zypper install ntfs-3g ntfsprogs exfatprogs wimtools # recommended
git clone https://github.com/oreo1298/WindowsUSBLinux.git
cd WindowsUSBLinux
make uefi-ntfs.img # optional, see below
sudo make install
The repository includes a PKGBUILD, so Rufux installs as a normal pacman package (with the UEFI:NTFS image included):
sudo pacman -S --needed git base-devel
sudo pacman -S --needed ntfs-3g exfatprogs wimlib # recommended
git clone https://github.com/oreo1298/WindowsUSBLinux.git
cd WindowsUSBLinux
makepkg -si
Install the requirements listed above (plus git and make) with your package manager, then:
git clone https://github.com/oreo1298/WindowsUSBLinux.git
cd WindowsUSBLinux
sudo make install
If your distribution has neither PyQt6 nor PySide6, install PySide6 from PyPI into a private
virtual environment and point the installed launcher at it (run this in the repository folder,
instead of the plain sudo make install):
python3 -m venv ~/.local/share/rufux-venv
~/.local/share/rufux-venv/bin/pip install PySide6-Essentials
sudo make PYTHON_GUI=$HOME/.local/share/rufux-venv/bin/python install
make uefi-ntfs.img downloads the UEFI:NTFS boot image from the Rufus v4.15 release (with
curl or wget) and checks its SHA-256, so make install can bundle it. It's only needed for
NTFS/exFAT boot drives. If you skip it, Rufux offers to download it the first time you need it.
Legacy BIOS boot for Windows drives (MBR → "BIOS or UEFI") needs GRUB's BIOS modules:
| Distribution family | Packages |
|---|---|
| Debian / Ubuntu | grub-pc-bin grub2-common |
| Fedora | grub2-pc-modules grub2-tools |
| openSUSE | grub2-i386-pc |
| Arch-based | grub |
Installing these does not change your own boot loader. Rufux only runs grub-install
against the USB drive.
UDF formatting needs udftools (same name everywhere).
Package names for Debian/Ubuntu were checked on Ubuntu 24.04. The Fedora and openSUSE names
are the usual ones for those distributions; if one isn't found, search for it with
dnf search or zypper search.
When a tool is missing, Rufux tells you which package to install, using your distribution's package manager.
Start Rufux from your application menu, or run rufux (optionally rufux some-image.iso).
To update, run git pull in the repository folder, then repeat the install command you used
(sudo make install or makepkg -si).
With the requirements installed, you can also run it straight from the repository:
./bin/rufux
Polkit then asks for your password to run bin/rufux-helper. Without the installed polkit
policy, the prompt shows the helper's full path instead of a friendly message.
Use the command that matches how you installed Rufux:
| Installed with | Remove with |
|---|---|
sudo make install | sudo make uninstall (run it from the repository folder) |
makepkg -si (Arch-based) | sudo pacman -Rns rufux |
sudo make install with the PySide6 virtual environment | sudo make uninstall, then rm -rf ~/.local/share/rufux-venv |
Then remove your personal settings, the UEFI:NTFS download cache (only present if Rufux downloaded it), and the repository folder:
rm -rf ~/.config/rufux ~/.cache/rufux
rm -rf ~/WindowsUSBLinux # or wherever you cloned it
Packages you installed yourself (such as wimlib, ntfs-3g, exfatprogs or GRUB) stay
installed; remove them with your package manager if nothing else needs them. Don't remove
GRUB if your computer boots with it.
ALL DATA ON DEVICE … WILL BE DESTROYED confirmation, then a polkit
password prompt.install.wim is larger than 4 GB, it is
split into install.swm + install2.swm… (Windows Setup supports this natively). If
wimlib is missing, or the image uses a solid-compressed install.esd larger than 4 GB,
pick NTFS instead.grub).autounattend.xml at the root of the drive. If you
only chose options that apply after installation, they go to
sources/$OEM$/$$/Panther/unattend.xml instead, which is the same split Rufus uses. With the
requirement bypass enabled, sources/appraiserres.dll is also neutralized for in-place upgrades.lsblk and reads images with a built-in ISO 9660 / Joliet / Rock Ridge / UDF reader, the way
Rufus uses libcdio.<prefix>/lib/rufux/bin/rufux-helper) is started through
pkexec. Polkit caches the authorization for a few minutes. The helper reads one JSON job,
reports progress as JSON lines, and can be cancelled at any time.wipefs, sfdisk, mkfs.*, mount, wimlib-imagex and
grub-install.0xEF on MBR).Not implemented: Windows To Go, FreeDOS, installing Syslinux/GRUB for Linux ISO mode (use DD mode), and the built-in Windows ISO downloader (Fido). The ▾ menu next to SELECT links to the official download pages instead.
Additions: verification of written data in both modes, compressed-image writing with progress, a checksum compare box, and a Safely remove the drive when finished option.
polkit-kde-agent
or lxqt-policykit.The tests use pytest (python3-pytest on Debian/Ubuntu and Fedora, python-pytest on Arch):
make test # unit tests; the end-to-end tests also need root and loop devices
sudo make test # runs everything, including real partition/format/copy tests on loop devices
tests/vm/run.sh is an optional full-system test. It starts your own system in a VM (with
virtme-ng) with 8 virtual USB sticks attached. It runs
the helper against them with the real kernel file system drivers, then boots each resulting stick
in QEMU with UEFI (OVMF) and legacy BIOS to check that the expected boot loader really starts.
This covers Windows FAT32/NTFS/exFAT, GPT/MBR, UEFI:NTFS and BIOS boot through GRUB, hybrid DD
images, and Linux ISO mode with label patching:
sudo tests/vm/run.sh # uses the running kernel; set KERNEL=/path/to/vmlinuz to pick another
Code layout:
rufux/core/: Qt-free logic. The image reader (isofs.py), image analysis (image.py),
drive enumeration (blockdevs.py), file system rules (fsdefs.py), UI decisions (plan.py)
and the Windows answer file generator (unattend.py).rufux/helper/: the privileged helper. DD writing, ISO mode, partitioning, formatting, bad
blocks, and saving a drive.rufux/ui/: the Qt interface.GPL-3.0-or-later, see LICENSE. The UEFI:NTFS boot image is © Pete Batard and licensed under the GPLv2+. It is downloaded from the Rufus repository when the package is built.
Python
96.6%
Shell
2.2%