Jump to content

# Install Arch Linux on WSL (Русский)

From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи Install Arch Linux on WSL. Дата последней синхронизации: 9 июня 2025. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Arch Linux предоставляет официальный образ WSL (Windows Subsystem for Linux) в рамках проекта archlinux-wsl.

Образы обновляются ежемесячно и нацелены на предоставление самой простой, но полноценной системы, позволяющей использовать Arch Linux в WSL.

Примечание Образы собираются только для WSL 2. WSL 1 не поддерживается.

## Установка

### Установка WSL

Включите виртуализацию в настройках UEFI, затем установите Windows Subsystem for Linux из Microsoft Store.

Примечание Версия WSL из Microsoft Store теперь является версией WSL по умолчанию. Не нужно включать дополнительный компонент «Подсистема Windows для Linux», а также устанавливать ядро WSL или MSI-пакеты WSLg. WSL из Microsoft Store позволяет получать обновления для WSL гораздо быстрее, чем когда она была компонентом Windows. WSLg также теперь входит в комплект поставки.

### Обновление WSL

Чтобы обновиться до последней версии WSL и WSLg, выполните следующую команду в командной строке Windows, запущенной от имени администратора:

    > wsl --update

Чтобы обновиться до последней предварительной версии:

    > wsl --update --pre-release

### Установка Arch Linux в WSL

На системе с Windows и установленным WSL 2 используйте один из описанных ниже методов установки.

#### Автоматическая установка

Выполните следующую команду в командной строке Windows:

    > wsl --install archlinux

После этого в меню Пуск должен появиться `archlinux`, также можно запустить его из командной строки Windows командой `wsl -d archlinux`.

#### Ручная установка

Примечание Требуется WSL 2.4.4 или новее.

Скачайте актуальный .wsl-образ Arch Linux, затем запустите его двойным щелчком мыши или в командной строке Windows выполните команду:

    > wsl --install --from-file путь_к_образу_WSL

Например:

    > wsl --install --from-file C:\Users\пользователь\Downloads\archlinux-2025.04.01.121271.wsl

Совет Образ WSL будет установлен со стандартным именем дистрибутива `archlinux`. Если вы хотите использовать другое имя, добавьте опцию `--name имя`.

После этого в меню Пуск должен появиться `archlinux`, также можно запустить его из командной строки Windows командой `wsl -d archlinux`.

## Советы и рекомендации

### Установка пользователя по умолчанию

Пользователем по умолчанию является `root`. Чтобы выбрать другого пользователя, создайте его и укажите его имя в файле `/etc/wsl.conf`:

    [user]
    default=пользователь

Не забудьте установить пароль для суперпользователя перед закрытием текущего сеанса. Если вы всё-таки потеряли доступ к суперпользователю, можно запустить WSL от имени нужного пользователя командой

    > wsl -u root

Изменение настроек будет применено в следующем сеансе. Чтобы завершить текущий сеанс, в командной строке Windows выполните команду:

    > wsl --terminate archlinux

В WSL 2.4.10 и более новых версиях можно задать пользователя по умолчанию с помощью команды:

    > wsl --manage archlinux --set-default-user пользователь

Изменение будет применено при следующем запуске дистрибутива.

### Запуск графических приложений с помощью WSLg

WSLg (Windows Subsystem for Linux GUI) — проект, позволяющий запускать Linux-приложения, использующие звук (PulseAudio) и графику (X11 и Wayland), внутри WSL.

WSLg включен по умолчанию. Его можно отключить, указав для настройки `wsl2.guiApplications` значение `false` в файле настроек WSL.

