Jump to content

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

3 languages

- English
- Português
- 中文（简体）

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 (Русский)