오늘도 평화롭게 환경 설정을 마치고 코드를 돌리니,
기대도 하지 않았지만 오류가 발생하였다.
pyglet.display.xlib.NoSuchDisplayException: Cannot connect to "None"
# python main.py
creating the FLAME Decoder
torch.Size([8, 5023, 3]) torch.Size([8, 68, 3])
Traceback (most recent call last):
File "main.py", line 89, in <module>
pyrender.Viewer(scene, use_raymond_lighting=True)
File "/home/azureuser/anaconda3/envs/FLAME_PyTorch/lib/python3.8/site-packages/pyrender-0.1.39-py3.8.egg/pyrender/viewer.py", line 347, in __init__
self._init_and_start_app()
File "/home/azureuser/anaconda3/envs/FLAME_PyTorch/lib/python3.8/site-packages/pyrender-0.1.39-py3.8.egg/pyrender/viewer.py", line 995, in _init_and_start_app
super(Viewer, self).__init__(config=conf, resizable=True,
File "/home/azureuser/anaconda3/envs/FLAME_PyTorch/lib/python3.8/site-packages/pyglet/window/xlib/__init__.py", line 167, in __init__
super().__init__(*args, **kwargs)
File "/home/azureuser/anaconda3/envs/FLAME_PyTorch/lib/python3.8/site-packages/pyglet/window/__init__.py", line 507, in __init__
display = pyglet.display.get_display()
File "/home/azureuser/anaconda3/envs/FLAME_PyTorch/lib/python3.8/site-packages/pyglet/display/__init__.py", line 77, in get_display
return Display()
File "/home/azureuser/anaconda3/envs/FLAME_PyTorch/lib/python3.8/site-packages/pyglet/display/xlib.py", line 93, in __init__
raise NoSuchDisplayException(f'Cannot connect to "{name}"')
pyglet.display.xlib.NoSuchDisplayException: Cannot connect to "None"
그렇다.
나는 지금 AWS 가상환경에 연결해 코드를 구동중이고,
이곳에는 연결된 Display가 당연히 존재하지 않는다.
단순히 생각한다면, X Server 설정을 통해 내 로컬 Windows10에서
Ubuntu22.04 서버의 화면을 받아오자! 라고 생각했지만
!!!!! Azure 가상환경에서 cli 환경으로 동작하는 Ubuntu에게 먹힐리 없다 !!!!!
그렇기에, 대안으로 Xvfb(X Virtual Framebuffer)를 통해 가상 디스플레이를 생성한다.
fvfb-run을 통해서는 결과를 화면에 표시하지 않기에 추가과정이 필요하당.
서버에서 Xvfb를 실행하여 가상의 X 서버를 생성하고,
그 위에 실행되는 3D 애플리케이션의 출력 화면을 x11vnc가 캡쳐한다.
이 이후에나 로컬 PC의 VNC Viewer로 확인할 수 있도록 구성한다.
머리도 정리할 겸 살짝 그려봤다.
나는 그냥 결과가 보고 싶었을 뿐인데
여차하면 짱짱한 Winodws에서도 한 번 돌려봐야겠따.
1) xvfb x11vnc 설치
sudo apt-get install xvfb x11vnc
2) Xvfb를 통한 가상 디스플레이 생성
Xvfb :99 -screen 0 1024x768x24 &
- :99 : 디스플레이 번호 지정
- -screen 0 : 스크린 ID를 설정 (기본적으로 첫 번째 스크린은 0)
- 1024x768x24 : 해상도(1024*768), 색상 깊이(24 bit)
- & : 백그라운드 실행
3) x11vnc를 통한 가상 디스플레이 공유
x11vnc -display :99 -forever -nopw -listen 0.0.0.0 &
- -display :99: Xvfb가 생성한 디스플레이 번호 지정
- -forever : 접속이 끊어져도 계속 실행
- -nopw : 비밀번호 없이 접속
- -listen 0.0.0.0 : 모든 네트워크 인터페이스에서 접근 허용
4) 환경 변수 지정 및 테스트
export DISPLAY=:99
# python main.py
- 이제 pyrender.Viewer가 Xvfb가 제공한 가상 디스플레이에 접근하게 된다!
- 실제 코드를 실행하면 기존의 NoSuchDisplayException 문제가 발생되지 않는다! >< 🎉🎉🎉🎊✨🎇🎈
- 실제 물리적 화면은 없지만, 가상 환경에서 렌더링 결과가 처리되는 것
5) 연결 인바운드 규칙 추가하기 (Optional)
: Azure Clould 같이 서비스 쓰고 있는 선생님들은 인바운드 보안 규칙을 잊지말아주자
6) VNC 클라이언트를 통한 가상 디스플레이 훔쳐보기 (Windows)
- 여러 프로그램들이 있을텐데 나는 RealVNC를 썼다. TigerVNC 도 호환, 색상 표현에서 좋은데 이게 깔끔하고 예쁘다.
Download RealVNC® Connect
Download RealVNC® Connect, the most secure remote access and remote desktop solution to securely connect to your devices. Get started today.
www.realvnc.com
💥💥💥💥 아무튼 성공 💥💥💥💥
🎊🎉✨얏호 >< ✨ 🎉🎊
'기술 단어장 > Network' 카테고리의 다른 글
[AWSKRUG] AWS Network 구조:네트워크 소모임 (0) | 2025.03.25 |
---|---|
[NAVIX] 고정 IP 설정 및 SSH 서버 활성화 (0) | 2024.12.30 |
[가상화] 가상화와 가상화의 종류 (1) | 2023.06.17 |
[통신이론] 서블릿(Servlet)의 역할, 특징 (0) | 2023.05.31 |
[모니터링] 로그(Log)와 메트릭(Metric) (0) | 2023.05.23 |
댓글