WSL을 통한 X 액세스를 위한 DISPLAY 변수를 어떻게 정의합니까?

WSL을 통한 X 액세스를 위한 DISPLAY 변수를 어떻게 정의합니까?

내 WSL에는 x 창용 .profile에 정의된 DISPLAY 변수가 있습니다. resolv.conf에서 IP를 확인하세요.

왜? 내가 정확하게 기억한다면 resolv.conf는 사용할 DNS를 정의하는 데에만 사용되며 DISPLAY는 내 로컬 IP를 가리켜야 합니다. 실제로 VirtualBox, Vmware 및 WSL을 사용하기 때문에 Windows 시스템에 자체 가상 이더넷 카드를 구현하는 여러 개의 IP가 있고 이 프로필에 기본적으로 정의된 DISPLAY를 사용하면 작동하지 않습니다. 수동으로 변경하고 기본 이더넷 카드에 있는 값을 할당해야 합니다(X가 작동하도록 하려면 DISPLAY=192.168.1.8:0.0 내보내기를 수행하고 DISPLAY 변수의 값을 자동으로 192.168.1.1:0.0으로 덮어써야 했습니다). 내 WSL이 획득을 시작할 때).

또한 NAT IP(Whatismyip.com을 사용하여 인터넷에 연결할 때 사용하는 공용 IP 찾기)를 찾고 원격 컴퓨터에서 호출할 수 있도록 모니터를 해당 IP로 설정하려고 하면 xterm은 AWS에 있고 그것도 작동하지 않습니다. 왜? 원격 시스템을 ssh -X하고 수동으로 모니터를 192.168.1.8:0.0으로 설정하면 이런 일이 발생합니다. 다음과 같은 이유를 알고 싶습니다. a).- 구성 파일을 통해 DISPLAY가 자동으로 잘못 설정됩니다. b).- DISPLAY 변수 c)에 수동으로 설정하면 내 컴퓨터의 공용 IP가 작동하지 않습니다.- 앞서 언급한 IP( 192.168 .1.8:0.0)은 잘 작동하며 공개되지 않습니다.

몇 가지 추가 상황별 데이터:

내 현재 프로필은 다음과 같습니다.

export LIBGL_ALWAYS_INDIRECT=1
export DISPLAY_NUMBER="0.0"
export DISPLAY=$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'):$DISPLAY_NUMBER

내 resolv.conf는 다음과 같습니다.

nameserver 192.168.1.1
nameserver 192.168.1.1
nameserver fec0:0:0:ffff::1
search gorostidi-home.lan

내 ifconfig:

andres@DCT00175:~$ ifconfig
eth3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.56.1  netmask 255.255.255.0  broadcast 192.168.56.255
        inet6 fe80::1bd8:2cef:f202:d18b  prefixlen 64  scopeid 0xfd<compat,link,site,host>
        ether 0a:00:27:00:00:0a  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth4: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.28.48.1  netmask 255.255.240.0  broadcast 172.28.63.255
        inet6 fe80::f389:4534:305:8a86  prefixlen 64  scopeid 0xfd<compat,link,site,host>
        ether 00:15:5d:16:f9:f0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.250.1  netmask 255.255.255.0  broadcast 192.168.250.255
        inet6 fe80::b10b:16fd:43b6:c962  prefixlen 64  scopeid 0xfd<compat,link,site,host>
        ether 0a:00:27:00:00:10  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

