Как установить пользователя по умолчанию для вручную установленного дистрибутива WSL?

Вопрос или проблема

Я клонировал дистрибутив WSL с помощью wsl --export и wsl --import, но теперь, запуская wsl newdistro, я всегда вхожу как root. Я понимаю, что команда lxrun устарела и хочу избежать её использования. Документация рекомендует использовать distroname.exe config, но это не работает, так как этого исполняемого файла не существует.

Существует несколько возможных методов изменения/установки пользователя по умолчанию в импортированном экземпляре WSL. Хотя два метода, упомянутые в других ответах, всё ещё работают, сейчас есть два “официальных” способа.

Метод 1 – wsl --manage --set-default-user (в настоящее время предварительная версия)

По состоянию на ноябрь 2024 года у Microsoft есть предварительная версия WSL (2.4.4.0) с встроенным флагом для установки пользователя по умолчанию. Если необходимо, вы можете (при условии, что вы используете релиз последних нескольких лет) обновить с помощью:

wsl --update --pre-release

А затем:

wsl --manage <дистрибутив> --set-default-user <имя_пользователя>

Это запрашивает идентификатор пользователя (через usr/bin/id и, возможно, другими методами) в дистрибутиве и затем устанавливает полученный UID в реестре, как в Методе #3 ниже. Это требует, чтобы имя пользователя/id уже существовало. См. раздел “Для читателей, которым необходимо создать нового пользователя” ниже, если это необходимо.

Метод 2 – /etc/wsl.conf

Текущий рекомендуемый Microsoft способ установки имени пользователя в экземпляре — это создать /etc/wsl.conf в экземпляре с следующими настройками:

[user]
default=username

Измените, конечно же, username на ваше имя пользователя по умолчанию.

Выйдите из вашего дистрибутива/экземпляра, затем выполните wsl --terminate <имя_дистрибутива> из PowerShell или CMD. Когда вы перезапустите, пользователь по умолчанию должен быть установлен.

Это безопаснее и менее подвержено ошибкам, чем методы на основе реестра.

Метод 3 – Ключ реестра

Установка ключа реестра согласно @harrymc.

Метод 4 – LxRunOffline

Использование LxRunOffline для установки записи в реестре, как описано в @Jaime. В конечном итоге это имеет тот же эффект, что и Метод 3 выше.

Полу-метод 5 – Выбор пользователя во время выполнения через wsl аргумент командной строки

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

wsl -u имя_пользователя или wsl -d имя_дистрибутива -u имя_пользователя, и т.д.

Например, wsl -d Ubuntu -u root.


Примечание: Этот вопрос касался конкретно установки имени пользователя по умолчанию в импортированном экземпляре. Однако для полноты картины, вы также можете установить имя пользователя по умолчанию для дистрибутива, установленного из Магазина (или wsl --install) с помощью:

<дистрибутив>.exe config --default-user <имя_пользователя>

Например, если вы установили “Ubuntu 20.04” из Магазина, то вы бы использовали:

ubuntu2004.exe config --default-user <имя_пользователя>

Здесь .exe является “псевдонимом выполнения приложений” в Windows. Вы можете проверить имя, перейдя в “Управление псевдонимами выполнения приложений” в настройках системы Windows.


Для читателей, которым необходимо создать нового пользователя

@ndemou в комментариях в прошлом году упомянул хорошую мысль, которую я, оглядываясь назад, неправильно проигнорировал. Два других пользователя теперь упомянули в комментариях, что информация @ndemou была полезной. Мои запоздалые извинения! Вот дополнительная информация на основе совета @ndemou …

Некоторые пользователи, которые найдут этот ответ, могут запускаться как root не потому, что они --import дистрибуцию, а возможно потому, что пользователь по умолчанию никогда не был создан во время установки. Это может произойти, если установка дистрибутива была прервана преждевременно, и вероятно по другим причинам тоже.

Под управлением Ubuntu, стандартным дистрибутивом для WSL, вы можете создать своего пользователя, начав с:

wsl ~ -u root

Если необходимо, добавьте опцию -d <дистрибутив>.

Затем выполните:

