Skip to content

Instantly share code, notes, and snippets.

@tdcosta100
Last active August 3, 2024 17:42
Show Gist options
  • Save tdcosta100/92440e7e8d4ff09dc1c31f765089c312 to your computer and use it in GitHub Desktop.
Save tdcosta100/92440e7e8d4ff09dc1c31f765089c312 to your computer and use it in GitHub Desktop.
Utilizando o desktop shell completo no WSL2 (Wayland)

Shell desktop completo no WSL2 utilizando o WSLg (Wayland)

Note

Caso você deseje uma experiência mais completa e já utilizou o tutorial do Xvnc, talvez você deva tentar o tutorial de WSLg (Xwayland) ao invés deste.

Warning

Esse tutorial está em desenvolvimento, portanto as alterações propostas nele podem interferir nas funcionalidades existentes. Proceda com cautela!

Nesse tutorial, vamos instalar e utilizar o ambiente desktop do GNOME no WSL2, sem nenhuma utilização de software externo. A única exigência é o WSLg instalado e funcionando. Atualmente, as instruções são somente para as distribuições do Ubuntu (20.04, 22.04 e 24.04) e GNOME, mas você pode solicitar que eu teste outras distribuições e ambientes desktop.

Limitações atuais

  • Não há suporte para tela inteira
  • Não há suporte ao desktop completo (com Display Manager)
  • Não há suporte à área de transferência (copiar e colar) de/para o Windows

Ubuntu

GNOME

Instalando os pacotes necessários

  1. Abra um terminal do Ubuntu (20.04, 22.04 ou 24.04). Primeiro de tudo, precisamos nos certificar que todos os pacotes instalados estão atualizados.

    sudo apt update
    sudo apt upgrade
    
  2. O WSL não instala a loja de aplicativos por padrão, então vamos instalá-la manualmente (você pode pular esse passo se não precisar dela).

    sudo snap install snap-store
    
  3. Agora vamos instalar os pacotes necessários. Isso pode demorar bastante, então você precisará ser paciente.

    No Ubuntu 20.04 e no Ubuntu 22.04
    sudo apt install ubuntu-desktop acpi-support-
    
    No Ubuntu 24.04
    sudo apt install ubuntu-desktop
    

Important

Repare no sinal de menos (-) após o pacote acpi-support. Isso é necessário porque ele é instalado por padrão, e instalá-lo tornará sua distribuição praticamente inutilizável (detalhes em microsoft/WSL#10059), então configuramos o apt para não instalá-lo.

Configurando o ambiente

  1. Agora que instalamos todos os pacotes, devemos configurar algumas coisas antes de utilizar o shell do GNOME. Primeiro, vamos desativar o serviço do GDM, porque infelizmente ele ainda não funciona com o WSLg (pelo menos eu ainda não descobri como fazer ele funcionar).

    sudo systemctl mask gdm.service
    
  2. Agora precisamos ajustar o diretório /tmp/.X11-unix/, porque é montado como somente leitura por padrão. Vamos criar uma nova unidade do systemd.

    sudo systemctl edit --full --force wslg-fix.service
    
  3. Cole o código abaixo no editor.

    No Ubuntu 20.04 e no Ubuntu 22.04
    [Service]
    Type=oneshot
    ExecStart=-/usr/bin/umount /tmp/.X11-unix
    ExecStart=/usr/bin/rm -rf /tmp/.X11-unix
    ExecStart=/usr/bin/mkdir /tmp/.X11-unix
    ExecStart=/usr/bin/chmod 1777 /tmp/.X11-unix
    ExecStart=/usr/bin/ln -s /mnt/wslg/.X11-unix/X0 /tmp/.X11-unix/X0
    
    [Install]
    WantedBy=multi-user.target
    
    No Ubuntu 24.04
    [Service]
    Type=oneshot
    ExecStart=-/usr/bin/umount /tmp/.X11-unix
    ExecStart=/usr/bin/rm -rf /tmp/.X11-unix
    ExecStart=/usr/bin/mkdir /tmp/.X11-unix
    ExecStart=/usr/bin/chmod 1777 /tmp/.X11-unix
    ExecStart=/usr/bin/ln -s /mnt/wslg/.X11-unix/X0 /tmp/.X11-unix/X0
    ExecStart=/usr/bin/chmod 0777 /mnt/wslg/runtime-dir
    ExecStart=/usr/bin/chmod 0666 /mnt/wslg/runtime-dir/wayland-0.lock
    
    [Install]
    WantedBy=multi-user.target
    
  4. Salve o arquivo e feche o editor. Agora temos que habilitar esse serviço.

    sudo systemctl enable wslg-fix.service
    
  5. O último passo é configurar o shell do GNOME para iniciar no modo aninhado.

    No Ubuntu 20.04
    sudo mkdir /etc/systemd/user/gnome-shell-wayland.service.d/
    sudo nano /etc/systemd/user/gnome-shell-wayland.service.d/override.conf
    
    No Ubuntu 22.04 e no Ubuntu 24.04
    sudo mkdir /etc/systemd/user/org.gnome.Shell@wayland.service.d/
    sudo nano /etc/systemd/user/org.gnome.Shell@wayland.service.d/override.conf
    
  6. Cole o código abaixo no editor.

    [Service]
    ExecStart=
    ExecStart=/usr/bin/gnome-shell --nested
    
  7. Salve o arquivo e feche o editor. Em seguida, feche a janela do terminal da sua distribuição.

  8. Finalmente, vamos parar o WSL.

    wsl.exe --shutdown
    

    A configuração está completa.

Iniciando o shell do GNOME

  1. Abra novamente a janela do terminal da sua distribuição, e cole o comando abaixo.

    DESKTOP_SESSION=ubuntu \
    GDMSESSION=ubuntu \
    GNOME_SHELL_SESSION_MODE=ubuntu \
    GTK_IM_MODULE=ibus \
    GTK_MODULES=gail:atk-bridge \
    IM_CONFIG_CHECK_ENV=1 \
    IM_CONFIG_PHASE=1 \
    QT_ACCESSIBILITY=1 \
    QT_IM_MODULE=ibus \
    XDG_CURRENT_DESKTOP=ubuntu:GNOME \
    XDG_DATA_DIRS=/usr/share/ubuntu:$XDG_DATA_DIRS \
    XDG_SESSION_TYPE=wayland \
    XMODIFIERS=@im=ibus \
    MUTTER_DEBUG_DUMMY_MODE_SPECS=1366x768 \
    gnome-session
    
  2. Aparecerá uma janela do shell do GNOME.

    Ubuntu 20.04

    GNOME Shell on Ubuntu 20.04

    Ubuntu 22.04

    GNOME Shell on Ubuntu 22.04

    Ubuntu 24.04

    GNOME Shell on Ubuntu 24.04

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment