2020.08.10 내용 업데이트


엔비디아에서 지포스계열의 윈도우 RDP실행시 opengl 지원 프로그램을 지난 4월부터 배포하기 시작했다. 

즉, 아래 내용 다 필요없고 엔비디아 홈피에서 해당 프로그램을 받으면 된다.


아래에 설명이 있다.

https://www.opengl.org/news/comments/nvidia-provides-opengl-accelerated-remote-desktop-for-geforce


VGA 드라이버는 440 버젼 이후이면 되고

호스트가 되는 컴퓨터에서 위의 링크에서 다시 링크로 걸어준 프로그램을 내려받아 실행시킨 후 재부팅 한번 해주면 된다.


그러면 그 다음에 rdp로 접속하는 컴퓨터에서 아래처럼 복잡한 절차 없이 opengl 프로그램을 실행시킬 수 있다.


이렇게 간단한걸, 진작에 좀 해주지.


프로그램을 다운받으려면 엔비디아 계정이 있어야 하기 때문에 좀 귀찮다. 용량이 매우 적으므로 여기 직접 첨부해놓았다.


nvidiaopenglrdp.zip



끝.




----------------------------------------------------------------------------------------------



코딩을 하다보면 성능이 좋고 데이터가 저장되어 있는 PC를 서버로 두고, 외부에서 클라이언트로 접속해 서버 컴퓨터의 코드를 실행시켜야 할 경우가 있다. 물론 데이터의 용량이 작고 구동이 가벼울 경우 온전히 복사하거나 클라우드 동기화를 통해 직접 눈 앞에 있는 컴퓨터로 실행시키면 그만이지만, 그렇지 못한 경우도 있다.


예를 들어 몇기가의 데이터를 읽어서 OpenGL로 구동시켜야 할 경우에는 클라우드 동기화보다는 원격 접속이 편하다. 


그런데 문제가 있다. 윈도우 원격 데스크톱을 활용한 원격 접속의 경우에는 OpenGL이 1.1 버젼까지만 구동가능하므로 대부분 에러를 내뱉고 실행되지 않는다.



해결 방법은 여러가지가 있다.


1. windows RDP 대신 다른 원격 접속 프로그램을 사용한다. (어떤 것에서 OpenGL이 실행 되는지는 확인하지 못했다)


2. 엔비디아 vga 기준으로 할 때, Quadro 계열을 구입한다.


엔비디아에서는 GTX나 RTX 계열의 vga를 꽂은 PC에 원격 접속을 할 때, OpenGL의 사용을 막아놓았다. 그런데 쿼드로 계열은 된다. 당연히 소프트웨어적으로 막아놓은 것이라 엔비디아에서 풀어주면 되는데 그렇게 하지 않는다. 다른 어떤 이유가 있는지는 모르겠지만 여하튼 지원하지 않는다.


그렇지만 cuda core 기준으로 볼 때, 같은 쿠다코어 수의 vga를 구입하려면 가격이 다섯배 이상 뛰므로 추천하지 않는다.



3. 그래서 해결방법은 다음과 같다. 


요약해서 말하자면 원격 접속을 끊고, 기본 계정 상태에서 코드를 실행시킨 뒤 다시 원격 접속하는 방법이다. 그러면 OpenGL 창이 떠 있을 것이다!!!


그러면 그걸 어떻게 할까?


아래의 코드로 .bat 파일을 만들어 "관리자 모드"로 실행하면 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@echo off
echo.
echo Remote Desktop will be temporarily disconnected . . . please reconnect after a few seconds.
echo.
pause
@echo on
REM The active session has an arrow as the first character
setlocal EnableDelayedExpansion
FOR /F %%A in ('qwinsta'do (
    set tempSessionName=%%A
    if "!tempSessionName:~0,1!"==">"  ( 
        @echo on
        tscon.exe !tempSessionName:~1! //dest:console 
        @echo off
    )    
)
@echo off
echo.
@echo on
rundll32.exe user32.dll, LockWorkStation
@echo off
echo.
echo Starting MyProgram.exe . . .
@echo on
REM 여기서 컴파일된 코드를 실행시킨다.
D:\user_folder\folder1\.execution.exe
@echo off
echo.
pause
cs


OpenGL 코드를 작성할 정도면 그 밖의 궁금한 부분은 스스로 해결 할 수 있을 것이라 생각한다.

예를 들어 실행했을 때, dll을 못찾는다거나 등등의 부분은 bat 파일에서 exe를 실행시키기 전에 디렉토리를 변경하거나 필요한 부분을 path에 등록하는 방식 등으로 해결할 수 있다.



*.

처음에 원격 접속으로 OpenGL 실행이 되지 않았을 때 의구심이 들었던 부분이 있었다.

코드와 데이터가 있는 PC에서 opengl 코드를 실행시켜 OpenGL이 작동하는 창을 띄운 뒤, 옆의 아무 PC로 가서 원격접속을 해보았더니 창이 그대로 떠 있고 OpenGL도 문제없이 구동되었었다. 그렇지만 원격접속 상태에서 창을 닫은 후 다시 실행하려면 되지 않았다. 즉, 원격 접속 상태에서 아예 불가능한게 아니라 처음 구동시킬 때의 계정이 원격접속 계정이면 안되게 막아놓았다는 점을 알 수 있었다.


*.

아래 질문의 답변에서 힌트를 찾았고, 몇 군데 더 참고해서 위의 글을 작성하였다.

https://stackoverflow.com/questions/41833949/opengl-and-remote-desktop



+ Recent posts