NEWUSER=<ваше_имя_пользователя>
useradd --create-home --shell /usr/bin/bash --user-group --groups  adm,dialout,cdrom,floppy,sudo,audio,dip,video,plugdev,netdev --password $(read -sp Password: pw ; echo $pw | openssl passwd -1 -stdin) $NEWUSER

Затем установите пользователя в качестве пользователя по умолчанию, используя /etc/wsl.conf, как упоминалось выше.

Если вы уже создали пользователя или используете другой дистрибутив, как указывает @ndemou, убедитесь, что вы также добавили пользователя либо в группу, которая находится в sudoers, либо напрямую в sudoers через visudo. См. ответы на этот вопрос для получения дополнительных сведений.

Нормальный синтаксис команды, например:

ubuntu config --default-user новое_имя_пользователя

Однако это не работает для импортированного дистрибутива, который запускается следующей командой:

wsl --distribution <НазваниеДистрибутива>

(Правка: Сообщалось, что вышеизложенное теперь также работает для импортированных дистрибутивов.)

Попробуйте этот не задокументированный метод:

  • Используйте regedit и перейдите к ключу:
    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss
  • Просмотрьте его подпункты для дистрибутива, который имеет правильное имя в элементе DistributionName
  • Создайте или измените элемент DWORD с именем DefaultUid и установите его значение на идентификатор пользователя (uid) вашего пользователя по умолчанию. Здесь пользователь root имеет id 0, в то время как первый идентификатор пользователя равен 1000 (0x3e8).

Если это не работает для вашей настройки, вам нужно будет запустить как:

wsl --distribution ubuntu -u имя_пользователя

Для получения дополнительной информации см. :

Проверьте uid пользователя, которого вы хотите установить по умолчанию в вашей Linux консоли с помощью id:

имя_пользователя@хост:~$ id
uid=1000(имя_пользователя) gid=1000(имя_пользователя) groups=1000(имя_пользователя),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),117(netdev),1001(docker)
имя_пользователя@хост:~$ 

Проверьте название дистрибутива в Powershell с помощью wsl -l -v:

PS C:\WINDOWS\system32> wsl -l -v
  NAME                   STATE           VERSION
* ubuntu-20.04           Running         2
  docker-desktop-data    Running         2
  docker-desktop         Running         2
PS C:\WINDOWS\system32>

Отредактируйте реестр в Powershell:

Get-ItemProperty Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\*\ DistributionName | Where-Object -Property DistributionName -eq ubuntu-20.04  | Set-ItemProperty -Name DefaultUid -Value 1000

Теперь должно быть хорошо.

Если вы устанавливаете некоторые пользовательские дистрибутивы в WSL, у вас не будет команды “distroname.exe” для изменения конфигурации. Вы можете использовать LxRunOffline для изменения пользователя по умолчанию. Этот инструментарий можно установить в Windows, используя choco install lxrunoffline.

Получить id пользователя по умолчанию для дистрибутива

LxRunOffline позволяет получить и установить идентификатор пользователя по умолчанию (uid) для любых установленных дистрибутивов. Например, если у вас есть дистрибутив с именем newdistro, вы можете проверить пользователя по умолчанию, используя gu (получить пользователя по умолчанию) и -n с именем дистрибутива:

lxrunoffline gu -n newdistro 

Команда возвращает число – идентификатор пользователя по умолчанию:

  • пользователь root имеет идентификатор 0
  • пользователь по умолчанию, созданный во время установки, имеет идентификатор 1000.

Установить id пользователя по умолчанию для дистрибутива

Если вы хотите установить root в качестве пользователя по умолчанию, вы можете сделать это, используя su (установить пользователя по умолчанию) с -n и именем дистрибутива, и -v с идентификатором пользователя, т.е. 0 для root.

lxrunoffline su -n newdistro -v 0

Ни один из ответов не сработал для меня в Windows 11 с импортированным дистрибутивом Ubuntu. Скорее всего, это связано с тем, что мой пользователь является доменным пользователем, а не локальным.

Что сработало:

  1. Зайдите в regedit и найдите Lxss с помощью Ctrl+F
  2. Если появится что-то вроде этого:
    enter image description here
    Затем отредактируйте DefaultUid и измените значение на ваш идентификатор пользователя из дистрибутива, в моем случае это 3e8 в шестнадцатеричном виде и 1000 в десятичном.
  3. enter image description here

