Запуск linux после установки windows

Если вы используете на своем компьютере две операционные системы, Windows и Linux, и обновили свою Windows из 7, 8 или 8.1 до самой новой Windows 10, могут возникнуть проблемы с загрузчиком Grub при использовании защищенной загрузки UEFI.  Во время обновления Windows 10 просто затрет загрузчик Grub и запишет туда свой.

Вы, как обычно, перезагружаете систему и ожидаете увидеть меню выбора операционной системы Grub, но вместо этого загружается новая Windows 10. Вам может показаться, что нет никакого способа получить доступ к Ubuntu или что не может работать Ubuntu рядом с Windows 10. Но это не так.

Многие советуют установить Ubuntu на другой диск, но есть более простое и прекрасно работающие решение, чтобы восстановить grub после установки windows 10. Кончено, всегда можно восстановить grub2 стандартным способом, с помощью LiveCD диска, но если вы используете UEFI, есть более легкое решение, мы сделаем все с помощью Windows 10.

Хотя за основу в этой статье берется Ubuntu, но это также будет работать и для других дистрибутивов. Просто папка, в которой находятся файлы загрузчика будет немного отличатся.

Шаг 1. Запуск cmd

Кликните по иконке поиск в Windows, наберите там cmd и найдите Командную строку Windows. Кликните по ней правой кнопкой и выберите Запустить от имени администратора:

Шаг 2. Подключение раздела EFI

Далее вы можете попытаться угадать как называется файл загрузчика Grub на разделе EFI, но можно поступить по другому и просто посмотреть. Чтобы подключить раздел EFI запустите diskpart. Для этого выполните:

diskpart

Затем выведите список доступных дисков:

list disk

Выберите в качестве активного диск, на который установлена Windows 10 и на котором сейчас находится раздел EFI:

sel disk 0

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

list vol

Найдите раздел EFI, он обычно отформатирован в файловую систему FAT и занимает около 100 мегабайт места. В данном случае это том 2:

Этому разделу надо присвоить букву. Для этого выполните:

sel vol 2
assign letter=I:

Шаг 3. Поиск загрузчика

Далее надо найти файл загрузчика на разделе EFI. Но открыть этот раздел в проводнике вы не сможете, надо использовать только командную строку. Закройте DiskPart и выполните:

cd /d I:

Затем с помощью команды dir найдите загрузчик Grub. Например:

dir EFI\Ubuntu

Здесь есть файл grubx64.efi. Это он. Загрузчик может называться по другому в других дистрибутивах, именно поэтому я рассказал как всё посмотреть.

Шаг 4. Восстановление Grub

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

bcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efi

Вам не нужно будет вводить пароль, у вас уже есть права администратора и программа должна отработать нормально. Эта команда обратно запишет вместо загрузчика Windows 10 загрузчик Grub.

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

bcdedit /deletevalue {bootmgr} path \EFI\ubuntu\grubx64.efi

bcdedit /set {bootmgr} path \EFI\Microsoft\Boot\bootmgfw.efi

Выводы

Восстановление Grub после Windows 10 завершено. Перезапустите компьютер и вы увидите на экране знакомый Grub. Надеюсь, эта краткая инструкция помогла вам выполнить восстановление Grub после установки Windows 10.

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Об авторе

Основатель и администратор сайта losst.ru, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux, интересуюсь всем, что связано с информационными технологиями и современной наукой.

Если на вашем ПК установлено несколько операционных систем и вы пользуетесь мульти-загрузчиком для их выбора и запуска (к примеру GRUB), может случиться такая неприятность, что после очередного обновления Windows (в особенности Windows 11) вы лишитесь возможности мультизагрузки. Windows сама решит за вас, никак не оповестив вашу персону, что «чужой» загрузчик это зло, и просто снесёт его, заменив на свой монопольный. Зачем вам несколько ОС, если у вас есть Windows (сарказм).

Конечно, такое поведение сервиса обновления Windows мягко говоря неожидаемо и бесцеремонно (особенно при условии, что вы не можете его выключить), но надо как-то с этим жить, благо, что мы можем восстановить наш GRUB загрузчик. Об этом и поговорим, на примере восстановления мультизагрузчика для Linux Mint с UEFI.

