Ubuntu 및 VCXSRV가 포함된 WSL2: xeyes 및 git citool은 작동하지만 ubuntu-desktop을 시작할 수 없습니다.

Ubuntu 및 VCXSRV가 포함된 WSL2: xeyes 및 git citool은 작동하지만 ubuntu-desktop을 시작할 수 없습니다.

xeyes와 git citool이 작동하지만 ubuntu-desktop을 시작할 수 없습니다. 시험을 마친

startx

또는

sudo startx

하지만 오류 메시지는 다음과 같습니다. 화면을 찾을 수 없음(EE)

Windows 10 Pro에서 vcxsrv를 사용하여 ubuntu-desktop을 실행할 수 있습니까? 몇 시간 동안 인터넷을 검색했지만 해결책을 찾지 못했습니다.

답변1

시작하기 전에 "이러지 마세요"라고 말씀드리겠습니다 ;-). 나는 해냈고, 어떻게 하는지 말해주겠지만... 하지 마세요. 그 이유는 답변을 받을 때 설명하겠습니다.

질문에 대답하는 데는 "쉬운 부분"이 있지만...어려운 부분도 있습니다.

두 가지 주요 질문에 대해 논의해 보겠습니다.

쉬운 부분

먼저 startx. 실제로 VcXsrv를 실행하여 이 작업을 수행했습니다. 이 시점에서 정말로 필요한 것은 세션 관리자입니다 gnome-session. 이것이 바로 쉬운 부분입니다.

어려운 부분

어려운 부분은 Gnome(및 Ubuntu 데스크탑)이 수행하는 작업입니다.필요시스템 d. WSL은 적어도 많은 해킹 없이는 Systemd를 지원하지 않습니다. 이 해킹으로 인해 WSL에서 많은 작업이 수행되는 방식이 바뀌었습니다. WSL, Linux 및 Systemd의 내부를 쉽게 파헤쳐 "잘못된" 문제를 해결할 수 있어야 합니다.

이 해킹을 시도하는 프로젝트가 있지만 여전히 권장합니다.어때요?그리고WSL 인스턴스가 변경되었습니다.

따라서 매우 높은 수준에서 여기에서 그 중 일부를 다루겠습니다.

몇 가지 대안

하지만 먼저 WSL에서 Ubuntu 데스크톱을 실행하기 위한 몇 가지 대안을 제공하겠습니다.

  • WSL에서 Linux 데스크톱 환경을 정말로 원한다면 Xfce4와 같이 Systemd가 필요하지 않은 데스크톱 환경을 선택하세요.
  • Windows에서 Ubuntu Desktop/Gnome을 실제로 실행하려면 가상 머신에서 실행하세요. WSL이 제공하는 Windows와의 긴밀한 통합을 포기하지만 완전한 Systemd 지원을 갖춘 Ubuntu를 갖게 됩니다.

글쎄, 이제 나는 당신을 설득하려고 노력했지만 실패했습니다 ... ;-)

WSL2에서 Systemd를 실행하여 VcXsrv에서 Ubuntu 데스크톱을 실행하는 방법

WSL에서 Systemd를 실행하는 데 "도움이 되는" 몇 가지 프로젝트를 소개하겠습니다.

또한 Genie가 다음 용도로 사용된다는 점을 지적하고 싶습니다.이 지침우분투 데스크탑을 실행할 때.

나머지 부분을 건너뛰려면 이 지침으로 직접 이동할 수 있습니다. 아니면 시작하고 실행하는 "빠르고 간단한" 방법을 보여 드릴 수도 있습니다. 그런 다음 전체 설정을 진행할 것인지 결정할 수 있습니다.

궁극적으로 이 모든 작업은 Systemd가 PID1로 실행될 수 있는 WSL/Linux에 새 네임스페이스를 만드는 것입니다.

다음 명령을 실행하여 이를 확인하고 Ubuntu 데스크탑을 빠르게 실행할 수 있습니다.

sudo -b unshare --pid --fork --mount-proc /lib/systemd/systemd --system-unit=multi-user.target

그러면 자체 PID 매핑이 있는 새 네임스페이스에서 Systemd가 시작됩니다. 해당 네임스페이스 내에서 Systemd는 PID1이 되며(실행 중이어야 하기 때문에) 다른 모든 프로세스를 소유합니다. 그러나 "실제" PID 매핑은 이 네임스페이스 외부에 여전히 존재합니다.

이는 Systemd를 시작하기 위한 "최소" 명령줄입니다. 최소한 다음은 지원하지 않습니다.

  • Windows Interop(Windows .exe를 실행하는 기능)
  • Windows 경로(Windows Interop이 없으면 필요하지 않음)

위에 나열된 스크립트와 프로젝트가 작동하려면 추가 작업이 필요합니다.

Systemd가 시작될 때까지 몇 초 정도 기다린 후 다음을 수행하십시오.

sudo -E nsenter --all -t $(pgrep -xo systemd) runuser -P -l $USER -c "exec $SHELL"

이는 네임스페이스로 이동하며 이제 해당 네임스페이스에서 PID 1로 실행 중인지 ps -efH확인하는 데 사용할 수 있습니다.systemd

그때까지는 있을 것이다.충분한Systemd가 실행 중이고 gnome-sessionVcXsrv를 실행하고 연결하도록 구성되어 있습니다. 그러나 시작하는 데 몇 분이 걸릴 수 있습니다.

이 작업을 시도한 후에는 실제로 WSL을 종료하고 a wsl --terminate <distroname>를 실행한 후 다시 시작해야 합니다. 그렇지 않으면 동시에 할 수 없는 일이 많습니다.

다시 말하지만, 이 작업을 "더 잘" 수행하려면 위에 나열된 스크립트/프로젝트 중 하나를 사용하십시오. 그들은 작업이 더 적절하게 실행되도록 해당 네임스페이스 내에 환경 변수, 소켓 및 기호 링크를 설정하려고 시도합니다.

관련 정보