LinuxRuLinux без лишней теории
Контейнеры

Distrobox: несколько дистрибутивов Linux в одной системе

Редакция LinuxRu6 мин чтенияИнструкции

Distrobox запускает любой дистрибутив Linux в контейнере Podman или Docker и интегрирует его с хостом: домашний каталог, графика, звук и устройства работают сразу. Создаёте контейнер одной командой, ставите в нём пакеты через apt, dnf или pacman и выносите нужные программы в меню своей системы. Ниже установка, рабочие сценарии и ограничения, о которых стоит знать заранее.

Distrobox: несколько дистрибутивов Linux в одной системе
Фото: Peguin1234, CC BY-SA 4.0, Wikimedia Commons
Содержание
  1. Зачем нужен
  2. Не песочница
  3. Установка
  4. Первый контейнер
  5. Экспорт программ
  6. Отдельный home
  7. Файл distrobox.ini
  8. Обслуживание
  9. Частые вопросы

Что такое Distrobox и какую задачу он решает

Distrobox запускает внутри вашей системы другой дистрибутив в контейнере и делает так, чтобы работать в нём было как в родном терминале. Ваш домашний каталог, звук, графические окна, USB-устройства и сеть контейнер видит напрямую. Ставите в Fedora контейнер с Ubuntu, заходите в него одной командой и пользуетесь apt, а запущенные оттуда программы открываются на вашем рабочем столе.

Сам Distrobox контейнеров не создаёт: это набор shell-скриптов поверх Podman, Docker или lilipod. Он подбирает нужные параметры монтирования, создаёт пользователя с тем же именем и UID и настраивает интеграцию с хостом. Актуальная ветка - 1.8.x, весной 2026 года вышла 1.8.2.5.

Где это полезно на практике:

  • на неизменяемых системах вроде Fedora Silverblue, Kinoite или Bazzite, где ставить пакеты в корень неудобно;
  • когда проекту нужна конкретная версия компилятора, Python или Node.js, а системную трогать не хочется;
  • чтобы пользоваться AUR, не уходя с Ubuntu или Fedora;
  • для проверки скриптов и пакетов сразу в нескольких дистрибутивах.

Чем Distrobox не является: про изоляцию

Это первое, что нужно понять до установки. Distrobox специально размывает границу между контейнером и хостом. Процесс в контейнере имеет доступ к вашему домашнему каталогу с правами вашего пользователя, может читать ключи SSH, токены браузера и всё остальное в ~. Запускать внутри непроверенный код ничуть не безопаснее, чем на хосте.

ИнструментДля чегоИзоляцияГрафика и home
DistroboxРабочие среды разных дистрибутивовСлабая, по замыслуИз коробки
ToolbxТо же, родной инструмент FedoraСлабаяИз коробки, меньше образов
Docker, Podman напрямуюСервисы, сборки, CIСильнее, всё нужно пробрасывать явноТолько вручную
FlatpakОтдельные графические программыПесочница с правамиЧерез порталы
NixВоспроизводимые пакеты и окруженияНет, это пакетный менеджерРаботает как обычные программы

Если нужна именно изоляция, смотрите в сторону обычных контейнеров без проброса home или виртуальной машины. Про запуск контейнеров без root подробно написано в статье о Docker Rootless, а про воспроизводимые окружения без контейнеров в материале Nix без NixOS.

Установка Distrobox и Podman

Distrobox есть в репозиториях всех крупных дистрибутивов. Вместе с ним нужен движок контейнеров, разработчики советуют Podman: он работает без root и без постоянно запущенного демона.

# Debian 13, Ubuntu 24.04 и 26.04
sudo apt install distrobox podman
# Fedora 44
sudo dnf install distrobox podman
# Arch Linux
sudo pacman -S distrobox podman
# openSUSE Tumbleweed
sudo zypper install distrobox podman

В репозиториях LTS-дистрибутивов версия бывает старой. Если вам нужна свежая, а в систему ставить ничего нельзя, официальный скрипт кладёт Distrobox в домашний каталог:

curl -s https://raw.githubusercontent.com/89luca89/distrobox/main/install | sh -s -- --prefix ~/.local

После этого проверьте, что ~/.local/bin есть в PATH, и выполните distrobox --version. На Bazzite и ряде других атомарных сборок Distrobox уже предустановлен.

Создаём и запускаем первый контейнер

Контейнер создаётся из образа. Подойдут обычные образы из Docker Hub и специальные toolbox-образы, в которых уже есть всё для интерактивной работы.

distrobox create --name ubuntu-dev --image ubuntu:24.04
distrobox enter ubuntu-dev

При первом входе Distrobox доустановит в контейнер нужные пакеты (sudo, шрифты, библиотеки для графики), это занимает минуту-две. Дальше вы в обычной оболочке Ubuntu: приглашение терминала показывает имя контейнера, sudo apt install работает без пароля хоста.

Несколько проверенных образов:

distrobox create -n arch -i archlinux:latest
distrobox create -n fedora44 -i registry.fedoraproject.org/fedora-toolbox:44
distrobox create -n debian13 -i debian:13
# список образов, с которыми Distrobox протестирован
distrobox create --compatibility

Посмотреть, что создано и что запущено, можно командой distrobox list. Выполнить одну команду без интерактивного входа:

distrobox enter arch -- uname -a

После создания Distrobox добавляет в меню приложений пункт для входа в контейнер. Если он не нужен, создавайте с флагом --no-entry.

Экспорт программ и команд на хост

Самая удобная часть. Программу, установленную в контейнере, можно вынести в меню приложений хоста. Команда выполняется изнутри контейнера:

distrobox enter arch
sudo pacman -S code
distrobox-export --app code