Я не зря уточнил про UEFI, потому что для тех, кто использует Legacy BIOS загрузчик, процедура восстановления будет немного отличаться. Так как у меня под рукой нет пациента с BIOS вариантом загрузчика, то и рассматривать этот случай у меня нет возможности. Определить, что у вас используется в качестве загрузки UEFI или BIOS можно непосредственно в настройках BIOS вашего ПК. Итак, приступим.

Восстанавливаем GRUB загрузчик

Шаг 1: Подготавливаем и грузимся с LiveUSB/DVD

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

ВАЖНО! На этом моменте, после загрузки Live версии ОС, у вас есть возможность подмонтировать раздел Linux с вашими данными и выполнить их резервное копирование, если в этом есть необходимость. Далее, мы будем работать с разделами диска, и некорректные действия с ними могут повредить ваши данные.

Шаг 2: Определяем, где у нас находится раздел (efi), а где раздел системы (ext4)

Запускаем утилиту fdisk, чтобы посмотреть все разделы на дисках:


sudo fdisk -l

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

Результат вывода fidsk с одним диском

В моём примере используется ПК с одним SSD диском на NVMe интерфейсе и в системе он именуется как /dev/nvme0n1. У вас может быть несколько дисков, и fdisk выдаст данные по каждому из них, здесь придётся определиться какой из них загрузочный, на нём будет стоять звёздочка (*) в колонке Boot. И именно он нам интересен. Кроме того, он может оказаться SSD или HDD диском на SATA интерфейсе, тогда система поименует его как /dev/sdа (или /dev/sdb и т.д.). В качестве примера, может быть вот такой вывод:

Результат вывода fidsk с несколькими дисками

Возвращаемся к первому примеру вывода. Здесь нам важно понять, что раздел EFI имеет тип EFI (подчёркнуто красным в колонке Type) и он именуется как /dev/nvme0n1p1 (так-же подчеркнуто красным). А раздел системы имеет тип Linux filesystem и именуется как /dev/nvme0n1p5 (так-же всё подчёркнуто красным). С разделами определились, двигаемся дальше.

Шаг 3: Монтируем найденные разделы


sudo mount /dev/nvme0n1p5 /mnt
sudo mount /dev/nvme0n1p1 /mnt/boot/efi

Шаг 4: Инсталируем GRUB из подготовленных директорий


sudo grub-install --boot-directory=/mnt/boot --bootloader-id=ubuntu --target=x86_64-efi --efi-directory=/mnt/boot/efi

На этом всё. Перезагружаемся, и после перезагрузки, если есть необходимость, выполняем обновление GRUB:


sudo grub-update

zagruzchik-grubВсем доброго времени!

Эта заметка будет довольно специфична и пригодится только тем, у кого на компьютере установлено несколько версий ОС: Windows, Linux…

Так вот, при переустановке (обновлении) одной из ОС (обычно, так делает Windows) — может затереться загрузчик Grub, и при включении ПК более не будет появляться «черного» меню с предложением выбрать какую систему загружать… 👀

Разумеется, чтобы не переустанавливать ОС (и не настраивать всё заново) — лучше просто восстановить сам этот загрузчик. Как правило, для этого достаточно загрузиться с LiveCD (👉 Linux Mint, Elementary OS, Ubuntu и пр.), смонтировать корневой раздел Linux и ввести спец. команды для восстановления…

Однако, «ручная» работа через терминал имеет «тонкости» (и не всегда выполняется просто). Поэтому здесь хочу предложить гораздо более легкий вариант! 👌

*

Содержание статьи📎

  • 1 Восстановление Grub
    • 1.1 ШАГ 1
    • 1.2 ШАГ 2
    • 1.3 ШАГ 3
  •  → Задать вопрос | дополнить 

Восстановление Grub

ШАГ 1

Для начала нам нужно подготовить загрузочную флешку (LiveCD) c одним из дистрибутивов Linux. Скорее всего она у вас должна быть!

