pyglet.canvas.xlib.NoSuchDisplayException: Cannot connect to "None"
에러 해결 작성
Xvfb :99 -screen 0 1024x768x24 &
export DISPLAY=:99
glxinfo | grep "OpenGL renderer"
에러나시는분들 openGL 잘 안되는 분들 끝까지 보세유
이렇게떠야 잘 연결 된 . 것임 ㅠㅠ
(tmpi) ㅇㅇㅇ$ glxinfo | grep OpenGL
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: NVIDIA L4/PCIe/SSE2
OpenGL core profile version string: 4.6.0 NVIDIA 550.90.07
OpenGL core profile shading language version string: 4.60 NVIDIA
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 4.6.0 NVIDIA 550.90.07
OpenGL shading language version string: 4.60 NVIDIA
OpenGL context flags: (none)
OpenGL profile mask: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.2 NVIDIA 550.90.07
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
OpenGL ES profile extensions:
Xvfb :99 -screen 0 1024x768x24 &와 export DISPLAY=:99
Xvfb(가상 프레임버퍼)를 설정하여 디스플레이 환경이 없는 서버에서도 OpenGL을 사용할 수 있도록 하는 명령어.

1. Xvfb란?
• Xvfb는 “X Virtual Framebuffer”의 약자로, 가상 디스플레이 환경을 제공하는 X 서버입니다.
• 물리적 디스플레이(모니터)가 없는 환경에서도 OpenGL이나 GUI 프로그램을 실행할 수 있게 해줍니다.
• 원격 서버나 CLI 기반 환경에서 OpenGL이 디스플레이 환경을 요구할 때 사용하는 도구입니다.
2. 명령어의 구성
(1) Xvfb :99 -screen 0 1024x768x24 &
- • Xvfb를 실행하고 가상 디스플레이를 설정합니다.
- • :99: 디스플레이 번호를 99번으로 지정합니다. (기본적으로 X 서버는 디스플레이 번호를 사용합니다.)
- • -screen 0 1024x768x24: 가상 디스플레이 크기와 색상 깊이를 설정합니다.
- • 0: 화면 번호.
- • 1024x768: 디스플레이 해상도.
- • 24: 색상 깊이(24비트).
- • &: 명령어를 백그라운드에서 실행합니다.
(2) export DISPLAY=:99
- • 디스플레이 환경 변수(DISPLAY)를 설정합니다.
- • :99: Xvfb로 설정한 가상 디스플레이 번호와 동일하게 지정합니다.
- • 이후 실행되는 모든 프로그램은 :99 디스플레이를 사용합니다.
3. 왜 필요한가?
- • OpenGL은 기본적으로 디스플레이 환경이 필요합니다.
- • 디스플레이 환경이 없는 서버에서는 glxinfo나 TMPI와 같은 OpenGL 기반 프로그램이 작동하지 않습니다.
- • Xvfb를 사용하면 가상의 디스플레이를 생성하여 이러한 문제를 해결할 수 있습니다.
4. 실행
- Xvfb를 실행: Xvfb :99 -screen 0 1024x768x24 &
- 환경 변수 설정: export DISPLAY=:99
- OpenGL 확인: glxinfo | grep OpenGL
- :99 대신 다른 번호를 사용할 수도 있지만, 다른 프로세스와 충돌하지 않도록 주의하세요.
- 가상 디스플레이는 서버를 종료하거나 Xvfb를 종료하면 사라집니다. 필요할 때마다 다시 실행해야 합니다.
glxinfo | grep OpenGL 명령에서 Error: unable to open display 오류가 발생한 이유는 현재 서버에 디스플레이 환경이 설정되지 않았기 때문입니다. 이 문제는 GUI 디스플레이가 없는 CLI 기반 서버(예: 원격 SSH 서버)에서 자주 발생합니다.
OpenGL이 제대로 작동하려면 디스플레이 환경을 설정하거나, **가상 디스플레이(Xvfb)**를 사용해야 합니다.
해결 방법: Xvfb로 가상 디스플레이 설정
- Xvfb 설치
sudo apt install -y xvfb
- Xvfb 가상 디스플레이 실행
Xvfb를 백그라운드에서 실행.
Xvfb :99 -screen 0 1024x768x24 &
export DISPLAY=:99
- OpenGL 확인
이제 다시 glxinfo 명령을 실행하여 OpenGL 정보를 확인 :
glxinfo | grep OpenGL
정상 출력 예:
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: NVIDIA GeForce GTX ...
OpenGL version string: 4.6.0 NVIDIA ...
참고: Xvfb 상태 확인 및 중지
상태 확인
ps aux | grep Xvfb
Xvfb 중지
pkill Xvfb
✅ Xvfb 재시작
Xvfb :99 -screen 0 1024x768x24 &
export DISPLAY=:99
✅ Xvfb 프로세스 종료 후 재시작
sudo killall Xvfb && Xvfb :99 -screen 0 1024x768x24 & export DISPLAY=:99
📌 Xvfb 실행 오류 해결 (Server is already active for display 99)
현재 Xvfb가 이미 실행 중인데도 다시 실행하려고 해서 충돌이 발생하고 있습니다.
즉, 기존 Xvfb 프로세스가 완전히 종료되지 않았거나, 락 파일이 남아 있는 상태입니다.
✅ 1. 실행 중인 Xvfb 프로세스 확인
먼저 Xvfb가 현재 실행 중인지 확인하세요.
ps aux | grep Xvfb
✔ 실행 중인 Xvfb 프로세스가 있다면, 해당 PID를 확인하고 종료해야 합니다.
✅ 2. 기존 Xvfb 프로세스 강제 종료
sudo killall Xvfb
또는 특정 PID를 직접 종료:
sudo kill -9 <PID>
📌 <PID> 부분에 ps aux | grep Xvfb 명령어에서 찾은 Xvfb의 프로세스 ID를 입력하세요.
✅ 3. Xvfb 락 파일 제거
sudo rm -f /tmp/.X99-lock
📌 Xvfb가 비정상적으로 종료되었을 경우, /tmp/.X99-lock 파일이 남아 있어 충돌이 발생합니다.
📌 위 명령어로 해당 락 파일을 삭제하세요.
✅ 4. Xvfb 재실행
위 과정을 완료한 후, Xvfb를 다시 실행하세요.
Xvfb :99 -screen 0 1024x768x24 &
export DISPLAY=:99
📌 명령어 입력 시 주의할 점
✔ Xvfb :99 -screen 0 1024x768x24 & → 백그라운드에서 실행
✔ export DISPLAY=:99 → 환경 변수 설정
절대 Xvfb 실행과 export DISPLAY=:99를 한 줄로 입력하지 마세요.
✅ 5. OpenGL 테스트 (정상 작동 확인)
이제 OpenGL이 정상적으로 실행되는지 확인하세요.
glxinfo | grep OpenGL
📌 정상적인 결과가 출력되면 OpenGL 환경이 올바르게 설정된 것입니다.
✅ 6. TMPI 실행
python ./run.py --indir=/ㅁㅁㅁㅁ --outdir=/ㅁㅁㅁㅁ
🚀 최종 정리
해결 방법 명령어
✅ Xvfb 프로세스 확인 `ps aux
✅ Xvfb 강제 종료 sudo killall Xvfb 또는 sudo kill -9 <PID>
✅ Xvfb 락 파일 삭제 sudo rm -f /tmp/.X99-lock
✅ Xvfb 재실행 Xvfb :99 -screen 0 1024x768x24 & export DISPLAY=:99
✅ OpenGL 확인 `glxinfo
✅ TMPI 실행 python ./run.py --indir=/ㅁㅁㅁㅁ --outdir=/ㅁㅁㅁㅁ
💡 가장 빠른 해결법 (한 번에 실행)
sudo killall Xvfb
sudo rm -f /tmp/.X99-lock
Xvfb :99 -screen 0 1024x768x24 &
export DISPLAY=:99
✅ 1. DISPLAY 환경 변수 설정
현재 Xvfb가 정상적으로 실행 중이므로, 환경 변수를 설정하세요.
export DISPLAY=:99
✅ 2. OpenGL 작동 확인
이제 OpenGL이 정상적으로 작동하는지 확인하세요.
glxinfo | grep OpenGL
✔ OpenGL renderer string 등의 정보가 출력되면 정상적으로 작동하는 것입니다.
단계 명령어
✅ 환경 변수 설정 export DISPLAY=:99
✅ OpenGL 확인 `glxinfo
📌 DISPLAY=:99와 DISPLAY=:0의 차이 및 해결 방법
1️⃣ DISPLAY란?
DISPLAY 환경 변수는 X 서버(Xorg 또는 Xvfb 등)가 실행 중인 디스플레이 번호를 나타냅니다.
- • DISPLAY=:0
- • 물리적인 GPU가 있는 시스템에서 실제 모니터에 연결된 디스플레이
- • GUI 데스크톱 환경(예: GNOME, KDE 등)에서 기본적으로 사용됨.
- • DISPLAY=:99
- • Xvfb(X Virtual Frame Buffer) 가상 디스플레이 서버가 사용하는 디스플레이
- • 물리적인 모니터 없이 OpenGL을 사용해야 할 때(서버 환경 등) 사용됨.
2️⃣ DISPLAY=:0에서 “unable to open display” 오류 발생 원인
Error: unable to open display :0
📌 이 오류가 발생하는 이유는 다음과 같습니다:
- • 현재 Xorg 또는 물리적인 디스플레이가 실행되고 있지 않음.
- • 원격 SSH 세션에서 실행 중이라면 기본적으로 DISPLAY=:0을 사용할 수 없음.
- • GUI(데스크톱) 환경이 없거나, GPU에 직접 접근하지 못함.
즉, DISPLAY=:0은 GUI 환경에서만 사용 가능합니다.
만약 서버 환경이거나 SSH로 접근 중이라면 Xvfb 같은 가상 디스플레이를 사용해야 합니다.
📌 CPU로 돌아감 OpenGL renderer string: llvmpipe (LLVM 11.0.1, 256 bits) GPU 연결안됨
OpenGL renderer string: llvmpipe (LLVM 11.0.1, 256 bits)
nvidia-smi 출력 결과를 보면 GPU와 NVIDIA 드라이버가 제대로 설치되어 있습니다. 또한, 현재 CUDA 12.4 버전이 활성화되어 있고, 약 7GB의 GPU 메모리를 사용하는 프로세스가 실행 중입니다. 그러나 OpenGL 관련 작업이 제대로 GPU 가속을 활용하지 못하고 있습니다.
현재 상황에서 문제가 발생하는 이유는 OpenGL이 NVIDIA 드라이버와 연결되지 않고, 기본 **Mesa/llvmpipe(소프트웨어 렌더러)**를 사용하고 있기 때문입니다.
해결 방법: OpenGL을 NVIDIA GPU와 연결
1. 현재 OpenGL 라이브러리 확인
현재 시스템에서 사용하는 OpenGL 라이브러리를 확인
출력에서 Mesa와 관련된 라이브러리(libGL.so)가 나올 경우, NVIDIA의 OpenGL 라이브러리로 전환이 필요
ldd $(which glxinfo) | grep -i gl
2. NVIDIA OpenGL 라이브러리 설치 및 설정
1. NVIDIA의 OpenGL 라이브러리를 설치:
sudo apt install -y libgl1-nvidia-glvnd-glx
2. 라이브러리 경로를 NVIDIA로 전환:
sudo ldconfig
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
3. 환경 변수를 추가하여 NVIDIA의 OpenGL을 기본으로 설정:
export __GLX_VENDOR_LIBRARY_NAME=nvidia
3. OpenGL 연결 확인
다시 OpenGL 정보를 확인합니다:
glxinfo | grep OpenGL
출력에서 OpenGL vendor string: NVIDIA Corporation으로 표시되면, NVIDIA GPU와 OpenGL이 연결된 것입니다.
4. Xvfb와 함께 OpenGL 실행
가상 디스플레이를 설정한 상태에서 TMPI를 실행합니다:
Xvfb :99 -screen 0 1024x768x24 &
export DISPLAY=:99
python ./run.py --indir=/mnt/data/minsun3054/TMPI/test_data --outdir=/mnt/data/minsun3054/TMPI/minsun_output
5. 문제가 계속될 경우
📌 NVIDIA 패키지를 찾을 수 없는 문제 해결 (libgl1-nvidia-glvnd-glx & nvidia-driver 없음)
2️⃣ NVIDIA OpenGL 라이브러리 강제 적용
export __GLX_VENDOR_LIBRARY_NAME=nvidia
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/usr/lib/nvidia-$(nvidia-smi --query-gpu=driver_version --format=csv,noheader | cut -d'.' -f1):$LD_LIBRARY_PATH
✔ 다시 glxinfo로 NVIDIA가 적용되었는지 확인
glxinfo | grep "OpenGL renderer"
python ./run.py --indir=/mnt/data/minsun3054/TMPI/test_data/test4-mydata --outdir=/mnt/data/minsun3054/TMPI/test_data/output-mycode
'AI > Computer Vision' 카테고리의 다른 글
| [CV] conditional, unconditional image generation / ImageNet class label diffusion 어떻게 이용 (0) | 2025.09.08 |
|---|---|
| [CV] 2D 3D 그래픽스 용어 총정리! (3) | 2025.03.04 |
| [CV] NVS evaluation metrics, 이미지 합성 평가지표 (1) | 2025.01.24 |
| [CV] Camera Intrinsic Parameters, 내재행렬, 내재역행렬, 초점거리 focal length? (1) | 2025.01.14 |
| [CV] Depth Estimation (Mono, Stereo), Depth란? (3) | 2024.11.08 |