Eli의 여백

바쁜 나날들 사이에서 생각났던 이런저런 것들을 적어봅니다.

IT/문제해결

원격 데스크톱(mstsc) 연결시 검은 화면만 뜨거나 0x112f 프로토콜 에러로 끊길 때 해결방법

Eli♪ 2022. 3. 16. 12:21

문제 상황

몇 달 전쯤에 특정 윈도우 업데이트 이후 원격 데스크톱이 제대로 작동하지 않는 문제가 발생했다. 연결하고 나면 원래 잘 떠야되는 화면이 검은색 화면만 뜨면서 원격 데스크톱 창이 굳어버리거나 아무리 오래 놔둬도 검은 화면인 상태로 아무것도 할 수 없는 상황이 지속됐다. 그러나 이 때 안드로이드 폰에서 MS공식 remote desktop을 깔고 접속해 보면 잘 되는 것을 확인할 수 있었다. 그러나 컴퓨터로 하기만 하면 계속 검은 화면만 떠서 아예 작업을 할 수 없었다. 특히 이렇게 한번 검은화면 연결이 되고 나면 실제 컴퓨터에 가서 잠금을 풀 때도 검은 화면에서 잠금 해제화면도 안뜨고 아예 먹통이 되어버리는 현상을 자주 겪었다.

 

이후에도 많은 시행착오를 거치면서 해상도 변경 등의 특정 조건에서 동작하는 것을 확인했고, 원인 및 해결방법을 찾아서 다시 원래 환경에서도 정상 동작하도록 하는 방법을 알아냈다는 판단이 되었기 때문에 기록으로 남겨 보려고 한다.

 

용어 정리

이후 서술하는 내용의 오해를 방지하기 위해 용어 및 접속환경을 정리하고 가겠다.

호스트 = 연산이 돌아가고 있는 컴퓨터

클라이언트 = 화면이 있고 호스트에 연결하려는 컴퓨터

 

- 데스크톱 호스트: 운영체제=윈도우 10 Education, 업데이트 채널=일반, 모니터 수=4, 그래픽카드=GTX1060, 사용 프로그램=legacy 원격 데스크톱(mstsc)

- 데스크톱 클라이언트: 운영체제=윈도우 11 Insider preview, 업데이트 채널=dev channel, 모니터 수=3, 그래픽카드=GTX970, 사용 프로그램=legacy 원격 데스크톱(mstsc)

- 태블릿 PC 클라이언트: 기종=삼성 갤럭시 북 12.0, OS=윈도우 11 Insider preview, 업데이트 채널=dev channel, 모니터 수=1(태블릿 화면) 그래픽카드=내장그래픽, 사용 프로그램=legacy 원격 데스크톱(mstsc)

- 모바일 클라이언트: 기종=삼성 갤럭시 S8+, OS=안드로이드 pie(version 9), 모니터 수=1(폰 화면), 사용 프로그램=RD client (MS공식 앱)

 

그래픽카드를 적은 이유는 원격 데스크톱의 성능에 클라이언트와 호스트의 그래픽카드가 모두 영향을 미친다는 사실을 몇 년 전에 테스트를 통해 확인했기 때문이다. 또한, 윈도우 10 이상부터 MS store에서 UWP 앱으로 제공하는 클라이언트(URDC)는 아직 안정화가 덜 되어서 legacy app(MSTSC)에 비해 필요한 기능이 없기도 했고 여러 모로 문제가 많았기 때문에 나는 현재에도 mstsc를 사용하고 있다.

 

MS에서 제공하는 윈도우 클라이언트는 mstsc, msrdc, urdc의 3가지로 파편화되어 있다. 자세한 내용은 다음 링크들에서 확인할 수 있다. 나는 다른 클라이언트들이 충분히 안정화되기 전까지는 mstsc에서 넘어갈 생각이 없다.

https://docs.microsoft.com/ko-kr/windows-server/remote/remote-desktop-services/clients/remote-desktop-app-compare

https://docs.microsoft.com/ko-kr/windows-server/remote/remote-desktop-services/clients/remote-desktop-features

 

1차 문제상황 상세 설명

문제가 발생했을 때의 좀 더 정확한 상황은 다음과 같다.