Если вы используете Windows Terminal, вы можете настроить профиль для вашего дистрибутива.

В настройках Профили для Windows Terminal выберите профиль вашего дистрибутива, затем нажмите на вкладку Общее и под Командной строкой вы можете использовать один из ранее рекомендованных вариантов для команды wsl.

Например, если вы назвали свой профиль Ubuntu, а ваше имя пользователя bob, то вы установите Командная строка на wsl.exe -d Ubuntu -u bob

Пока вы на этом, вы можете настроить Начальную директорию, то есть ту, которая открывается по умолчанию при открытии терминала для вашего дистрибутива с:

\\wsl$\Distro\home\имя_пользователя

Используя предыдущий пример, для дистрибутива с именем Ubuntu и именем пользователя bob, вы установите Начальную директорию на:

\\wsl$\Ubuntu\home\bob

Обычно я переходил в терминал пользователя root и редактировал файл .bashrc

vim .bashrc

Добавьте эту строку в конец

su - $name

Для справки, если вы установили дистрибутив, отличный от Ubuntu, в WSL, например OracleLinux, то команда будет:

OracleLinux91.exe config --default-user root

Ответ или решение

Установка пользователя по умолчанию для вручную установленного дистрибутива WSL может сразу показаться сложной задачей, особенно если вы импортировали дистрибутив и всегда входите в систему как root. В этой статье мы рассмотрим шаги, которые помогут вам установить пользователя по умолчанию для дистрибутива WSL, используя актуальные и рекомендуемые методы.

Шаги для установки пользователя по умолчанию в WSL

  1. Убедитесь, что пользователь создан: Прежде чем изменять конфигурацию дистрибутива, убедитесь, что файл пользователя, которого вы хотите назначить по умолчанию, уже существует. Для этого откройте вашу WSL-распределение (например, Ubuntu) и введите команду:

    wsl ~ -u root

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

    id

    Запомните uid (обычно 1000 для первого созданного пользователя).

  2. Метод 1: Использование файла /etc/wsl.conf

    • В вашем дистрибутиве создайте файл /etc/wsl.conf (если он не существует) и добавьте следующую конфигурацию:
      [user]
      default=username

      Замените username на имя вашего пользователя.

    • После изменения файла выполните команду для завершения работы WSL:
      wsl --terminate <имя_дистрибутива>
    • Теперь при следующем запуске WSL ваш пользователь должен быть установлен как по умолчанию.
  3. Метод 2: Настройка с помощью реестра
    Если вы используете этот метод, выполняйте его строго в том порядке, который описан.

    • Запустите regedit и перейдите по пути:
      HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss
    • Найдите вашу дистрибуцию по DistributionName.
    • Создайте или измените элемент DWORD с именем DefaultUid и установите его значение равным uid вашего пользователя (1000 для стандартного первого пользователя).
  4. Метод 3: Использование предрелизной версии WSL
    Как упоминалось, если у вас установлена предрелизная версия WSL, вы можете воспользоваться командой:

    wsl --manage <дистрибутив> --set-default-user <username>

    Убедитесь, что ваш дистрибутив обновлен до последней версии с помощью команды:

    wsl --update --pre-release
  5. Метод 4: Использование LxRunOffline
    Если данные методы не сработали, можно рассмотреть сторонние инструменты, такие как LxRunOffline. Установите LxRunOffline через Chocolatey:

    choco install lxrunoffline

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

    lxrunoffline su -n <имя_дистрибутива> -v 1000
  6. Метод 5: Во время запуска WSL
    Вы также можете указать пользователя при старте командной строки с помощью:

    wsl -u <username>

    Это временное решение, но оно может быть полезным в некоторых сценариях.

Заключение

Теперь, когда вы знакомы с несколькими методами настройки пользователя по умолчанию в WSL, вы можете выбрать тот, который вам больше всего подходит. Рекомендуется использовать метод конфигурации /etc/wsl.conf, так как он наиболее безопасен и прост в применении. При использовании реестра или других утилит будьте осторожны, чтобы избежать нежелательных изменений в системе. Успехов в работе с вашим дистрибутивом WSL!

Оцените материал
Добавить комментарий

Капча загружается...