Для работы графики создаются символические ссылки на сокеты серверов X11 и Wayland, однако systemd в процессе инициализации перекрывает их (microsoft/wslg#1032).

Примечание Проблема решена в WSL 2.5.7.0, хотя всё равно нужно устанавливать переменную окружения GALLIUM_DRIVER со значением d3d12.

В старых версиях WSL проблему можно решить ручным созданием нужных символических ссылок. Сперва создайте файл настроек systemd-tmpfiles для создания каталога, в котором должен находиться сокет X-сервера:

    /etc/tmpfiles.d/wslg.conf

    #      Path         Mode UID  GID  Age Argument
    L+     %T/.X11-unix -    -    -    -   /mnt/wslg/.X11-unix

Затем создайте скрипт, который будет создавать нужные ссылки и выбирать Gallium-драйвер:

    /etc/profile.d/wslg.sh

    export GALLIUM_DRIVER=d3d12

    for i in "/mnt/wslg/runtime-dir/"*; do
      [ "$XDG_RUNTIME_DIR" = "$HOME" ] && XDG_RUNTIME_DIR="/var/run/user/$UID"
      if [ ! -L "$XDG_RUNTIME_DIR/$(basename "$i")" ]; then
        [ -d "$XDG_RUNTIME_DIR/$(basename "$i")" ] && rm -r "$XDG_RUNTIME_DIR$(basename "$i")"
        ln -s "$i" "$XDG_RUNTIME_DIR/$(basename "$i")"
      fi
    done

Изменения будут применены в следующем сеансе. Чтобы завершить текущий сеанс, в командной строке Windows выполните команду:

    > wsl --terminate archlinux

#### Аппаратное ускорение рендеринга

Для работы аппаратного рендеринга в WSL установите пакеты:

- mesa — содержит Gallium-драйвер `d3d12`, транслирующий вызовы OpenGL в вызовы Direct3D;
- vulkan-dzn — содержит экспериментальный Vulkan-драйвер `dzn` (также известный как `microsoft-experimental`).

Также понадобится установить vulkan-icd-loader (и lib32-vulkan-icd-loader для запуска 32-битных Vulkan-приложений).

Если OpenGL откатывается на программный рендеринг (llvmpipe) при использовании графики Intel, попробуйте создать такую символическую ссылку для libedit:

    # ln -s /usr/lib/libedit.so /usr/lib/libedit.so.2

Подробнее: https://github.com/microsoft/wslg/issues/996 и Gentoo:Gentoo in WSL#OpenGL falling back to llvmpipe software renderer on Intel GPUs

### Запуск приложений Windows в WSL

WSL поддерживает interoperability — запуск исполняемых файлов Windows через WSL.

Эта возможность включена по умолчанию. Её можно отключить, указав для настройки `interop.enabled` значение `false` в файле `/etc/wsl.conf`. [1]

Существуют дополнительные утилиты, которые, опираясь на эту возможность, обеспечивают интеграцию WSL с возможностями и службами Windows.

#### Использование службы ssh-agent из Windows

wsl2-ssh-agent — инструмент, позволяющий использовать агент SSH, запущенный в Windows, внутри WSL.

Это особенно полезно при использовании `*-sk` ключей, безопасность которых обеспечивается с помощью аппаратных ключей или Windows Hello.

Установите wsl2-ssh-agentAUR и добавьте следующую команду в `~/.bashrc`:

    eval "$(/usr/sbin/wsl2-ssh-agent)"

После перезапуска командной оболочки должна появиться переменная окружения `SSH_AUTH_SOCK`.

#### Аутентификация PAM с помощью Windows Hello

WSL-Hello-Sudo — плагин для PAM, позволяющий выполнить аутентификацию пользователя внутри WSL через Windows Hello.

Сперва установите Visual C++ Redistributable 2015-2022 в Windows. Затем в WSL установите пакет wsl-hello-sudo-binAUR, скопируйте каталог `/opt/wsl-hello-sudo/` куда-нибудь, чтобы получить доступ на его редактирование, перейдите в скопированный каталог и запустите скрипт `./install.sh`. Он скопирует Windows-программу в указанный вами каталог и сохранит рядом с ним сертификат, используемый для аутентификации, а также создаст скрипт `uninstall.sh` в текущем каталоге.

Совет Оригинальный https://github.com/nullpo-head/WSL-Hello-sudo не обновлялся несколько лет, поэтому пакет wsl-hello-sudo-binAUR использует форк (https://github.com/lzlrd/wsl-hello-sudo).

Добавьте `auth sufficient pam_wsl_hello.so` в нужные вам файлы в каталоге `/etc/pam.d/` в зависимости от того, где вы хотите использовать Windows Hello. Пример для sudo:

    /etc/pam.d/sudo

    #%PAM-1.0
    auth            sufficient      pam_wsl_hello.so
    auth            include         system-auth
    account         include         system-auth
    session         include         system-auth

### Проброс устройств в WSL

WSL 2 является виртуальной машиной Hyper-V, в которую можно пробрасывать устройства с хоста.

#### Монтирование диска

WSL 2 позволяет подключать и монтировать диски, доступные в Windows.

Для этого сперва узнайте `DeviceID` нужного диска, в командной строке PowerShell выполнив команду:

    > GET-CimInstance -query "SELECT * from Win32_DiskDrive"

Затем выполните следующую команду от имени администратора:

    > wsl --mount DeviceID --bare

Важно Диск перестанет быть доступен для Windows-хоста! Перед подключением закройте все приложения, использующие этот диск.

После подключения вы сможете увидеть диск внутри WSL, например, в выводе команды lsblk.

Для отключения диска выполните:

    > wsl --unmount DeviceID

Подробнее: https://learn.microsoft.com/en-us/windows/wsl/wsl2-mount-disk

#### Подключение устройств USB

usbipd-win позволяет предоставить доступ к локальным устройствам USB другим машинам, в том числе WSL 2.

Установите его, скачав и запустив установщик (.msi) со страницы на GitHub или использовав Windows Package Manager:

    > winget install usbipd

После установки посмотрите список подключенных устройств командой:

    > usbipd list

Найдите bus ID нужного устройства и подготовьте его к подключению, выполнив команду (требуются права администратора):

    > usbipd bind --busid busid

Важно Убедитесь, что подключаемое устройство не используется никакими приложениями.

Затем подключите устройство к WSL 2 командой:

    > usbipd attach --wsl --busid busid

После подключения вы сможете увидеть новое устройство USB внутри WSL, например, в выводе команды `lsusb`.

Для отключения устройства выполните:

    > usbipd detach --busid busid

Подробнее: https://learn.microsoft.com/en-us/windows/wsl/connect-usb

## Решение проблем

### Поддержка systemd

Образ Arch Linux для WSL поддерживает systemd.

Всё должно работать из коробки, однако на старых версиях WSL есть проблемы, для решения которых может понадобиться выполнить дополнительные действия.

#### systemd требует cgroup v2

Примечание В WSL 2.4.12 и более новых версиях выполнять данные действия не нужно.

По умолчанию WSL запускается с поддержкой cgroup v1 [2], однако systemd с версии 256 прекратил его поддержку[3] и требует cgroup v2.

Вы можете отключить cgroup v1, добавив в файл `%USERPROFILE%\.wslconfig`:

    [wsl2]
    kernelCommandLine = cgroup_no_v1=all systemd.unified_cgroup_hierarchy=1

Изменение настроек будет применено в следующем сеансе. Чтобы завершить текущий сеанс, в командной строке Windows выполните команду:

    > wsl --terminate archlinux

### Ошибка при запуске контейнеров Docker

При использовании Docker внутри WSL вы можете получить такую ошибку:

    Error response from daemon: path / is mounted on / but it is not a shared or slave mount
    Error: failed to start containers

Также команда `docker run` может зависать и ничего не выводить в консоль.

Это происходит потому, что Docker требует наличия rshared propagation у точки монтирования корневого каталога (`/`).

Для исправления выполните команду:

    # mount --make-rshared /

Чтобы выполнять эту команду при каждом запуске WSL, можно создать службу systemd:

    /etc/systemd/system/mount-root-rshared.service

    [Unit]
    Description=Remount / with shared propagation
    Requires=-.mount
    After=-.mount

    [Service]
    Type=oneshot
    ExecStart=/bin/mount --make-rshared /

    [Install]
    WantedBy=local-fs.target

После создания файла запустите/включите службу `mount-root-rshared.service`.

## Смотрите также

- Wikipedia:ru:Windows Subsystem for Linux
- Gentoo:Gentoo in WSL
- Официальная документация
- WSLg Wiki на GitHub

Categories:

- Installation process (Русский)
- Hypervisors (Русский)

Install Arch Linux on WSL (Русский)
Add topic