(Если у вас одна из «разновидностей» Ubuntu — я бы порекомендовал использовать образ 👉 с Linux Mint — т.к. в нем уже предустановлена нужная утилита // Boot Repair).

На всякий случай здесь приведу несколько ссылок в помощь:

1) Как создать загрузочную флешку с Linux;

2) Как загрузиться с USB-флешки или внешнего HDD.

Будем считать, что загрузиться с подготовленной флешки у вас получилось… 👌

*

ШАГ 2

Далее (после загрузки с LiveCD с Linux) нам понадобиться установить утилиту Boot Repair (если у вас последняя версия Linux Mint — то она встроена, и чтобы ее запустить — откройте меню «Пуск / Administration / Boot Repair»).

После можно переходить к ШАГУ 3 (для тех, у кого нет встроенной Boot Repair — чуть ниже я покажу как ее установить).

Linux Mint — Boot Repair

Linux Mint — Boot Repair

Для инсталляции Boot Repair сначала проверьте, что у вас есть подключение к Интернет.

Далее необходимо открыть терминал (обычно, для этого используют сочетания Ctrl+Alt+T или Win+T) и ввести поочередно следующие три команды (после каждой нажимать Enter!).

sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install -y boot-repair

Xubuntu — устанавливаем Boot Repair

Xubuntu (для примера) — устанавливаем Boot Repair

После в меню «Пуск» должна появиться ссылка на нашу утилиту (обратите внимание, что на русском она называется как «Восстановление загрузки»… 👇). Кстати, запустить Boot Repair можно и из консоли. Команда:

boot-repair

ПУСК — восстановление загрузки (Boot Repair)

ПУСК — восстановление загрузки (Boot Repair)

*

ШАГ 3

1) В большинстве случаев утилита Boot Repair справляется с восстановлением Grub в автоматическом режиме. Поэтому порекомендую вам сразу же нажать на первый пункт «Recommended Repair». Пару скринов ниже. 👇

Boot Repair (на английском)

Boot Repair (на английском)

Рекомендуемый способ восстановления

Рекомендуемый способ восстановления (русская версия)

2) Как правило, на весь процесс требуется 1-2 мин. 👇

Процесс пошел!

Процесс пошел!

3) Если всё прошло успешно — увидите окно об успешном восстановлении Grub. Теперь можно выключить ПК (ноутбук), вынуть из USB-порта флешку с LiveCD и проверить как загружается устройство: появляется ли меню Grub?.. 👌

Загрузка успешно восстановлена

Загрузка успешно восстановлена

GNU Grub version 2.04 — все заработало!

GNU Grub version 2.04 — все заработало!

4) Кстати, иногда утилита Boot Repair может попросить вас выполнить ряд команд в терминале (сочетание клавиш для его запуска: Ctrl+Alt+T или Win+T).

Сами команды, разумеется, утилита приводит в своем окне. После их выполнения — нажмите на кнопку «Forward» (если вы не выполнили команды — утилита снова покажет текущее окно). Ничего «опасного» и удаляющего данные с домашних разделов диска —в них быть не должно!

Эти команды нужно будет ввести вручную в терминал (и нажать Enter)

Эти команды нужно будет ввести вручную в терминал (и нажать Enter)

PS

Кстати, у Boot Repair есть расширенные настройки, в которых можно вручную задать ряд параметров. Если вы слабо представляете «что, где и как…» — то лучше это меню не трогать (во избежание лишних проблем…).

*

Другие простые решения, — само собой, приветствуются!

На сим пока всё, удачи!

👋

donate

dzen-ya

  • Печать

Страницы: [1] 2  Все   Вниз

