Fui solicitado a escrever este artigo com uma pergunta no Toaster relacionada à WSL. Após vários anos de uso de sistemas no kernel Linux, há cerca de seis meses, mudei para o Windows 10 em um PC doméstico. A dependência do ambiente do terminal e do Linux no meu trabalho quase imediatamente me levou à pergunta: instalar uma máquina virtual ou tentar o WSL. Eu escolhi o segundo e fiquei completamente satisfeito.
Sob o ponto de vista geral, mostrarei como instalar e configurar o WSL, quais problemas e limitações me deparei, como executar aplicativos Linux no Windows e vice-versa, além de como integrar elementos do ambiente Xfce no ambiente de área de trabalho do Windows.

Eu nunca pensei que voltaria ao Windows um dia, mas uma combinação de circunstâncias me deu um motivo para tentar: minha esposa, que estava longe da área de TI, puxava quase toda vez que precisava usar um computador; acordou a nostalgia de um jogo, mas ela não queria trabalhar adequadamente com vinho; e então eles me deram um Windows 10 Pro in a box. Instalei o WSL quase imediatamente após a instalação do sistema, trabalhei por várias noites, percebi que o produto é adequado para minhas tarefas, mas quero um terminal mais familiar e geralmente algumas comodidades.
Instalar WSL e distribuição
Faça uma reserva imediatamente, na Internet, você pode encontrar uma descrição da instalação executando o comando lxrun /install
na linha de comando ou no console do PowerShell. Esse método não funciona mais (após o lançamento do WSL em um lançamento estável). Até onde eu sei, agora o WSL só pode ser instalado a partir da Microsoft Store junto com sua distribuição preferida.
Também observo que, quando eu fiz a instalação, as distribuições do OpenSUSE, SUSE Linux Enterprise e Ubuntu 16.04 estavam disponíveis para escolha - a última que eu instalei. O Ubuntu 18.04, Debian 9 e Kali Linux também estão disponíveis agora, e outras distribuições podem aparecer. As etapas de instalação podem variar. Além disso, alguns dos problemas descritos no artigo já podem ser corrigidos.
Nós encontramos a distribuição desejada na loja e a instalamos. A instalação será rápida, pois só fará o download do emulador e utilitário do kernel do Linux para iniciar o subsistema, que estará na pasta do sistema em três instâncias: wsl.exe, bash.exe e ubuntu.exe (em vez do ubuntu, haverá o nome do seu kit de distribuição). Todos eles são equivalentes e fazem a mesma coisa - eles executam seu próprio emulador de terminal, no linux'ovy bash trabalhando sob o emulador de kernel. No primeiro início, seremos solicitados a fornecer um nome de usuário e senha padrão para o usuário e, depois disso, a distribuição será instalada diretamente. Como usuário padrão, especifique root sem uma senha - isso será necessário para outras etapas. A segurança não será afetada. Além disso, ao preparar os materiais para o artigo, no tutorial em inglês, encontrei informações de que novas versões do WSL agora tornam o usuário raiz padrão sem senha e sem perguntas desnecessárias.
Estamos aguardando a instalação. Em seguida, a primeira coisa é atualizar os espelhos do apt para a próxima. Para fazer isso, você precisa de um editor de texto da CLI. Somente o vi está incluído, mas eu prefiro mais o nano, então eu coloco:
apt install nano
O sudo não é necessário, pois já somos root. Edite o arquivo /etc/apt/sources.list:
nano /etc/apt/sources.list
Os espelhos Yandex funcionam melhor para mim, então meu arquivo fica assim:
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
Pressione Ctrl + O para salvar e Ctrl + X para sair. Agora você pode atualizar o sistema para o estado atual:
apt update && apt upgrade
Após a atualização, você pode criar nosso usuário principal. Neste artigo, chamarei usuário1, mas você pode especificar o nome usual:
addgroup --gid 1000 user1 adduser --home /home/user1 --shell /bin/bash --uid 1000 -G user1,sudo user1
Em seguida, vá para a pasta do usuário, abaixo dela, defina uma senha e edite o arquivo ~ / .bashrc:
cd /home/user1 su user1 passwd nano .bashrc
Meu .bashrc básico fica assim Tudo, o subsistema está pronto para uso ... quase ...
Instalando o X Server, o Xfce e outros aplicativos da GUI
O primeiro problema que encontrei - a conclusão do bash no emulador de terminal proposto funcionou, para dizer o mínimo e o incorretamente. Além disso, este emulador não sabe como usar guias, e cada instância dele inicia tudo em um novo espaço de processo, com um init separado (que, a propósito, não pode ser substituído). Eu queria um emulador de terminal normal, alguns outros aplicativos da interface gráfica do usuário e um soquete para iniciar tudo rapidamente.
Quando pesquisei essa questão, encontrei muitos problemas, como a necessidade de converter o dbus no protocolo tcp. No momento, não existem tais problemas. Os soquetes de domínio Unix funcionam normalmente no subsistema e tudo se comunica calmamente através deles.
Antes de tudo, precisamos de um servidor X, além disso, instalado no sistema principal (no Windows). Pessoalmente, uso o VcXsrv para esse fim - a porta X11 no Windows. O site oficial especificado em aproximadamente sobre o utilitário em si não o fornece agora; portanto, pesquisamos no instalador no Google e instalamos tudo por padrão.
Enquanto a instalação estiver em andamento, retornamos ao terminal WSL, com o comando exit voltamos ao root. Primeiro, configure os códigos de idioma russos:
locale-gen ru_RU locale-gen ru_RU.UTF-8 update-locale
Em seguida, instale alguns componentes do Xfce. Obviamente, você pode instalá-lo totalmente a partir do meta-pacote, mas não precisaremos da maioria dos componentes, e a arquitetura modular do Xfce nos permite fornecer apenas o necessário:
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
Não é muito conveniente executar o ambiente com as mãos toda vez, então automatizei esse processo. Para fazer isso, no sistema principal, crie uma pasta em um local conveniente para nós e nele três arquivos sejam executados:
- config.xlaunch - arquivo de configurações para 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" />
x-run.vbs - O WSL sempre começa com seu emulador de terminal; se você fechá-lo, todos os seus processos filhos serão encerrados. Para que esta janela não tenha olhos insensíveis, é bom executá-la oculta. Felizmente, o Windows possui um intérprete VBScript interno que permite fazer isso em uma linha:
WScript.CreateObject("Shell.Application").ShellExecute "wsl", "cd /home/user1; DISPLAY=:0 LANG=ru_RU.UTF-8 su user1 -c xfce4-session", "", "open", 0
Deixe-me explicar o que está acontecendo aqui. Dizemos ao VBscript para executar o aplicativo wsl com o cd /home/user1; DISPLAY=:0 LANG=ru_RU.UTF-8 su user1 -c xfce4-session
cd /home/user1; DISPLAY=:0 LANG=ru_RU.UTF-8 su user1 -c xfce4-session
, a pasta inicial não é importante para nós, portanto a linha vazia, a ação aberta - iniciar, 0 - modo oculto. Nós damos ao próprio wsl o comando para executar: vá para a pasta do usuário e, com a configuração das variáveis de ambiente DISPLAY (exibição do servidor X) e LANG (localidade usada), executamos xfce4-session em nome do usuário1 do usuário (graças ao comando su)
- start.bat - arquivo em lote a ser executado, opcionalmente, você pode colocá-lo em inicialização
start config.xlaunch wscript x-run.vbs
Em seguida, podemos executar o start.bat e configurar o painel do Xfce para nós mesmos. Observo que aqui me deparei com mais um problema - o painel é perfeitamente exibido no topo de todas as janelas, mas não pode alocar um local para si como um painel na área de trabalho do Windows. Se alguém souber uma solução para esse problema, compartilhe nos comentários.
Bem, no final desta parte, uma captura de tela da minha área de trabalho:

