Windows에서 WSL2 및 VcXsrv를 사용하여 다중 모니터로 그래픽 애플리케이션을 시작하는 효율적인 방법

Windows에서 WSL2 및 VcXsrv를 사용하여 다중 모니터로 그래픽 애플리케이션을 시작하는 효율적인 방법

저는 Windows에서 WSL2를 사용하고 있는데 현재는 주로 맞춤형 Emacs를 시작하기 위해 사용하고 있습니다. Emacs를 시작하는 작업 흐름은 약간 번거롭습니다. 부팅할 때마다 다중 모니터 설정으로 Xsrv 응용 프로그램을 시작해야 합니다. 그런 다음 새 Windows 터미널을 열고 Ubuntu 18.04를 열고 Xfce4 그래픽 환경을 시작합니다. 그런 다음 이 그래픽 환경에서 터미널을 시작하고 마지막으로 emacs명령을 사용하여 emacs를 시작합니다.

아시다시피, 이는 여러 모니터에서 사용할 수 있는 그래픽 버전의 emacs를 실행하는 데 필요한 몇 가지 단계입니다. 내 질문은 프로세스를 어떻게 가속화할 수 있는지입니다. 지금은 일부 자동 핫키 스크립트를 만들고 기본적으로 WSL2를 사용하여 그래픽 세션을 시작할 수 있는지 확인하는 아이디어가 있습니다. 혹시 몇 가지 조언을 주실 수 있다면 정말 감사하겠습니다. 이러한 아이디어는 이미 내가 할 수 있는 최선입니까, 아니면 몇 가지 작업만으로 그래픽 버전의 emacs를 실행할 수 있는 다른 방법이 있습니까?

답변1

설정을 완료하면 VcXsrv 시작을 자동화할 수 있습니다. 그것이 내가 한 일입니다.

1부: VcXsrv를 자동으로 시작하기

vcxsrv를 실행하면 매번 구성 화면이 나타납니다.
마지막 구성 화면에 도달하면 이를 저장하는 옵션이 있습니다. 그런 다음 저장된 구성을 가리키는 바로가기를 만들어 시작에 넣습니다. 다음은 슈퍼유저 게시물입니다.vcxsrv를 자동으로 시작하는 다양한 방법에 대해 설명합니다.

2부: 디스플레이 내보내기

x11은 Windows 원격 데스크톱과 같은 기능을 허용하기 위해 다른 IP 주소(및 데스크톱)로 창 명령을 "전달"하는 것을 지원합니다. 많은/대부분의 방법에서 더 좋습니다.. 전부는 아닙니다. 이 기능은 처음부터 x11에 있었습니다.

디스플레이를 내보내려면 x11 응용 프로그램을 시작하기 전에 DISPLAY 환경 변수를 설정해야 합니다. 일반적으로 이를 수행하는 가장 좋은 방법은 내보내기 명령을 ~/.bashrc 파일(bash를 사용한다고 가정)에 넣어 매번 수행할 필요가 없도록 하는 것입니다. 이 줄은 export DISPLAY=<ip_address>:0.0 0.0이 대상으로 삼는 데스크톱을 참조하는 것처럼 보이지만 여기서는 혼동을 피하기 위해 0.0을 사용하면 됩니다.

이를 수행하는 빠른 방법은 bash 터미널에서 다음 명령을 실행하는 것입니다.

  1. echo "export DISPLAY=localhost:0.0" >> ~/.bashrc
  2. source ~/.bashrc(또는 여기에서 터미널을 다시 시작할 수 있습니다)

이제 원하는 x11 응용 프로그램을 실행하고 Windows에 표시할 준비가 되었습니다.

특정 애플리케이션에서 오류가 발생하는 경우 VcXsrv 내에서 open gl 지원을 비활성화해 보세요. 이 설정을 비활성화할 때까지 VisualStudio Code를 시작할 수 없었습니다.

파트 3: Linux x11을 실행하는 Windows 바로 가기!

  1. bash.exe(또는 wsl.exe)에 대한 Windows 바로 가기를 만듭니다.
  2. 대상: 상자에서 ".exe" 뒤에 "-c [x11_thing_to_run]"을 추가합니다(wsl.exe의 경우 -c가 아니라 --exec입니다).
  3. 그래픽 모드에서 실행되지 않으면 DISPLAY 환경을 라인에 다시 추가하십시오. 이와 같이bash.exe -c "DISPLAY=127.0.0.1:0.0 xemacs"
  4. 바로가기 이름을 x11로 바꾸고 슈퍼스피포 아이콘을 할당하세요. 여기에 이미지 설명을 입력하세요

완제품 여기에 이미지 설명을 입력하세요

답변2

그만큼Señor CMasMas의 답변모든 계정에 정확합니다. 그러나 WSL 2를 사용하는 경우에는 localhost작동하지 않습니다. 적어도 이 글을 쓰는 시점에는 작동하지 않습니다. (WSL 팀이 이 문제를 해결하기 위해 노력하고 있다는 소문이 있습니다.)

그 이유는 WSL 2가 Ubuntu(또는 무엇이든)를 Windows 시스템의 일부로(WSL 1처럼) 별도의(가상) 시스템에 넣기 때문입니다.

이 문제를 해결하려면 다음과 같이 계산해야 합니다 DISPLAY.

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

이를 수행하는 좋은 방법은 잊어버리고 파일에 넣는 것입니다 ~/.bashrc. 그러나 WSL에 대한 로그인은 로그인 셸이어야 하며 그렇지 않으면 실행되지 않습니다.

더 쉬운 경로인 에 대한 링크를 사용하는 경우 bash.exe명령은 다음과 같아야 합니다.

 bash.exe -i -c emacs

이는 -i쉘이 대화형이어야 함을 의미합니다. 즉, 완전한 로그인 스크립팅을 수행해야 함을 의미합니다.

그러나 명령(emacs)이 실행되는 동안 bash 창은 열려 있습니다. Cygwin을 설치하면 run명령을 시작하고 사라지는 명령을 활용합니다 . 그러니까 이건 내 명령이야

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

관련 정보