1. 데스크톱 호스트에 데스크톱 클라이언트(3모니터)로 접속, '모든 모니터를 원격 세션에 사용' 에 체크지속적인 '비트맵 캐싱'에 체크하고 연결 (원래 접속방법) → 무한 검은화면

2. 데스크톱 호스트에 데스크톱 클라이언트(3모니터)로 접속, '모든 모니터를 원격 세션에 사용' 에 체크 및 지속적인 '비트맵 캐싱'에 체크 해제하고 연결 → 무한 검은화면

3. 데스크톱 호스트에 데스크톱 클라이언트(3모니터)로 접속, '모든 모니터를 원격 세션에 사용' 에 체크 해제 및 지속적인 '비트맵 캐싱'에 체크하고 연결 → 모니터 1개에서만 표시되지만 잘 됨. 전체화면을 하든 창모드를 하든 더 작은 해상도로 하든 하여튼 잘 나옴.

4. 데스크톱 호스트에 모바일 클라이언트(1모니터)로 접속 → 잘 됨.

5. 데스크톱 호스트에 태블릿PC 클라이언트(1모니터)로 접속, '모든 모니터를 원격 세션에 사용' 에 체크 및 지속적인 '비트맵 캐싱'에 체크하고 연결 → 잘 됨

6. 데스크톱 호스트에 태블릿PC 클라이언트(1모니터)로 접속, '모든 모니터를 원격 세션에 사용' 에 체크 해제 및 지속적인 '비트맵 캐싱'에 체크하고 연결 → 잘 됨

 

위 결과를 통해서 비트맵 캐싱하고는 관련이 없는 문제라는 것을 알 수 있었고, 태블릿에서 '모든 모니터를 원격 세션에 사용' 체크 여부에 관계없이 잘 되는 것을 확인하였다. 즉 데탑 클라이언트의 모니터 갯수가 문제라는 것을 추측해 볼 수 있었다.

 

참고적으로 위 조건들에서 클라이언트 연결 여부와 관계없이 호스트는 계속 돌아가고 있고, 검은 화면인 경우 마우스 및 키보드 입력이 전혀 안먹지만 다른 조건의 되는 클라이언트를 연결했을 때 제어를 할 수 있었다. 호스트에서 잠금 해제할 때 검은 화면으로 컴퓨터가 먹통이 되어서 강제종료를 했을 때도, 원격접속을 하면 잘 동작하는 것으로 미루어 보아 한번 검은화면이 나오면 호스트의 제어장치들까지 영향을 주는 것을 확인할 수 있었다. 호스트에서 마우스 키보드를 뺐다 껴도 안되는건 마찬가지였고, 검은 화면인 상태에서는 아무런 조작도 안먹힌다. 예를 들면 그래픽카드 초기화 단축키 (Win + Ctrl + Shift + B) 도 안된다. 이러한 문제가 반복적으로 재현 가능했고, 한 번 이 현상에 걸리면 호스트에서 작업을 하기 위해 어쩔 수 없이 전원버튼 눌러서 강제종료 후 재부팅 하는 수밖에 없었다. 

 

1차 문제상황 해결 방법 (모니터 수가 1개로 제한됨)

앞에서 잘 되는 조건을 확인한 이후로는 다음과 같이 원격 데스크톱을 사용하였다. 호스트는 건들 필요 없이 클라이언트에서만 조작한다.

기본 세팅에서 모든 모니터를 원격 세션에 사용 체크를 풀고 모니터 1개에서만 전체화면으로 접속

또는

해상도를 모니터 1개보다 작거나 같게 세팅 후 창모드로 사용

 

그리고 해보지는 않았지만 클라이언트가 듀얼 이상의 모니터를 사용할 경우 아예 추가 모니터를 빼 버려도 동일한 효과를 얻을 수 있을 것으로 생각한다.

 

2차 문제 상황

위와 같이 사용하고 있었는데 특정 윈도우 업데이트 이후에 모니터 1개에서 접속할 때도 아래와 같이 오류 코드 0x112f 문제가 발생했다. 이를 통해 remote desktop protocol에 뭔가 문제가 있음을 추측할 수 있었다. 

 

2차 문제 해결 방법

손에 땀이 날 정도로 검색을 많이 한 결과 WDDM 속성을 건드리면 해결 가능한 것을 알 수 있었다. 다만 단순 변경으로는 해결되지 않았고, 내가 나름대로 이것저것 시도해 본 결과 재현성 있게 문제가 해결된 절차는 다음과 같다. 역시 호스트와 관계 없이 클라이언트 컴퓨터에서만 조작한다.

 