**eth6:** flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.8  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::2669:762c:cd7f:3da6  prefixlen 64  scopeid 0xfd<compat,link,site,host>
        ether 70:b3:d5:5c:0c:a1  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth7: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.115.1  netmask 255.255.255.0  broadcast 192.168.115.255
        inet6 fe80::337b:d856:e3cf:dd85  prefixlen 64  scopeid 0xfd<compat,link,site,host>
        ether 00:50:56:c0:00:01  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.23.1  netmask 255.255.255.0  broadcast 192.168.23.255
        inet6 fe80::6ce0:a4cb:44b5:b58f  prefixlen 64  scopeid 0xfd<compat,link,site,host>
        ether 00:50:56:c0:00:08  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth11: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.24.16.1  netmask 255.255.240.0  broadcast 172.24.31.255
        inet6 fe80::6319:6b32:8b9c:feeb  prefixlen 64  scopeid 0xfd<compat,link,site,host>
        ether 00:15:5d:18:6c:7c  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 1500
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0xfe<compat,link,site,host>
        loop  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wifi2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.223.100  netmask 255.255.255.0  broadcast 192.168.223.255
        inet6 fe80::7f7d:9903:bd01:6cb6  prefixlen 64  scopeid 0xfd<compat,link,site,host>
        ether 36:c9:3d:82:2c:29  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

현재 DNS와 현재 라우터는 192.168.1.1(resolv.conf에 설정됨)입니다.

당신의 도움을 주셔서 감사합니다!

답변1

.profile필요에 따라 설정을 변경할 수 있습니다. 현재 디스플레이 설정이 .profile작동하지 않으면 실제로 작동하는 설정으로 변경해야 합니다.

a).- 프로필 자동 설정이 잘못 표시됨

현재 사용하고 있는 WSL 배포판의 작성자보다 설정이 더 복잡하므로 기본 설정이 적합하지 않습니다.

nameserver유선에서 로컬 IP 주소를 얻는 것은 IP가 실제 X11 서버 및 DNS 확인자/프록시 서버를 실행하는 로컬 호스트를 참조하는 경우에만 resolv.conf의미가 있습니다 . 이는 일반 설치의 기본값일 수 있지만 사용자 정의로 인해 이러한 가정이 깨질 수 있습니다.

실제 이유가 무엇이든 DISPLAY현재 설정이 .profile잘못되었다는 사실은 여전히 ​​남아 있습니다.당신을 위한, 실제 상황에 더 적합하도록 조정해야 합니다.

Freddy가 의견에서 말했듯이 설정은 다음과 같습니다.https://superuser.com/a/1476160/990044또는 당시 WSL은 자체 X11 서버에 대한 그래픽 지원을 제공하지 않았으며 Windows 호스트 운영 체제에서 실행되는 X11 서버를 출시해야 했습니다. WSL이 최신인 경우 .profile현재 WSL 2에서는 이러한 설정이 전혀 필요하지 않을 수 있습니다.

b).- DISPLAY 변수를 수동으로 설정하면 내 컴퓨터의 공용 IP가 작동하지 않습니다.

NAT에 포트 6000/TCP(포트 번호 = 디스플레이 번호 + 6000)에 대한 포트 전달 규칙이 없으며, 로컬 X11 서버가 포트 전달이 전달되는 IP 주소 및/또는 로컬 소프트웨어 방화벽을 수신하지 않습니다. (Windows 방화벽 포함) 이 IP 주소에 대해 포트 6000/TCP로 들어오는 트래픽이 차단되고 있습니다.

c).- 앞에서 언급한 IP(192.168.1.8:0.0)는 잘 작동하지만 공용 IP는 아닙니다.

해당 IP 주소에는 포트 6000/TCP를 차단하는 방화벽이 없으며 로컬 X11 서버가 해당 포트에서 수신 대기하므로 X11 클라이언트는 X11 서버에 연결하고 해당 주소를 사용하여 모니터에 액세스할 수 있습니다.


X11 사양에서는 원래 콜론 앞의 것이 다음과 같이 지정되었습니다.CPU 이름(바라보다 man X). 나중에 확인 가능한 호스트 이름이 반드시 필요하지 않은 개인용 워크스테이션에서 X11 서버를 실행할 때 IP 주소를 허용하는 기능도 추가되어 매우 일반화되었습니다. (일부 이전 시스템에서 이전 X11R5 클라이언트 소프트웨어로 작업해야 하는 경우 DISPLAY에서 여전히 IP 주소를 허용하지 않을 수 있습니다.)

관련 정보