A interação do ambiente Windows e o ambiente do subsistema Linux
Você pode executar aplicativos Linux diretamente do Windows através dos mesmos três comandos - bash, wsl ou ubuntu. Não se esqueça que, por padrão, o lançamento é a partir da raiz; portanto, você deve diminuir os privilégios por meio do su
; lembre-se também de passar a variável de ambiente DISPLAY =: 0 se o aplicativo exigir um servidor X. Você também precisa alterar a pasta da qual o aplicativo deve trabalhar através do CD dentro da WSL. Exemplo, vamos calcular md5 para file.txt no disco D usando o Linux md5sum:
wsl md5sum < d:\file.txt
O acesso ao sistema de arquivos Linux também está disponível, está em %localappdata%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs
. Você pode ler os arquivos dessa maneira, mas não é aconselhável gravá-los; você pode interromper o sistema de arquivos. Acho que o problema é que o Windows não pode trabalhar com os direitos e proprietários do sistema de arquivos Linux.
No Linux, você também pode executar aplicativos do Windows. Basta executar o exe-shnik e ele será executado no sistema principal.
As unidades do Windows são montadas em /mnt
acordo com as letras minúsculas. Por exemplo, a unidade D será montada em /mnt/d
. No Linux, você pode ler e gravar livremente arquivos do Windows. Você pode criar links simbólicos neles. Os direitos de tais arquivos sempre serão 0777 e o proprietário será o root.
A pilha de rede do subsistema é comum no Windows. O servidor criado no Linux estará disponível no host local no Windows e vice-versa. No entanto, o soquete de domínio unix para Windows será apenas um arquivo vazio; você pode trabalhar com isso apenas no Linux. O Linux também tem acesso à rede externa, incluindo a escuta de portas, se o firewall não proibir isso.
O ifconfig no Linux e o ipconfig no Windows fornecem as mesmas informações sobre interfaces de rede.
No gerenciador de tarefas do Windows, você pode vencer com segurança o processo dentro do subsistema Linux. No entanto, o Linux verá apenas seus processos.
Características, limitações e armadilhas
O kernel do Linux na WSL não é real. Essa é apenas uma camada de emulador, que parte das tarefas específicas do Linux se desempenha e parte dos proxies diretamente no kernel do winNT. A maior parte da API é implementada nela, mas não todas. Você não poderá montar seu kernel, nem conectar os módulos do kernel (.ko, Kernel Object).
O processo de inicialização da WSL também é próprio e substituí-lo, por exemplo, por system.d não funcionará. Há muito que eu desejo escrever um gerenciador de daemon em movimento que funcione com os arquivos da unidade system.d e forneça uma interface semelhante, mas todas as mãos não alcançam.
Não há suporte para o openFUSE; portanto, a montagem de um sistema de arquivos virtual ou remoto falhará. Também é impossível criar mount a partir de um arquivo, o mount não parece capaz de fazer nada, exceto ligar aqui.
Também não há como particionar um sistema de arquivos Linux em várias partições / discos.
O acesso direto ao ferro está praticamente ausente. Mesmo assim, estamos na caixa de proteção do Windows e não no Linux completo. / dev e / sys estão visivelmente vazios, eles contêm apenas dispositivos virtuais. Acesso à GPU - somente através do servidor X, diretamente - de qualquer forma, para que você tenha que treinar redes neurais no Windows.
No desenvolvimento do JS, descobri que o electron.js se recusava a executar no WSL, tive que duplicar o ambiente node.js no Windows.
Sumário
O artigo acabou sendo bastante longo, espero que também seja útil.
A WSL para mim, pessoalmente, acabou sendo uma ferramenta completamente utilizável que resolve meus problemas fullstack desenvolvedor de back-end. Por seis meses, uma máquina virtual com Linux não foi necessária. O sentimento geral é que o Windows + WSL é muito mais funcional que o Linux + Wine.
Enquanto escrevia um artigo, descobri que o assembly WSL com o Debian 9.3 apareceu na Microsoft Store, essa distribuição é mais bonita para mim do que o Ubuntu, então tentarei instalá-lo.