Тема: Как исправить загрузку после переустановки Windows?  (Прочитано 2500 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн
sdchess

Kак исправить загрузку при наличии двух систем Windows и Ubuntu?
Я ставил Ubuntu после Windows, а сейчас нужно перестановить Windows!
После этого я загрузчик принудительно изменит порядок загрузки и Ubuntu не будет грузиться? Как  нужно исправить ситуацию после переустановки Win?
Буду признателен за подробную инструкцию, так как у моей машины несколько физических с большим количеством информации, а системы я ставлю на первый диск!


Оффлайн
skybour

Как  нужно исправить ситуацию после переустановки Win?

Восстановить Grub. В местной вики есть статья.


Оффлайн
AlexBKost

Я странен, а не странен кто ж? (С)


Оффлайн
sdchess


Оффлайн
skybour

sdchess, делай как хочешь. Ошибки могут везде возникнуть, все от тебя зависит.


Оффлайн
viktor ne perestukin

ВсЁ это красиво, тока при наличии EFI раздела ни гу-гу. Кто б подправил бы.


Оффлайн
symon.2014

тока при наличии EFI раздела ни гу-гу.

При восстановлении grub — EFI как бы не участвует. (имхо)


Оффлайн
viktor ne perestukin

symon.2014, Да как скажите, так и будет


Оффлайн
ecc83


Оффлайн
sdchess

Kак исправить загрузку при наличии двух систем Windows и Ubuntu?

https://sourceforge.net/projects/boot-repair-cd/files/

Я почему-то не могу прочитать readme?! Вы не поясните, что это за программа? Почему она такая большая? И как ей пользоваться?


ТС, как видно по состоянию на 30/01/2020 потерял интерес к созданной им теме (пометка Решено в теме отсутствует, тема оставлена не закрытой, сообщений в теме давно не было). Тема стародавняя (последнее сообщение в топике: 02/10/2017; последнее сообщение от ТС в топике: 30/09/2017). Модератором раздела принято решение закрыть тему.
—zg_nico

« Последнее редактирование: 30 Января 2020, 19:25:53 от zg_nico »


Оффлайн
symon.2014


Оффлайн
ecc83

Это лайв образ системы с графической утилитой восстановления загрузчика.
Качаешь этот образ, делаешь загрузочную флешку, грузишься с неё, выбираешь русский язык и вперёд.
Если страшно или нехватает опыта, что бы ничего не повредить, пригласи более опытного товарища.


Пользователь добавил сообщение 30 Сентября 2017, 21:16:22:


можно тоже самое сделать проще.

А что там получается проще? У тебя ссылка на ту же самую утилиту восстановления :)

« Последнее редактирование: 30 Сентября 2017, 21:16:22 от ecc83 »


Оффлайн
Дюшик

« Последнее редактирование: 01 Октября 2017, 10:32:34 от Дюшик »


Оффлайн
Smorman

можно зайти в UEFI-BIOS и поставить Ubuntu на первое место в загрузке.

по разному бывает в железяках…
У меня UEFI мама на Lenovo, но в BIOS только выбор режимов:
— Auto
— UEFI only
— Lagacy only

Чтобы не выставил, в выборе источника загрузки отображаются только носители с их названиями, а не ОС.

OS: Ubuntu 22.04 ‘Jammy Jellyfish’ LTS, Arch Linux + Openbox, W11 Home
PC: Lenovo H530, CPU: i5-4430 3.0, Video: nVidia PCI-X
SSD: SAMSUNG EVO870 1T, SSD: SAMSUNG EVO870 500G, RAM: 16G, ODD


Оффлайн
Скуратов-Бельский

Для тех, кто ещё не наступал на эти грабли — совет: при наличии двух дисков, одну систему ставить на первый диск, вторую — на второй. Я так делаю, и всё прекрасно работает. Разумеется, при переустановке одной системы диск со второй надо отключать физически. ИМХО, разумеется.


  • Печать

Страницы: [1] 2  Все   Вверх

Время на прочтение
9 мин

Количество просмотров 241K

К написанию данной статьи меня побудил вопрос на Тостере, связанный с WSL. Я, после нескольких лет использования систем на ядре Linux, около полугода назад перешел к использованию Windows 10 на домашнем ПК. Зависимость от терминала и Linux окружения в моей работе практически сразу привели меня к вопросу: или ставить виртуалку или попробовать WSL. Я выбрал второе, и остался вполне доволен.

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

Никогда не думал, что однажды вернусь на Windows, но повод попробовать мне дали стечения обстоятельств: жена, далекая от IT, дергала почти каждый раз, когда у нее возникала необходимость воспользоваться компом; проснулась ностальгия по одной игре, но она никак не хотела адекватно работать под wine; а тут еще мне подарили коробочную Windows 10 Pro. WSL я поставил чуть ли не сразу после установки системы, поигрался несколько вечеров, понял, что продукт для моих задач годный, но хочется более привычный терминал и вообще некоторых удобств.