В меню появится пункт с пометкой имени контейнера. При запуске Distrobox сам поднимет контейнер, если он остановлен. Консольные утилиты экспортируются как обёртки в каталог с исполняемыми файлами:

distrobox-export --bin /usr/bin/rg --export-path ~/.local/bin
distrobox-export --list-apps
distrobox-export --app code --delete

Обратная задача тоже решается: изнутри контейнера можно вызвать программу хоста через distrobox-host-exec, например distrobox-host-exec flatpak list.

Перед тем как удалить контейнер, снимите экспорт его программ флагом --delete. Иначе в меню останутся ярлыки, которые ничего не запускают, и искать их придётся вручную в ~/.local/share/applications.

Отдельный домашний каталог и другие полезные флаги

По умолчанию контейнер работает с вашим настоящим ~. Это удобно, но есть обратная сторона: программа из контейнера и программа на хосте пишут настройки в один и тот же ~/.config. Если версии сильно различаются, конфиги начинают конфликтовать, особенно у редакторов и оболочек. Решение - отдельный домашний каталог:

distrobox create -n node18 -i ubuntu:22.04 --home ~/boxes/node18

Ещё несколько флагов из distrobox create, которые стоит знать:

  • --additional-packages "git make gcc" - поставить пакеты сразу при создании;
  • --volume /mnt/data:/mnt/data - пробросить дополнительный каталог;
  • --nvidia - подключить в контейнер драйвер NVIDIA с хоста;
  • --init - запустить внутри systemd, если нужно поднимать службы;
  • --root - контейнер под root, для задач, где нужны реальные привилегии;
  • --clone ubuntu-dev - сделать копию существующего (остановленного) контейнера.

Флаг --clone хорош для экспериментов: сделали копию, сломали, удалили, а рабочая среда осталась нетронутой.

Описываем среды файлом: distrobox assemble

Когда контейнеров становится несколько, создавать их руками надоедает. distrobox assemble читает манифест в формате ini и поднимает всё сразу. Файл удобно держать в репозитории проекта или в своих dotfiles:

[dev]
image=registry.fedoraproject.org/fedora-toolbox:44
additional_packages="git gcc make python3-pip"
exported_bins="/usr/bin/make"
pull=true

[aur]
image=archlinux:latest
additional_packages="base-devel git"
init_hooks="git clone https://aur.archlinux.org/yay-bin.git /tmp/yay-bin"
distrobox assemble create --file ./distrobox.ini
# пересоздать контейнеры с теми же именами
distrobox assemble create --file ./distrobox.ini --replace
distrobox assemble rm --file ./distrobox.ini

На новом компьютере достаточно скопировать файл и выполнить одну команду. Если создание падает, добавьте --dry-run: Distrobox покажет команды, которые собирается выполнить, и станет видно, на каком ключе ошибка.

Обновление, остановка и удаление

distrobox upgrade --all       # обновить пакеты во всех контейнерах
distrobox stop arch
distrobox rm arch
distrobox rm --force arch     # если контейнер запущен
podman image prune            # удалить неиспользуемые образы

Контейнеры не обновляются вместе с хостом, про них легко забыть. Команда distrobox upgrade --all вызывает внутри каждого контейнера его родной пакетный менеджер. Если не держите там ничего ценного, проще иногда пересоздавать контейнер из свежего образа через assemble.

Удаление контейнера не трогает ваш домашний каталог. Если вы указывали отдельный --home, этот каталог остаётся на диске, удаляйте его сами. Образы Podman хранятся в ~/.local/share/containers и со временем занимают гигабайты.

Если что-то не работает

  • Графическая программа не запускается. Проверьте, что внутри контейнера заданы переменные DISPLAY или WAYLAND_DISPLAY, и пересоздайте контейнер на свежей версии Distrobox.
  • Нет звука. Обычно не хватает клиентских библиотек PipeWire или PulseAudio внутри контейнера, поставьте их пакетным менеджером гостевой системы.
  • Ошибка про UID или subuid. Для rootless Podman у пользователя должны быть записи в /etc/subuid и /etc/subgid.

Про неизменяемые системы, где Distrobox особенно уместен, есть статья об Atomic Linux, а про работу с AUR внутри Arch-контейнера читайте в материале об AUR. Полное описание всех команд - в официальной документации Distrobox.

Частые вопросы

Чем Distrobox отличается от Toolbx?

Идея одна и та же, Toolbx родом из Fedora и ориентирован на её образы. Distrobox поддерживает больше дистрибутивов в качестве гостевых систем, умеет экспортировать программы на хост и описывать контейнеры файлом distrobox.ini.

Можно ли запускать в Distrobox игры?

Можно, графика и звук пробрасываются, а для NVIDIA есть флаг --nvidia. Но для игр обычно удобнее Steam и Proton на хосте или Flatpak-версия Steam, лишний слой контейнера здесь редко нужен.

Сколько места занимает контейнер?

Базовый образ занимает от сотни мегабайт до нескольких сотен, плюс пакеты, которые вы поставите. Реальный объём покажет команда podman system df.

Работает ли Distrobox в WSL2 или на Steam Deck?

На Steam Deck работает: в свежих версиях SteamOS Distrobox и Podman уже входят в систему, а если их нет, Distrobox ставят в домашний каталог официальным скриптом. В WSL2 тоже запускается, если в дистрибутиве установлен Podman или Docker.

Безопасно ли ставить в контейнер пакеты из AUR?

Не безопаснее, чем на хосте: контейнер видит ваш домашний каталог. Проверяйте PKGBUILD так же внимательно, как обычно, и используйте отдельный --home, если хотите ограничить доступ к настоящим файлам.

Документация и источники

Читайте также

Команды проверены на актуальных версиях дистрибутивов на момент обновления. Перед изменением системных настроек сделайте резервную копию.