1. Win+R 단축키로 실행 창을 띄운 후 gpedit.msc를 입력

2. 컴퓨터 구성 - 관리 템플릿 - Windows 구성 요소 - 터미널 서비스 - 원격 데스크톱 세션 호스트 - 원격 세션 환경 폴더에서 '원격 데스크톱 연결에 대해 WDDM 그래픽 디스플레이 드라이버 사용' 옵션을 확인

기본값은 '구성되지 않음'일 것이다. 원래 이렇게 해도 되어야 하는게 맞는데 모종의 이유로 내부 세팅이 꼬여 있는 것으로 판단할 수 있었다. 

 

3. 이 설정을 '사용 안함' 으로 변경 후 재부팅

4. 해당 설정을 다시 '구성되지 않음'으로 변경 후 재부팅

 

만약 3번 절차에서 원격 데스크톱을 켰다면 위에 나온 0x112f 에러가 그대로 뜰 것이다. 그러나 설정을 다시 구성되지 않음으로 변경하고 재부팅 하면 1차 문제 해결방법에서와는 달리 모니터 여러 개일 때도 모든 모니터를 원격 세션에 사용 옵션 켜고도 잘 되는 것을 확인할 수 있었다.

 

그리고 이렇게 잘 되는 상황에서도 Win+Ctrl+Shift+B 키를 눌러서 그래픽카드 초기화를 하면 다시 프로토콜 오류가 뜨면서 안되는 현상을 확인했다. 동일하게 WDDM 설정을 사용 안함 후 재부팅 했다가 구성되지 않음으로 바꾸고 재부팅하면 또 된다.

 

문제 원인 추정 및 분석

위 모든 과정들을 통해 미루어 짐작하건대, MS에서 모니터가 여러 개일 때 '모든 모니터를 원격 세션에 사용' 옵션에 체크를 하면 여러 모니터에 표현하기 위해 다른 RD 프로토콜 조건을 사용하는 것으로 생각할 수 있었다. 그리고 이 프로토콜은 WDDM 옵션과 관계가 있으며, 구성되지 않음 상태에서도 잘 작동해야 하지만 모종의 이유로 내부 설정값이 꼬인 것으로 추정할 수 있었다. 이를 해결하기 위해 설정 변경 후 재부팅을 하면 이유는 모르지만 정상적으로 세팅이 돌아오는 것을 확인할 수 있었고, 그래픽카드 초기화를 하면(아마 그래픽카드 업데이트시에도 해당될 것 같다) 다시 세팅이 꼬이는 것을 확인할 수 있었다.

 

참고적으로 dxdiag를 통해서 WDDM 버전을 확인하는 것은 적어도 내 환경에서는 아무런 소용이 없었다.

 

해당 문제는 윈도우 11이 버전 업데이트를 하면서 차차 해결해 나가야 될 것 같고, 일단은 현 상황에서 문제를 편법적으로나마 해결하는 방법은 위에도 언급하였듯이 WDDM 세팅을 변경하면서 2번의 재부팅 과정을 거쳐야 되는 것 같다. 혹시 더 좋은 방법이 있다면 댓글 등으로 제보해주면 감사하겠다.

 

결론

마이크로소프트에서 윈도 업데이트를 하면서 원격 프로토콜 관련 설정을 건들고 있다는 것을 간접적으로 추정해볼 수 있었다. 아마도 보안 관련 이슈일 것으로 생각한다. 내가 알기로 RDP가 공개 프로토콜이 아닌데, 리눅스의 vnc와는 달리 암호화는 하는 것으로 알고 있다 (VNC는 옆에 있는 다른 사람도 아주 쉽게 해킹에 사용할 수 있으므로 주의하는 게 좋다고 본다. 특히 IoT한다고 집에서 vnc로 원격 하는 경우 더욱 더 조심.. 나도 이전 글에서 VNC로 세팅을 했었지만 보안 이슈가 있다는 사실을 알고 바로 해당 기능을 껐다). 하여간 원격 관련해서 MS가 개선해 주고 있다는 점은 고무적이나, 현재의 임시방편 해결책들을 쓰지 않아도 되게 업데이트가 이루어지면 좋을 것 같다.