Установка WSL и дистрибутива

Сразу оговорюсь, в интернете можно найти описание установки с помощью выполнения команды lxrun /install в командной строке или консоли PowerShell. Данный способ больше не работает (после выхода WSL в стабильный релиз). Насколько мне известно, сейчас WSL можно установить только из Microsoft Store вместе с предпочитаемым дистрибутивом.

Так же отмечу, что когда установку производил я, на выбор были доступны дистрибутивы OpenSUSE, SUSE Linux Enterprise и Ubuntu 16.04 — последний я и установил. Сейчас также доступны Ubuntu 18.04, Debian 9 и Kali Linux, возможно появятся и другие дистрибутивы. Действия по установке могут отличаться. Так же, часть проблем описанных в статье может быть уже исправлена.

Находим в магазине желаемый дистрибутив и устанавливаем. Установка пройдет быстро, так как скачает только эмулятор ядра Linux и утилиту для запуска подсистемы, которая окажется в системной папке в трех экземплярах: wsl.exe, bash.exe и ubuntu.exe (вместо ubuntu будет имя Вашего дистрибутива). Все они равнозначны и делают одно и то же — запускают собственный эмулятор терминала, в нем linux’овый bash работающий под эмулятором ядра. При первом же запуске нас попросят придумать логин и пароль для пользователя по умолчанию, а после произойдет непосредственно установка дистрибутива. В качестве пользователя по умолчанию указываем root без пароля — это потребуется для дальнейших шагов. Безопасность не пострадает, кроме того при подготовке материалов к статье, в англоязычном туториале, я наткнулся на информацию, что новые версии WSL теперь делают пользователем по умолчанию root без пароля без лишних вопросов.

Дожидаемся установки. Далее первым делом стоит обновить зеркала apt на ближайшие. Для этого понадобится CLI текстовый редактор. В комплекте только vi, я же больше предпочитаю nano, поэтому ставлю его:

apt install nano

sudo вводить не требуется, так как мы уже под root’ом. Отредактируем файл /etc/apt/sources.list:

nano /etc/apt/sources.list

У меня лучше всего работают зеркала Яндекса, поэтому мой файл выглядит так:

deb http://mirror.yandex.ru/ubuntu/ xenial main universe restricted
deb-src http://mirror.yandex.ru/ubuntu/ xenial main universe  restricted

deb http://mirror.yandex.ru/ubuntu/ xenial-security main universe restricted
deb-src http://mirror.yandex.ru/ubuntu/ xenial-security main universe restricted

deb http://mirror.yandex.ru/ubuntu/ xenial-updates main universe restricted
deb-src http://mirror.yandex.ru/ubuntu/ xenial-updates main universe restricted

Нажимаем Ctrl+O для сохранения и Ctrl+X для выхода. Теперь можно обновить систему до актуального состояния:

apt update && apt upgrade

После обновления можно создать нашего основного пользователя. В данной статье я назову его user1, Вы же можете задать привычное имя:

addgroup --gid 1000 user1
adduser --home /home/user1 --shell /bin/bash --uid 1000 -G user1,sudo user1

Далее переходим в папку юзера, зайдем под ним, установим пароль и отредактируем файл ~/.bashrc:

cd /home/user1
su user1
passwd
nano .bashrc

