Uma maneira eficiente de iniciar uma aplicação gráfica com vários monitores com WSL2 e VcXsrv no Windows

Uma maneira eficiente de iniciar uma aplicação gráfica com vários monitores com WSL2 e VcXsrv no Windows

Estou usando WSL2 no Windows, no momento principalmente apenas para iniciar meu emacs customizado. Meu fluxo de trabalho para iniciar o emacs é um pouco complicado. Após cada inicialização, preciso iniciar o aplicativo Xsrv com configuração de vários monitores. Em seguida, abra o novo terminal do Windows, abra o Ubuntu 18.04, inicie o ambiente gráfico Xfce4. Então, neste ambiente gráfico inicie um terminal e finalmente use emacso comando para iniciar o emacs.

Como você notou, essas são algumas etapas apenas para obter uma versão gráfica do emacs que possa ser usada em vários monitores. Minha pergunta é como alguém poderia acelerar o processo. No momento, tenho a ideia de criar algum script autohotkey e verificar se é possível iniciar a sessão gráfica com WSL2 por padrão. Fico muito grato se você puder me dar algumas dicas. Essas idéias já são as melhores que posso fazer ou existem outros truques para fazer a versão gráfica do emacs rodar com poucas ações?

Responder1

Você pode automatizar o lançamento do VcXsrv completo com suas configurações. Isso é o que eu fiz.

Parte 1: Faça com que o VcXsrv seja iniciado automaticamente

Quando você executa o vcxsrv, uma tela de configuração aparecerá sempre.
Ao chegar à última tela de configuração, existe a opção de salvá-la. Em seguida, você criará um atalho apontando para a configuração salva e o colocará na inicialização. Aqui está uma postagem de superusuáriofalando sobre diferentes maneiras de iniciar o vcxsrv automaticamente.

Parte 2: Exporte seu display

x11 suporta comandos de "encaminhamento" de janelas para diferentes endereços IP (e desktops) para permitir algo como a área de trabalho remota do Windows.. melhor em muitos/muitos aspectos.. mas não todos. Este recurso está no x11 desde o início.

Para exportar sua exibição, você precisa definir a variável de ambiente DISPLAY antes de iniciar um aplicativo x11. Normalmente, a melhor maneira de fazer isso é colocar o comando export em seu arquivo ~/.bashrc (supondo que você esteja usando o bash) para que isso não precise ser feito sempre. A linha será semelhante export DISPLAY=<ip_address>:0.0 a 0.0, referindo-se à área de trabalho que você está almejando, mas para não haver confusão aqui, basta usar 0.0.

Uma maneira rápida de fazer isso é executar os seguintes comandos no terminal bash.

  1. echo "export DISPLAY=localhost:0.0" >> ~/.bashrc
  2. source ~/.bashrc(ou você pode reiniciar seu terminal aqui)

Agora você deve estar pronto para iniciar qualquer aplicativo x11 desejado e exibi-lo no Windows.

Vou ressaltar que se você estiver tendo falhas em algum aplicativo específico, tente desabilitar o suporte open gl no VcXsrv. Não consegui iniciar o VisualStudio Code até desabilitar essa configuração.

Parte 3: Um atalho do Windows para rodar seu Linux x11!

  1. Crie um atalho do Windows para bash.exe (ou wsl.exe).
  2. Depois de ".exe" na caixa Target:, adicione "-c [x11_thing_to_run]" (para wsl.exe, é --exec, não -c)
  3. Se não iniciar no modo gráfico, adicione novamente seu ambiente DISPLAY à linha.. assimbash.exe -c "DISPLAY=127.0.0.1:0.0 xemacs"
  4. Renomeie seu atalho para x11 e atribua a ele um ícone super spiffo. insira a descrição da imagem aqui

O produto acabado insira a descrição da imagem aqui

Responder2

Oresposta do senhor CMasMasestá em todas as contas correto. Mas se você estiver no WSL 2 localhostnão vai funcionar. Pelo menos, não funciona no momento em que escrevo isto. (Há rumores de que a equipe WSL está trabalhando em algo para resolver isso.)

A razão é que o WSL 2 coloca seu Ubuntu (ou qualquer outro) em uma máquina separada (virtual) como parte da máquina Windows (como fez o WSL 1).

Para corrigir isso, você precisa calcular DISPLAYassim:

export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0

Uma boa maneira de fazer isso e depois esquecer é colocá-lo no ~/.bashrcarquivo. Mas então o login no WSL precisa ser um shell de login, caso contrário ele não será executado.

Se você usar um link para bash.exe, que é o caminho mais fácil, acho que seu comando deve ser parecido com isto

 bash.exe -i -c emacs

Isso -isignifica que o shell deve ser interativo, o que significa que deve fazer o script de login completo.

Mas isso deixa a janela bash aberta enquanto o comando (emacs) estiver em execução. Como tenho o Cygwin instalado aproveito seu runcomando que inicia o comando e depois vai embora. Então este é o meu comando

C:\cygwin64\bin\run.exe bash -i -c emacs

informação relacionada