Мой базовый .bashrc выглядит так

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm|xterm-color|*-256color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
    # We have color support; assume it's compliant with Ecma-48
    # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
    # a case would tend to support setf rather than setaf.)
    color_prompt=yes
    else
    color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    if [[ ${EUID} == 0 ]] ; then
        PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\h\[\033[01;34m\] \W \$\[\033[00m\] '
    else
        PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\] \[\033[01;34m\]\w \$\[\033[00m\] '
    fi
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h \w \$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h \w\a\]$PS1"
    ;;
*)
    ;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

# Add an "alert" alias for long running commands.  Use like so:
#   sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

Все, подсистема готова к использованию… почти…

Установка X-сервера, Xfce и прочих GUI’шных приложений

Первая же проблема, на которую я натолкнулся — bash-completion в предлагаемом эмуляторе терминала работал, мягко говоря, некорректно. Кроме того, данный эмулятор не умеет вкладки, а каждый его экземпляр запускает все в новом пространстве процессов, с отдельным init’ом (который кстати не заменить). Мне захотелось нормальный эмулятор терминала, некоторых других GUI приложений, а так же панельку, чтоб это все быстро запускать.

Когда я гуглил этот вопрос, я наткнулся на множество проблем, вроде необходимости перевода dbus на tcp протокол. На данный момент всех этих проблем нет. В подсистеме нормально работают unix-domain-socket’ы и все спокойно общается через них.

Первым делом нам понадобится X-сервер, притом установленный в основную систему (в Windows). Лично я использую для этих целей VcXsrv — порт X11 на Windows. Официальный сайт указанный в about самой утилиты его сейчас не предоставляет, поэтому гуглим установщик и устанавливаем все по умолчанию.

Пока идет установка возвращаемся в терминал WSL, командой exit выходим обратно в root’а. Первым делом настроим русские локали:

locale-gen ru_RU
locale-gen ru_RU.UTF-8
update-locale

Далее установим некоторые компоненты Xfce. Можно конечно установить его целиком из мета-пакета, но большинство компонентов нам не понадобится, а модульная архитектура Xfce позволяет нам поставить только необходимое:

apt install -y xfce4-session xfce4-notifyd xfce4-appfinder xfce4-panel xfce4-quicklauncher-plugin xfce4-whiskermenu-plugin xfce4-xkb-plugin xfce4-settings xfce4-terminal xfce4-taskmanager mousepad

Запускать каждый раз окружение руками не очень удобно, поэтому я автоматизировал данный процесс. Для этого в основной системе создадим в удобном для нас месте папку, а в ней 3 файла для запуска:

  1. config.xlaunch — файл настроек для VcXsrv
    <?xml version="1.0" encoding="UTF-8"?>
    <XLaunch
    WindowMode="MultiWindow"
    ClientMode="NoClient"
    LocalClient="False"
    Display="0"
    LocalProgram="xcalc"
    RemoteProgram="xterm"
    RemotePassword=""
    PrivateKey=""
    RemoteHost=""
    RemoteUser=""
    XDMCPHost=""
    XDMCPBroadcast="False"
    XDMCPIndirect="False"
    Clipboard="True"
    ClipboardPrimary="True"
    ExtraParams=""
    Wgl="True"
    DisableAC="False"
    XDMCPTerminate="False"
    />
  2. x-run.vbs — WSL всегда запускается со своим эмулятором терминала, если его закрыть — завершатся все его дочерние процессы. Чтоб данное окно не мозолило глаза, неплохо его запускать скрытым. К счастью в Windows встроен интерпретатор VBScript, который позволяет это сделать в одну строчку:

    WScript.CreateObject("Shell.Application").ShellExecute "wsl", "cd /home/user1; DISPLAY=:0 LANG=ru_RU.UTF-8 su user1 -c xfce4-session", "", "open", 0

    Поясню, что здесь происходит. Мы говорим VBscript выполнить приложение wsl с параметром cd /home/user1; DISPLAY=:0 LANG=ru_RU.UTF-8 su user1 -c xfce4-session, папка запуска нам не важна, поэтому пустая строка, действие open — запуск, 0 — скрытый режим. Самому wsl мы отдаем команду на выполнение: переход в папку пользователя, затем с установкой переменных окружения DISPLAY (дисплей X-сервера) и LANG (используемая локаль) мы запускаем xfce4-session от имени нашего пользователя user1 (благодаря команде su)

  3. start.bat — batch файл для запуска, по желанию его можно засунуть в автозагрузку
    start config.xlaunch
    wscript x-run.vbs

Далее можем запустить наш start.bat и настроить панель Xfce под себя. Замечу, что здесь я наткнулся на еще одну проблему — панель прекрасно отображается поверх всех окон, но вот выделить себе место, как панель на рабочем столе Windows она не может. Если кто знает решение данной проблемы, поделитесь в комментариях.

Ну и под конец данной части, скриншот моего рабочего стола:

Взаимодействие окружения Windows и окружения подсистемы Linux

Запускать Linux приложения напрямую из Windows можно через те же 3 команды — bash, wsl или ubuntu. Не забываем, что по умолчанию запуск идет от root, поэтому стоит понижать привилегии через su, так же нужно не забывать передавать переменную окружения DISPLAY=:0 если приложению требуется X-сервер. Так же нужно менять папку, из которой должно работать приложение, через cd внутри WSL. Пример, посчитаем md5 для file.txt на диске D средствами Linux’овой md5sum:

wsl md5sum < d:\file.txt

Доступ к файловой системе Linux так же имеется, лежит она в %localappdata%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs. Читать таким образом файлы можно, а вот писать — не желательно, можно поломать файловую систему. Думаю проблема в том, что Windows не умеет работать с правами и владельцами файловой системы Linux.

Из Linux так же можно запускать Windows приложения. Просто запускаем exe-шник и он выполнится в основной системе.

Диски Windows монтируются в /mnt в соответствии со своими буквами в нижнем регистре. Например диск D будет смонтирован в /mnt/d. Из Linux можно свободно читать и писать файлы Windows. Можно делать на них симлинки. Права у таких файлов всегда будут 0777, а владельцем будет root.

Сетевой стек у подсистемы общий с Windows. Сервер поднятый в Linux будет доступен на localhost в Windows и наоборот. Однако unix-domain-socket для Windows будет просто пустым файлом, работать с этим можно только внутри Linux. Выход во внешнюю сеть у Linux так же есть, в том числе можно слушать порты, если этого не запрещает фаервол.
ifconfig в Linux и ipconfig в Windows выдают одинаковую информацию о сетевых интерфейсах.

Из диспетчера задач Windows можно спокойно прибить процесс внутри подсистемы Linux. Однако Linux увидит только свои процессы.

Особенности, ограничения и подводные камни

Ядро Linux в WSL не настоящее. Это всего лишь прослойка-эмулятор, которая часть Linux-специфичных задач выполняет сама, а часть проксирует напрямую в ядро winNT. Большая часть api в нем реализована, но не все. Свое ядро собрать не получится, как и не получится подключить модули ядра (.ko, Kernel Object).

Init процесс у WSL тоже свой и заменить его, например, на system.d не выйдет. У меня давно есть желание написать менеджер демонов на go, который бы работал с файлами юнитов system.d и предоставлял бы схожий интерфейс, да все руки не доходят.

Нет поддержки openFUSE, соответственно примонтировать виртуальную или удаленную файловую систему не получится. Так же нельзя сделать mount из файла, mount вообще ничего кроме bind здесь, похоже, не умеет.

Так же нет никакой возможности разбить файловую систему Linux на несколько разделов/дисков.

Прямой доступ к железу практически отсутствует. Все таки мы находимся в песочнице Windows, а не в полноценном Linux. /dev и /sys заметно пустуют, в них лишь проц да виртуальные устройства. Доступ к GPU — только через X-сервер, напрямую — никак, так что нейросети обучать придется в Windows.

В JS разработке столкнулся с тем, что electron.js отказался запускаться в WSL, пришлось дублировать окружение node.js в Windows.

Итоги

Статья получилась довольно длинной, надеюсь, что она окажется еще и полезной.
WSL для меня лично оказался инструментом вполне юзабельным, решающим мои задачи fullstack backend разработчика. Виртуалка с Linux за полгода так и не понадобилась. По общим ощущениям Windows+WSL намного функциональнее, чем Linux+Wine.

Пока писал статью, обнаружил, что в Microsoft Store появилась сборка WSL с Debian 9.3, данный дистрибутив мне более симпатичен, чем Ubuntu, поэтому буду пробовать ставить.

Другие наши интересноые статьи:

  • Запуск lineage 2 на windows 11
  • Запуск virtualbox при старте windows в фоне
  • Запуск windows explorer из командной строки windows
  • Запуск java приложения на windows как сервис
  • Запуск iis на windows 10

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии