[C#] 시리얼 통신 시, 수신 이벤트가 두번 이상으로 들어올 경우


이거 때문에 하루종일…

현장 실습에서 젤 어이가 없으면서 젤 당황스러웠던게 바로 시리얼 통신이다. 산업 현장에서 측정장비나 생산장비들이 가지는 정보를 PC나 다른 장비로 전달하기 위해서 시리얼 통신이 많이 사용되는데, 사실 시리얼 통신이라는것을 이때 처음 본 것이다. 기껏 본거야 안드로이드 폰에 펌웨어 올릴 때 가상 COM포트로 데이터 전송하는것 정도? 현장 실습이 반이상 지나서 시리얼 통신을 주구장창 만저본 결과, 뭐 정말 별 것도 아니었지만. 컴퓨터를 처음 만질때 부터 USB에 키보드와 마우스를 꼽았던 나로써는 솔직히 이게 뭔지… 조차 몰랐으니까.


처음 봤으니 당연히 이걸 어떻게 다뤄야 하는지에 대한 감 조차 오지 않았다. 근데 하라고 하니 일단은 해야지. 그래서 처음에는 진짜 아무것도 모르고 시리얼 통신 예제를 복붙하다시피 해서 요구사항대로 진행했었는데, 정말 얘기치 않은 문제가 발생하는것이다. 열심히 예제와 실제 통신하는것을 찾아본 결과 개념 자체는 어느정도 이해가 됬는데, 정작 프로그램에 적용해보니 뭔가 이상한 것이다.

결국 하루종일 그 문제에만 몰두했다. 이게 도대체 뭔지조차 감이 오지 않았고, 당장 시리얼 통신을 시물레이션할 수 있다는 것도 알지 못했으니 결국 실물로 측정기같은게 있어야 계속 진행할 수 있었는데 그걸 전혀 몰랐다. 그래서 원인을 사실 전혀 알지 못했었다. 뭔가 이상해서 안되긴 하는데 뭐가 문제인지를 전혀 몰랐다.


시물레이션을 해보니 알게 되었는데…

결국 시리얼 통신에 대해 깊이 알아보게 되었고, 시물레이션이 가능한 가상 시리얼 통신 시물레이터도 알게 되었고, 결과적으로 쓰는 방법 자체를 완벽히 알게 되었다. 그래서 테스트를 해 보니…

수신되는 데이터가 짤려 들어오는것이다


여러 C# 시리얼 통신 예제들은 수신시 이벤트가 발생하도록 되어 있다. 이 시리얼 통신의 수신 이벤트가 발생하면 수신 버퍼에서 데이터를 가져와 처리를 하게 된다. 문제는 이 이벤트가 한번 데이터 송신시 한번 되는것이 아닌, 두세번에 걸쳐 나눠 들어오는 것이다. 간단한 예를 들어보면…

동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라 만세
무궁화 삼천리 화려강산 대한사람 대한으로 길이 보전하세

라는 문자열 데이터를 시리얼 통신으로 받으면


동해물과 백두산이 마르고 닳도록 하느님이 보우하
사 우리나라 만세
무궁화 삼천리 화려강산 대한사람 대
한으로 길이 보전하세

라고 세번의 이벤트가 발생되고 이걸 합쳐야 원래의 데이터로 들어오는것이다. USB to RS232 통신이여서 그런건지, 아니면 C#에서 제공하는 시리얼 통신 예제의 문제인지, 아니면 송신하는 쪽의 문제인건지, 통신 설정의 문제인지는 정확히 알 수 없지만. 여튼 데이터가 나눠진다. 나눠지는 횟수나 데이터가 잘려지는 위치는 그때그때 랜덤하며, 이게 결국 비트로 들어오는 데이터다보니 합치는것도 잘 합쳐야 데이터가 깨지지 않는다. 그리고 아무리 잘 들어와도 조금씩 데이터가 깨지는건 덤


문제는, 내가 필요로하는건 측정 장비에서 송신하는 데이터를 모두 받은 다음 아스키 코드로 번역하여 문자열로 만들고, 완성된 문자열에서 특정 값들을 가져오는것. 가져와서 DB에 쏴주고 특정 값은 HTTP POST로 보내줘야 한다.

그래서 어떻게 할까 고민을 했었는데, 결과적으로는 야매스러운 방법이긴 했지만, 완성을 하였다.


데이터 수신을 받아 처음과 끝으로 구분

내가 한 방법은 이 소제목과 같다. 측정 장비는 정규화된 문자열을 보내준다. 그중에서 값 부분만 측정한 값을 채워서 보내주는 것이다. 예를 들어 전자저울 같으면,

''''''''''''''''''''
측정 정보
''''''''''''''''''''
측정 모델       어쩌구
측정 시간       저쩌구 s
측정 타입       어쩌구 type

''''''''''''''''''''
측정 결과
''''''''''''''''''''
최종 무개       저쩌구 kg

''''''''''''''''''''
측정 종료
''''''''''''''''''''

이런식으로 되어 있다는 것. 물론 원래 전자저울은 그냥 00.00KG. 딱 한줄 찍어 보내준다. 이건 그냥 예시를 위해…


그러니까 여기서 시작은 “측정 정보” 라는 문자열로, 끝은 “측정 종료” 라는 문자열로 구분할 수 있다는 것. 시리얼 통신을 쭈욱 받아 문자열로 계속 쌓으면서 시작 문자열이 확인이 되면 그 앞은 다 버리고, 그 뒤부터 다시 차곡차곡 쌓는다. 쌓다가 “측정 종료” 라는 문자열을 확인하게 되면 그 앞은 필요한 곳으로 전송하던지 저장하고 있던지 하고, 그 뒤에 들어오는 문자열은 버리는것.

좋은 솔루션이라고는 할 수 없다 하지만, 별다른 해결 방법이 안보이는데 뭐… 정확히는 RS232 통신 쪽 설정 문제인거 같은데, 나로써는 도저히 해결을 할 수 없어 보여 이런 방법이라도 적용해본거지.


코드 및 설명

앞에서 이미 다 설명했으니 관련된 부분의 코드만 간략하게 기록한다. 아무래도 현재 돌아가고 있는 프로그램의 코드고 내 실력이 형편없어 보기 난해할 순 있지만. 그래도 나는 이런식으로 해결했다는 의미로 남기는 것.

int offset = 0;
string startStr;
string endStr;


private void sPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            byte[] rxBuffer;

            if (offset == 0)
            {
                rxBuffer = new byte[4096];
            }

            string rxString = "";
            int intRecSize = sPort.BytesToRead;

            if (intRecSize != 0)
            {
                sPort.Read(rxBuffer, offset, intRecSize);
                offset += intRecSize;

                for (int iTemp = 0; iTemp < offset; iTemp++)
                {
                    rxString += Convert.ToChar(rxBuffer[iTemp]);    
                }

                if (rxString.Contains(startStr))
                {
                    rxString = rxString.Substring(rxString.IndexOf(startStr));
                    if (rxString.Contains(endStr))
                    {
                        program.dataReceived(rxString, "Receive");
                        offset = 0;
                    }
                }
            }
        }

시리얼 통신 예제 자체는 이미 인터넷에 많이 돌아다니고 있다. 다만 이 부분이 해결된 시리얼 통신 예제는 보이지가 않더라. 그러니까 이런 경우가 흔하지는 않다는 거고… 흔하지 않다는건 잘 해 두기만 한다면 이런 문제는 없다는 거겠지. 그래서, 시리얼 통신 자체의 부분은 생략한다. 해당 메서드는 시리얼 통신 예제에서 시리얼 데이터가 수신될 때 발생하는 이벤트 메서드이니 쉽게 찾을 수 있을 것이다.


여기에서 startStr과 endStr 변수는 통신의 시작과 종료에 정해진 문자열을 지정하면 된다. 코드를 간단히 보면 알겠지만 시리얼 통신으로 받는 족족 문자열로 변환한 후 시작 문자열과 종료 문자열을 검사해서 시작 문자열이 있으면 그 이전은 잘라내고, 시작 문자열과 종료 문자열 둘다 있으면, 특별한 작업을 하던지 다른 클래스로 보내던지(여기서는

program.dataReceived(rxString, "Receive");

라는 부분으로 program 클래스에 완성 문자열을 보내게 된다.) 하면 되고, 시작과 끝으로 셋트가 맞춰지면 offset을 0으로 하여 문자열을 초기화 하고 다음 시리얼 통신의 수신 대기를 하게 된다.

이렇게 해서 일단 필요하다고 하는 현장 두곳에다가 넣어놨는데, 지금까지 클래임 없이 조용한걸 보면 아마도 잘 작동하는듯.

Minny_

,

[C#] WPF 프로그램의 노티바(시스템 트레이) 아이콘 생성


그냥 바로 못한다


현장실습 중 만든 프로그램은 기본적으로 작동중에는 백그라운드에서 돌아야 한다. 라는 조건이 붙는데, 아래 글(2017/02/06 - [Tip/Develop] - [C#] WinForm 프로그램의 노티바(시스템 트레이) 아이콘 생성)과 같은 조건이다. 같은 C#이고, 전에 만들어둔 코드를 그대로 붙혀 두면 될 것이라고 쉽게 생각했었는데, 그게 아니었다. 당장 NotifyIcon 이라는 도구상자 컴포넌트가 없다.


이유를 알아보니, NotifyIcon이라는 컴포넌트는 System.Windows.Forms 안에 포함되어 있는 거고, WPF는 Forms를 Using하지 않으니 바로 사용할 수 없는 것. 간단하게 System.Windows.Forms을 Using하면 되지 않을까 라는 생각을 하지만, 그렇게 할 경우 MessageBox와 같은 System.Windows.Forms와 System.Windows.Controls에 동일하게 존재하는 객체들의 모호성이 생긴다.


결국은 그냥 NotifyIcon 객체를 직접 지시하여 생성해 주고 그 설정을 맞춰주면 된다. 사실 WinForm의 방법과 크게 차이는 없지만, 직접 지시를 해줘야 하는 부분이 있어야 한다는것.


배경이 똑같으니 목적이나 방법 또한 아래 글(2017/02/06 - [Tip/Develop] - [C#] WinForm 프로그램의 노티바(시스템 트레이) 아이콘 생성)과 거히 동일하니 뭘 할 건지는 해당 글을 먼저 보고 오는것을 추천.



그래서 하는 방법


매인 윈도우가 있는 클래스에 전역변수로 NotifyIcon을 직접 생성해 주고, init를 할 때 해당 객체를 적당히 맞춰준다. WinForm에서 생성하는것과는 다른 부분이 바로 이 부분이고, 그 뒤의 부분은 동일. 필요한 상황에 맞는 이벤트나 메서드에 NotifyIcon을 보여주고 창을 숨긴다. NotifyIcon에 더블클릭 이벤트를 걸어주고, 이 이벤트 안에는 NotifyIcon을 숨기고 창을 보이게 하는것.


1. NotifyIcon을 생성하고 설정

 public partial class MainWindow : Window{
    public System.Windows.Forms.NotifyIcon notify;

    public MainWindow(){
        InitializeComponent();
    }
    ...


전역으로 하나 생성해주고,


private void Window_Loaded(object sender, RoutedEventArgs e){
     notify = new System.Windows.Forms.NotifyIcon();
     notify.Icon = Properties.Resources.ico;
     notify.Text = "PLC 통신";
     notify.DoubleClick += Notify_DoubleClick;

     ...
}


Window가 로드될 때 이름과 아이콘, 그리고 이벤트를 지정해 준다. WinForm때와 마찬가지로 아이콘은 지정해주지 않으면 아무리 잘해도 보이지 않으니강조하는 이유는 내가 당해봐서… 꼭 빼먹지 말고 해주자.


2. 창이 숨겨지고 시스템 트레이 아이콘이 보이게

3. 시스템 트레이 아이콘이 숨겨지고 창이 보이게


는 사실 WinForm때와 동일하다. 2번의 경우 창이 닫길때나 숨겨야 할 상황의 메서드에 창을 숨기고 notifyIcon을 보이게 하면 되고, 3번의 경우에는 그 반대. 물론 그렇다고 WinForm의 코드를 그대로 복붙해서는 안된다. 창의 숨김, 보이기가 WinForm과는 다르니까 신경써주자.

 private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        { 
            if(SharedKeyword.isRunning == true)
            {
                notify.Visible = true;
                this.Visibility = Visibility.Collapsed;
                e.Cancel = true;
                return;

            }
private void Notify_DoubleClick(object sender, EventArgs e)
        {
            notify.Visible = false;
            this.Visibility = Visibility.Visible;
        }


Minny_

,

[C#] WinForm 프로그램의 노티바(시스템 트레이) 아이콘 생성



간단한것만…


현장실습 중에 만든 프로그램에서 가장 기본이 되어야 하는것이 작동중에는 백그라운드에서 돌아야 한다.


막 메뉴가 추가되거나, 아이콘이 상태에 따라서 바뀌거나 하는것이 아닌 간단한 정도만 구현하면 됬었다. 그러니까 순전히 프로그램이 작동중일때(미들웨어로써 역활을 하고 있을때) 프로그램 종료를 하면 종료가 되는것이 아닌

  1. 창이 숨겨지고 2. 시스템 트레이(노티바)에 띄워지도록하고 3. 노티바 아이콘을 더블클릭하면 다시 창이 보이며 시스템 트레이(노티바) 아이콘은 없어지도록

하는것.



위의 목적대로 만드는 방법


WinForm 프로그램은 만들기 쉽다. 도구 상자에서 NotifyIcon 을 가져와서, 아이콘과 이름을 지정한 후, 필요한 상황에 맞는 이벤트나 메서드에 NotifyIcon을 보이게 하고 창을 숨기면 된다. NotifyIcon의 더블클릭 이벤트를 생성해주고 이 이벤트 안에는 NotifyIcon을 숨기고 창을 보이게 하면 끝.



1.NotifyIcon을 생성한다


그냥 도구상자에서 찾아 끌어오면 된다. 그리고 해당 콤포넌트의 아이콘과 이름을 지정해준다. 귀찮으니 이름은 기본값으로 놔두었다. 아이콘은 없으면 안된다. 아이콘이 없으면 아무리 잘 해놔도 보이지 않는다. 아무 아이콘이나 대충 끌어와 리소스에 넣고 맞춰주자.


2.창이 숨겨지고 시스템 트레이 아이콘이 보이게

위와 같은 목적으로 하려면 프로그램이 종료되지 않게 해야 하므로, 해당 프로그램의 매인 From에 FormCosing 이벤트를 붙이고, 해당 메서드에 다음과 같이 작성하면 된다.


private void MoisturmMeasurmentProgram_FormClosing(object sender, FormClosingEventArgs e){
        if (!btnStart.Enabled)
        {
            e.Cancel = true;
            notifyIcon1.Visible = true;
            this.Visible = false;
            return;
        }
    }


물론 상황에 따라 저 if안에 검사할 조건을 바꿔야 한다. 나 같은 경우는 btnStart라는 버튼을 활성화, 비활성화 하는것에 따라 프로그램의 작동 상황을 구분하니 이렇게 한 것이고… 물론 이렇게 하면 안된다!

FromClosing 이벤트를 취소하기 위해 e.Cancel = true를 하였고, 시스템 트레이(노티바) 아이콘을 보이게 한 후, 이 From을 보이지 않게 한다.


3.시스템 트레이 아이콘이 숨겨지고 창이 보이게

창을 다시 띄우고 싶을때 해당하는 메서드에 동작을 넣어주면 된다. 소제목도 2번과 반대이고 로직또한 2번과 반대이니 어렵지 않다. 나는 간단하게 시스템 트레이 아이콘을 더블클릭하면 해당 동작이 되게 한다. 그러기 위해서는 시스템 트레이(노티바) 아이콘의 더블클릭 이벤트를 붙혀주면 된다.


이벤트 붙이는거야 뭐 속성에서 이벤트를 더블클릭해서 메서드 생성을 해주던지, 직접 코드에서 붙혀주던지 알아서 하면 된다. 아래는 해당 이벤트 코드이다.

private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e){
        this.Visible = true;
        this.Activate();
    }



Minny_

,

VirtualBox로 맥 OS X 엘 케피탄 설치하는 방법, How to Install Mac OS X El Capitan on PC on VirtualBox

이 포스팅은 창작글이 아님을 밝힙니다.

이번 포스팅은 http://techsviewer.com/how-to-install-mac-os-x-el-capitan-on-pc-on-virtualbox/ 글을 번역 및 추가 설명하여 작성한 글입니다. 따라서 이 글은 CCL 해제하며, 원작자의 요구에 따라 글은 내려질 수 도 있습니다.

또한, 굳이 이 포스팅을 읽지 않아도, 저 글에 쉽고 자세하게 잘 설명되어 있으며 찾아보면 설치 동영상까지 제공하니 그걸 따라서 보시는것도 추천드립니다.

글에서 셜명되는 파일 및 자료들은 모두 위 링크에서 다운로드 받을 수 있습니다. 제가 직접 다시 배포할 순 없음을 알아주세요.

원 글에서와 제가 맞춰본 방법이 약간 상의합니다. 제가 맞춘 방법은 이텔릭 체로 표시하니 참고하세요. 제 방법은 어디까지나 참고만 하시길 바랍니다.


준비 해야할 사항

PC 최소사양

  • 운영체제 : Windows 7, 8, 8.1, 10 64bit
  • 프로세서 : Intel
  • 메모리 : 3GB 이상
  • 기타 : 가상화 기술(VT-x)

소프트웨어

  • 가상머신 : VirtualBox 4.3.18 또는 5.0이상
  • 이미지파일 : Mac OS X 10.11 El Capitan Retail VirtualBox Image
  • 기타 : 이미지 파일을 풀 수 있는 압축 해제 유틸리티(WinRAR나 7zip 권장)


방법

1. 가상 머신을 만든다.

준비해야 할 사항을 확인하고, 준비할 소프트웨어를 확인하고, 다운로드 받거나 설치해둡니다.




준비가 다 되었다면 가상머신을 생성합니다. 생성할 가상머신의 OS 종류와 버전을 맞추고 메모리 크기는 권장하는 만큼으로 지정합니다. 가상머신의 이름은 후에 가상머신을 CMD로 편집해야 하므로, 주의해서 생성해 주세요.

메모리는 2GB가 기본 권장이긴 하나, 원글에서는 4GB로 셋팅한 모습을 확인할 수 있습니다. 저는 메모리가 부족하여 2GB로만 셋팅하여 진행하였습니다


2. 가상 머신의 상세 설정을 지정한다.

생성된 가상머신을 바로 실행하면 안됩니다. 기본 셋팅이 필요한데,



부팅 디바이스에서 플로피 디스크를 제거하고, 칩셋은 PIIX3로 선택합니다. 앞에 가상 머신을 만들 때 OS 종류를 Mac OS로 잘 맞췄다면 확장된 기능의 I/O APIC 활성화, EFI 활성화, UTP Time 보고 기능이 활성화 되어 있을 겁니다.

역시 설명에는 PIIX3로 선택되어 있고 중요한 부분은 아닐 지 모르겠지만, 인텔 칩셋을 예물레이팅 하는것이 Mac OS에서 호환성 문제를 덜 일으킨다는 의견이 많습니다. 그래서 저는 인텔 칩셋인 ICH9를 예물레이팅 하도록 선택했습니다.



프로세서는 2개 이상으로 선택하고, PAE/NX 활성화는 꼭 하여야 합니다. 역시 마찬가지로 가속에서도 하드웨어 가상화 기능이 꼭 선택되어 있는지 확인해주세요.

운영체제가 Windows 10 이라면 반가상화 인터페이스를 KVM이나 Hyper-V로 선택했을때 가상화 성능이 좀 더 좋으니 저는 반가상화 인터페이스를 KVM으로 선택하였습니다


3. 가상 머신의 하드웨어 이름과 버전등을 수정합니다.

Mac OS는 오직 Mac PC에서만 설치되고 사용하도록 하고 있습니다. 당연히 가상머신이나 일반 IBM x86호환 PC에서는 설치가 안되도록 막혀져 있는데, 이걸 확인하는게 드라이버 이름쪽입니다.



고로 가상머신의 드라이버 이름을 바꿔서 Mac PC라고 인정될 수 있도록 하는 부분입니다. 별건 없고, 위 코드에서 " " 안에 아까 중요하다고 했던 가상머신 이름으로 바꿔 넣습니다. 중요한건 “ “ 안에 적어야 합니다.

저는 가상머신 이름을 Mac OS X 10.11 이라고 지정했으니 위와 같이 입력했습니다. 원 글에 해당 코드가 복사 가능하도록 되어 있긴 하나, CMD에서 일일이 복사 붙혀넣기 하기 귀찮을 수 도 있으니, 제가 bat 파일을 따로 업로드 해 둡니다. 다만 이걸 그대로 실행시켜선 안되며, 꼭 메모장이나 Notepad++등의 유틸리티로 열어 위 설명대로 " " 안에 가상머신의 이름을 넣어준 후 관리자 권한으로 실행하세요.

VirtualBoxSetting.bat


4. 부팅 완료 및 기본 셋팅을 합니다.

이후부터는 제 개인적인 생각으로 셋팅한 것이니 굳이 따라하실 필요는 없습니다. 참고만 하시라는 의미에서 추가로 붙혀두며, 원 글 에서는 이 후 부분은 존재하지 않습니다. 설치 화면을 잘 읽어보시고 어떻게 셋팅할 것인지 본인이 직접 적용해보시는걸 추천드립니다.



부팅 과정 중 별다른 에러 메시지를 띄우거나, 오래동안 화면이 변하지 않는 상황이 아니라면 정상적으로 부팅중인겁니다. 가상머신이니 당연히 느릴 뿐



한참 지나가다보면 Welcome 라는 화면과 함께 국가를 선택하도록 하는데, 이후부터는 각자 알아서 맞춰 셋팅하시면 됩니다. 다만 애플 ID를 입력하거나, 사용기록이나 오류등을 보고하는 항목은 왠만하면 Skip 하거나 비활성화 하는 센스가 있다면 좋겠네요.



셋팅이 다 되면 Setting Up Your Mac… 이라는 화면에서 기다리면 됩니다. 역시 가상머신이니 느린거 바탕화면이 뜨고 Launchpad가 뜨면 사용할 준비는 다 되었습니다.

다만 이게 완전히 끝이 아니라 두가지 정도 추가로 더 해야 하는데, 1. 바탕화면이 뜸과 동시에 뜨는 키보드 셋팅, ISO 102Key표시된 키보드를 선택하거나 기본 가이드대로 하면 됩니다. 2. 시스템이 켜지고 나서 한동안은 계속 가상 하드디스크를 읽고 가상머신이 CPU를 잡아먹고 있을 건데 30분간 놔두라네요. 저는 그냥 귀찮아서 바로 사용할거 사용했지만요


5. 사용하세요.

끝입니다. 이제 사용하시면 되요.


가상머신이니 느리고, 버벅이며, 그래픽 가속은 되지 않습니다.(그래픽 램 설정 높게 줘 봤자 인식하는건 3MB 뿐이고 그래픽 가속 적용해줘봤자 가속 안먹힙니다. 그러니 그래픽 설정은 의미 없습니다.) 다만, CPU 파워만을 필요로 한다면 Host PC의 성능에 따라 넉넉하게 CPU와 RAM을 활당해서 어느정도 사용할만한 환경을 만들 순 있을 거예요.

저는 최근에 iOS 관련한 교육을 받고 있는데, 그래서 한번 Xcode로 iOS에 Hello World를 띄워 봤습니다. 호스트 PC 사양은 intel i7-6500U CPU, 8GB RAM, GeForce 940M(DDR3 2GB) GPU, 120GB SSD, 1TB HDD의 노트북이고 가상 머신에 2GB RAM 활당하고, 가상 하드디스크 파일은 1TB HDD에 설치해 두었구요.

하드디스크 병목 현상이 심해 느린 것, 그래픽 가속이 안되고 비정상적 출력으로 인해 화면이 가끔 깨지는 점, HOST - GUEST OS간 통합 지원이 되지 않아 미묘하게 반응 속도 느린거 제외하면(사실상 전부긴 하지만), 의외로 할 만은 합니다. 하드디스크 병목 현상의 경우 2GB의 작은 RAM 공간을 활당한 상태라 어쩔 수 없이 적극적으로 가상 메모리와 메모리 압축을 많이 쓸태고, 결과적으로 IO가 많이 일어날텐데, 여기다가 5400RPM의 느린 하드디스크에 가상 하드디스크 이미지 파일이 저장되어 있으니 느린건 어쩔 수 없는 상황이라 생각되네요, 메모리를 넉넉하게 주던지, 가상 하드디스크 파일을  SSD등의 빠른 매체에 저장해 두면 상당히 쾌적해 질 거라 생각해요. 일단, iOS 개발이 가능한것 까지 확인하였으니 저는 잘 활용해 보렵니다.




끝.



Minny_

,

Windows 10, 8.1, 8 Home Edition에서 RDP(원격 데스크톱) 서버 기능 활성화하기

개요

Windows Home에서는 원격 데스크톱 연결은 가능한데, 원격 데스크톱 서버 기능은 사용할 수 없어요.

해당 기능은 Windows Pro에서만 사용할 수 있도록 막혀 있는데, 이 글은 Windows Home에서도 원격 데스크톱 서버 기능을 사용할 수 있도록 하는 방법이예요.

이 방법은 Windows 10 Home, Windows 8.1 Home, Windows 8 Home, Windows 7 Stater 버전에서 사용할 수 있어요. 단 Windows 10의 경우는 대규모 업데이트가 진행되면 다시 적용해야 하거나, 적용이 되지 않을 수 도 있으니 참고 바랍니다.


필요하게 되었어요

RDP(원격 데스크톱 프로토콜)에 대해서 아시는 분은 아실겁니다. Windows 자체적으로 제공해 주는 일종의 원격 제어 기능이며 네트워크 연결 상태가 좋으면 왠만하게 성능 잘 나오는게 강점이지요.

물론, 기능도 풍부하고 성능도 좋고, 네트워크 위치에 구애받지 않고도 쓸 수 있는 여러가지 대체제가 있고, 일반적인 용도라면 대체제로 RDP 대신 잘 쓸 수 있습니다. 이 바닥에서 유명한 대체제라면 팀뷰어라는 유틸리티가 있는데, 이녀석은 화면 자체를 그냥 캡쳐떠서 전송하는거라 네트워크와 시스템 성능만 충분하다면 다이렉트X를 사용하는 게임도 플래이 가능하죠. 별다른 네트워크 설정 없이도 쉽게 원격 제어가 가능하다는것도 장점이고… 그래서 잘 쓰고 있지요.


단, 몇가지 문제가 있는데

  1. 팀뷰어는 일단 전반적으로 느려요. 아무리 좋은 인터넷에 연결되어 있어도, 같은 네트워크 안에 있어도 미묘하게 반응이 느립니다.
  2. 또 아무래도 직접 화면을 캡쳐하는 거라 꽤 성능을 많이 잡아먹고 있죠.
  3. 젤 중요한건 라이센스가 필요합니다. 개인용이라면 상관 없지만,,,

뭐 다른 원격 제어 유틸리티들도 상황은 마찬가지겠지요. (물론 원격 제어 유틸리티마다 다를 수 도 있고, 제가 쓰는 팀뷰어는 학교내에서 구매한 라이센스를 쓰고는 있어서 저한테는 1과 2번이 중요한 문제였어요.)

그래서 RDP가 필요하긴 한데,,, 제 노트북은 Windows 10 Home이 설치되어 있어요. 그래서 RDP(원격 데스크톱 프로토콜) 서버 기능이 없는 상황, Windows RDP Server 기능은 Windows Home 버전에서는 제공하지 않으니 원래라면 사용이 불가능했어요.

이거 때문에 Windows 10 Pro 버전 라이센스를 구매할까도 생각했는데, RDP 이거 하나 때문에 업그레이드 라이센스를 지금 사기도 에매하고, 나중에 언젠가는 살거지만, 지금은 다른 방법을 찾아보기로 했어요. 그리고 저는 그 방법으로 RDP Server 기능을 잘 사용하고 있습니다.


어떤 방법인데?

일단 Windows Home 버전은 RDP를 쓸 수 없는거 아니냐? 하면 그건 아닙니다. RDP는 Windows Home 이라도 포함되어 있어요. 원격 데스크톱 연결 자체는 있거든요. Home버전에서 안되는 기능은 RDP Server 기능이고, 이 기능 또한 정확히 말하면 막혀 있는거지 아얘 삭제된 거는 아니예요.

제가 쓰는 방법은 Windows Home에 있는 RDP에 Server를 활성화 하는 방법이예요. 구글링해보면 꽤 많이 돌아다니는데 RDPWrap 라는 녀석이 있습니다. 깃허브에도 올라오고는 하는데, 컴파일 되어서 설치 가능한 건 꽤 구하기 힘들고, 방법 설명도 설명하는 곳마다 꽤 난해하게 적혀 있어서 그냥 제가 한 방법대로 다시 설명드릴게요.


어떻게 하는데?

지금부터는 읽으면서 따라하시면 됩니다. 근데, 혹시나 어떤 문제가 발생했다면 저는 책임지지 않으니까, 미리 백업을 해 두거나, 본인이 이후 일어나는 문제에 대해 해결할 수 있다면 계속 진행하세요.

우선 RDP Server 기능을 활성화 하는 라이브러리를 받아야 되요. 그리고 그걸 시스템 내부에 설치하고 셋팅하는것까지 해야 하는데, 굳이 그렇게까지 힘들게 할 필요는 없고 마우스 클릭 몇번으로 할 수 있도록 쉽게 패키징 되어 있습니다. 그게 RDPWrap라는 프로그램이예요.

RDPWrap-v1.6.zip

이걸 다운로드 받고 압축을 풀면 안에 뭐 이것저것 많은데, 간단합니다. install.bat을 실행해서 설치를 해 줍니다.

왠만하면 이것만 해도 RDP Server가 활성화 되는데, 간혹 시스템마다 활성화가 안되는 경우가 있으니까 RDPConf.exe를 실행해서 뜨는 창에 Listener state가 Listening[fully supported] 라고 되어 있는지 확인해보세요. 이게 뜬다면 RDP Server가 활성화 된거고, 아니라면 라이브러리와 서비스는 설치가 되었는데 작동하지 않는 상황입니다.

만약 Listening[fully supported]가 뜨지 않는다면 , 안에 있는 update.bat를 실행해서 진행된 후 다시 한번 RDPConf.exe를 실행해서 Listener state를 확인해보세요. 물론 모든 bat 파일은 관리자 권한으로 실행해야 합니다.

설치가 완료된 것 같다면, RDPCheck.exe를 실행해서 로컬로 직접 확인해보거나 다른 PC에서 해당 PC에 RDP로 연결해 봅니다. 저는 넷북에서 직접 연결 시도 해봤는데, 정상적으로 잘 연결된 걸 확인할 수 있었어요.



정식 기능이랑 차이점은?

아무래도 Windows Home에서는 지원하지 않는거라, 윈도우 자체 설정에서는 원격 데스크톱 연결 기능을 설정할 수 없습니다.

그래서 RDPConf.exe라는 프로그램을 제공해주는거예요. Windows Pro에서 설정 가능한 RDP Server 설정을 이 프로그램을 통해 대신하는거죠. 멀티 유저 연결이나 보안 권한 설정도 할 수 있으니까, 이 프로그램은 어디 간직해 뒀다가 필요하면 셋팅하면서 사용하면 됩니다.


그 외 Windows Pro에 포함되어 있는 RDP Server 기능이랑 기능차이는 전혀 없으니까, 이대로 써도 될 것 같아요. 윈도우 10에서 대규모 업데이트가 있다고 하면 혹시 모르니 uninstall.bat을 사용해서 RDPWrap을 제거한 후 윈도우 10 대규모 업데이트 적용 하고 다시 설치하는걸 추천해요.

끝!


Minny_

,

삼성 노트북5 NT500R5L에서 프린트스크린 키, Prt Sc 키. Fn 키 조합 없이 바로 사용하기

개요

제한된 크기의 노트북에서 어쩔 수 없는, 키보드 배열에 불만이 있다면 이를 변경할 수 있도록 하는 팁입니다. 그중에서 삼성 노트북5 NT500R5L의 키보드 레이아웃 중 불만이었던 Fn 키 조합 프린트 스크린 키를 평소에 쓰지 않는 Fn Lcok키에 매핑하는 방법을 안내합니다.


시작하며…

삼성 노트북5 NT500R5L 노트북을 사용하면서 키보드에 대한 불만 첫번째는 키감이 너무 가볍다는 것, 두번째는 도무지 이해할 수 없는 프린트 스크린키 배치였습니다. 첫번째 문제는 뭐 여타 대부분의 노트북 키보드가 그래왔으니 이것도 그려러니 하고 참는다 생각하지만, 두번째 문제인 프린트 스크린키가 펑션키 조합으로 사용해야 하는것은 아무리 이해하려 해도 이해가 안되었습니다.


키보드 자리가 없나? 
그러기에는 도무지 쓸 모가 보이지 않는 Fn Lock 키가 떡하니 있죠. 우선 이 키가 노트북에서 왜 필요한지 모르겠고, Fn Lock를 굳이 키로 두지 않고 구현할 방법은 많습니다. 하지만 굳이 삼성 노트북5 NT500R5L에서는 따로 키를 배정했죠. 

프린트 스크린키, Prt Sc 키가  기능키로 분류될 만큼 주로 사용하는 키가 아닌가? 
싶기에는 일단 저는 너무나 자주 사용하는데다가 화면을 캡쳐 할 수 있는 윈도우의 기능 키기 때문에 굳이 뺄 이유도 없었죠.(DOS 에서 주로 쓰던 Pause 키와 Scroll Lock 키 정도를 없애는건 충분히 이해하지만요. 물론 프린트 스크린키와 같이 물려 있는 시스템 리퀘스트 키, SysRq 키도 DOS를 위한 기능 키 이지만요.) 

그렇다고 Fn 키 조합으로 사용하는 키들이 대부분 시스템 기능 키 인가? 
라는 생각을 하면서 보면, 다 노트북 기능 키 들 뿐이고, 도무지 프린트 스크린 키를 Fn 키 조합으로 만들어둔 이유를 알 수 없었습니다. 애초에 여타 미니 키보드처럼 Home, End, Pg UP, Pg DN 키들이 모두 Fn 키 조합으로 사용할 수 있었다면 억지로라도 이해는 하겠지만, 솔직히 Insert, Home, End키들 보다 더 사용도가 높은 프린트 스크린 키, Prt Sc 키를 Fn 키 조합으로 한 건 정말 이해가 안되었어요.

진짜 삼성 노트북5 NT500R5L 키보드 레이아웃 설계한 사람은 반성 좀 해야 합니다. 다른 회사 키보드만 봐도 제한되는 공간에 어떻게 불편하지 않도록 키를 선별하고 위치를 지정하면서 만들었다는게 딱 보이는데, 삼성 노트북5 NT500R5L의 키보드 레이아웃은 그냥 대충 박아 넣은거 같아요.


삼성 욕은 그만하고 해결책은?

그래서 결국 저는 이걸 소프트웨어적으로라도 해결할 수 있는 방법이 있나 싶었어요. 하드웨어적인 부분을 바꿀 순 없지만 소프트웨어적으로 바꿀 수는 있다 생각한거죠.

여러가지 프로그램이 있었습니다. 제가 일단 찾은 프로그램은 SharpKeys라는 프로그램이고, 그 외에 비슷한 프로그램이 많이 있군요. 여튼 SharpKeys 라는 프로그램은 사용자가 원하는 셋팅을 만든 후 레지스트리에 값을 써 주는 프로그램이예요. 프로그램 자체가 직관적으로 되어 있고, 다른 블로거분들이 이 프로그램에 대해 많은 설명을 해 주었으니까 저는 별다른 설명은 안할게요.



저는 이 프로그램을 통해서 위와 같이 셋팅하였어요. 그러니까 존재의 의의가 가장 없는 Fn Lock 키를 프린트 스크린 키, Prt Sc 키로 바꾸었어요. SharpKeys에서 확인되는 Fn Lock 키는 두가지가 있어요. 잠금 해제(Fn 조합이 아니더라도 Fn 조합 키가 작동하도록)랑 잠금 설정(전자와 반대) 이렇게, Fn Lock 키를 누를때마다 위의 키들이 번갈아가며 입력됩니다. 그러니 셋팅을 두 경우 모두 해야 하겠죠?

여튼 이렇게 셋팅을 하게 되면 Fn Lock 키는 이제 완벽하게 프린트 스크린 키, Prt Sc 키로 작동하게 됩니다. 호환성 문제 없고, 설정이 풀릴 일 도 없습니다. 그러니까 완벽해요. 레지스트리 변경으로 시스템의 키보드 레이아웃을 변경하였기 때문에 윈도우 위에서는 무조건 해당 키를 프린트 스크린 키, Prt Sc 키로만 인식하게 되거든요.


아 그런거 모르겠고 쉬운 방법 없나?

저도 사실 프로그램을 사용하고 하는 방법을 그리 좋아하지 않습니다. 시스템의 기능을 임의로 변경하기 때문이죠. 위의 프로그램은 레지스트리에 해당 키 입력시 해당 키가 정해진 키인걸로 인식하도록 시스템을 임의로 변경한거예요. 그러니까 키보드 레이아웃을 임의로 변경한거겠죠. 이런 변경은 나중에 키보드 보안 프로그램쪽에서 걸러낼 수 도 있어요. 그 외에 시스템에 접근을 하는 셋팅 프로그램이니까 혹시나 내가 모르는 셋팅을 할 지 또 어떻게 알아요?

일단 제가 해당 프로그램을 설치하고 시스템이 변경되는 지 확인을 해 봤는데 일단은 잘 모르겠어요. 많이 쓰여진 프로그램이기도 하고, 레지스트리가 변하는것도 크게 발견한건 없습니다. 어차피 저도 이거대로 계속 사용할 거고 하니, 레지스트리 셋팅 파일로 만들어봤습니다. 아래의 레지스트리 파일은 위의 프로그램을 이용하여 생성된 값을 찾아서 레지스트리를 내보내기 하였고, 2개의 파일로 나눠진걸 제가 하나로 합쳐놨습니다. 아래는 레지스트리 내용이고 그 아래의 파일은 해당 레지스트리 파일이에요.

다운받으시고 레지스트리 병합한 후 재부팅 or 재로그온 해 주시면 됩니다. 당연히 관리자 권한으로 해주셔야 하고, 롤백 하실려면 아래 레지스트리 파일 내용의 키 값을 삭제하시면 됩니다. 롤백이 그렇게 어려운 것도 아니니 따로 롤백 레지스트리 병합 파일은 안 만들었어요.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,37,e0,28,e0,37,e0,29,e0,\
  00,00,00,00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,37,e0,28,e0,37,e0,29,e0,\
  00,00,00,00

주의사항

  • 혹시나 아래의 레지스트리를 삼성 노트북5 NT500R5L 말고 다른 시스템에서 적용하였을때 생기는 문제는 제가 책임지지 않습니다. 다른 노트북에서 저처럼 비슷한 문제로 특정키를 다른 키로 변경하고 싶다면 해당 프로그램으로 확인하면서 설정하시는거 추천드립니다.
  • 해당 레지스트리는 삼성 노트북5 NT500R5L-Y77L에서 출시된 상태 그대로의 윈도우 환경에서 테스트하였습니다. 다른 OS를 설치하셨다거나 삼성 복구 이미지를 사용하여 초기화 하지 않고 직접 포맷 or Windows의 PC 초기화 기능을 이용하였던지,,, 여튼 제품 출고시 상태와 다른 상태일때는 아래의 레지스트리를 적용하면 예기치 못한 문제가 발생할 수 있습니다. 그때도 저는 책임 안져요...
  • 그러니까 그냥 직접 프로그램 받아서 적용하세요. 별로 안 어려워요... 아래는 자신이 정말 컴맹이다. 하시는 분들만. 

다른 활용은?

자 저는 Fn Lock키에 프린트 스크린 키, Prt Sc 키만 활당해서 사용중이예요. 원래 있던 Insert 키에 Fn 키 조합으로 입력 가능한 프린트 스크린 키, Prt Sc키는 이제 크게 의미가 없으니 다른 키로 활당해도 상관 없습니다. 다만 이 키가 프로그램의 키 캡쳐로는 인식이 안될껀데, 그냥 키 목록 중에 Prt Sc 키로 임의선택하고 셋팅하면 되니 참고하세요. 아무래도 Fn 키 조합으로 누르는 상황에는 Fn 키와 Prt Sc 키가 같이 먹히면서 프로그램 상에서 인식이 안되는 모양이예요. 여튼 이 키는 사실상 쓸모가 없으니 원하는 키를 활당하시면 됩니다. 어차피 Fn 키 조합 키이기 때문에 접근성이 떨어져서 평소에는 잘 사용하지 못할꺼니까 그거 감안해서 셋팅하세요.(저는 Scroll Lock 키로 활당하였습니다)

혹시나 Fn 키 조합 기능키 중 쓸모없다 판단되는 기능 키가 있다면 다른 키로 활당할 수 도 있습니다. 저 같은 경우는 미디어 키를 활당하고 싶긴 한데, 연속되게 필요없는 키가 없어서 그냥 안쓰고 있어요.

Fn Lock 키를 사용하고 싶다! 라고 설마 하시는 분들은, 다시 셋팅을 롤백 할 필요 없이 Fn Lock 키를 누른 채로 Fn키 조합 기능키를 누르면 Fn Lock가 걸린채로 있게 됩니다. 아무래도 Windows의 기능을 이용하는게 아니라 키보드 자체에서 Fn Lock를 작동하도록 하는 야매스러운방법인거 같은데(그러니까 Windows OS가 아니라도 Fn Lock 키가 작동하도록) 어쨌거나 이렇게 하면 됩니다.

결론

그러니까 삼성 노트북5 NT500R5L의 키보드 레이아웃 설계한 사람에게 진짜 한번 물어보고 싶어요. 도대체 왜…


Minny_

,

팟플레이어를 이용한 PC 화면 녹화, 게임 녹화

개요

다음에서 제공하는 팟플레이어를 이용하여 PC화면이나 게임화면을 녹화할 수 있는 방법을 설명합니다.


특징

팟플레이어는 LIVE버전과 재생전용버전이 있으며, LIVE버전은 팟플레이어를 이용해 인터넷 개인 방송을 할 수 있습니다. 이 팁에서 이야기 하는 PC 화면, 게임 화면 녹화방법은 팟플레이어의 개인 방송 기능을 이용하여 녹화하는 방법이며 다른 프로그램을 이용하는 방법과는 아래와 같은 차이가 있습니다.

- 하드웨어 가속이 가능한 환경에서는 하드웨어 가속을 통해 영상 캡쳐, 성능 저하가 적습니다.
- 왠만한 모든 환경을 지원하며, 별다른 셋팅을 할 필요 없습니다.
- 다양한 화질로 녹화 가능하고 녹화된 영상의 크기가 작습니다.
- 녹화 방법이 쉬우며, 확실하게 녹화가 됩니다.

원리 - 캡쳐

팟플레이어의 LIVE버전은 인터넷 개인방송을 위해 만들어졌습니다. 그렇기 때문에 화면을 캡쳐하는 기능을 가지고 있습니다.

이 화면 캡쳐 기능은 윈도우에서 기본으로 사용하는 GDI 방식과 DirectDraw 방식, Direct X 출력 후킹 방식, DXGI 방식의 캡쳐를 지원하기 때문에 Windows 7부터는 Direct X 출력 후킹 방식, Windows 8부터는 DXGI방식으로 할 경우 성능에 큰 영향 없이 영상을 녹화 할 수 있습니다. 또한 이렇게 영상을 캡쳐할 때 인코더를 선택하고 해상도나 비트레이트등도 쉽게 설정 가능해 캡쳐되는 화질을 결정할 수 있는데 상세하게 설정할 순 없지만, 별다른 유료 프로그램이나 어려운 설정을 사용하지 않고 쉽게 캡쳐를 할 수 있습니다.


원리 - 녹화

다만 팟플레이어의 캡쳐 기능으로는 녹화를 바로 할 수 없습니다. 방송을 시작할 경우에 한해서 캡쳐된 영상을 파일로 만들 수 있게 되어 있어서, 방송을 하지 않고 저처럼 그냥 녹화만 하고 싶으신 분들은 추가적으로 해야 합니다.

예전부터(KMP당시에도) 현재 보는 영상을 따로 녹화할 수 있는 기능이 있습니다. 이 녹화 기능은 캡쳐와 마찬가지로 상세한 설정은 없지만 디코더를 선택하고 알기 쉽게 되어 있습니다.


방법

팟플레이어 LIVE 버전을 실행시킨 후 방송하기 기능을 켭니다.(마우스 오른쪽 클릭-방송 관련 도구-방송하기, 바로가기 키 F10) 그리고 스크린캡쳐를 선택하면 스크린 캡쳐 관련 기능들을 사용할 수 있습니다.

보이는 대로 원하는 옵션을 선택하면 됩니다. 옵션에 간단하게 설명이 되어 있으니 굳이 제가 알려드릴 건 없고, 원하는 설정으로 맞춘 후, 미리보기를 누르면 카메로로 사용할 스크린 영역이 나오고 팟플레이어 화면에 스크린 영역에 캡쳐된 영상이 나오게 됩니다.

우선 이렇게 하면 방송 준비는 완료. 여기서 방송을 하고 싶으신 분들은 방송을 하시면 개인방송을 할 수 있습니다. 방송을 하게 되면 자동으로 녹화해주기도 하니까 이 뒤에 계속 이어지는 방법은 방송을 하시는 분들은 굳이 읽을 필요 없습니다.

녹화는 동영상 캡쳐 기능을 켜면 됩니다.(마우스 오른쪽 클릭-영상-동영상 캡쳐, 바로가기 키 Alt + C), 역시 캡쳐와 마찬가지로 원하는 옵션을 선택하여 설정해주고, 설정이 완료되고 녹화를 하고 싶다면 시작을 눌러 주면 됩니다.


추천설정

그냥 무턱대고 녹화를 하면 프래임이 끊기거나 게임 플래이에 문제가 발생할 수 있습니다. 녹화 화질도 너무나 좋지 못할 수 있죠. 대부분의 시스템에 적용되는 부분은 아니겠지만, 제 노트북 사양에 맞춰서 설명 드립니다.

우선 제 시스템은 Windows 10에 스카이레이크 i7-6500U, 지포스 940M이 탑재되었습니다. 게임성능에 중요한건 CPU와 게임을 돌릴 외장그래픽의 점유율이 얼마나 되냐일건데, 옵티머스 그래픽을 사용하는 노트북이나 꼭 옵티머스 그래픽이 아니더라도 멀티 GPU를 사용하는 시스템에서는 조금 더 좋은 효율을 보여줄 수 있습니다.

그래서 어떻게 설정하느냐…



게임을 하든 뭘 하든 간에 DXGI 1.2캡처를 이용하세요. 만약 Windows 7이라면 게임 캡쳐모드를 선택합니다. GDI 캡쳐를 이용 할 경우 캡쳐화면 중에 그래픽을 사용하거나, 오버레이등의 화면을 캡쳐할 수 없습니다.

일부 시스템에 따라서는 오디오 캡쳐 장치 2가지를 지원 안할 수 있습니다. 제 노트북 같은 경우는 따로 장치를 사용해서 두번째 장치 소리 입력을 선택할 경우에는 상관 없었는데, 노트북 내부의 리얼텍 오디오에서 두가지 소리를 같이 입력하려하니 하나는 입력 안되는 모습을 보였습니다. 테스트 몇번 해 보세요.

스크린 캡쳐 설정은 두가지 경우로 보세요. 첫째로 그냥 화면을 녹화하고 싶다 하면 스무스필터를 적절히 선택하면 됩니다. 둘째로 게임 화면을 녹화하고 싶다 하면 스무스필터를 꺼주세요.(만약 자신의 PC가 성능이 높다면 스무스 필터 적용해도 그만입니다, 다만 스무스필터가 CPU 부하를 많이 주기 때문에 적절히 조절해야 합니다)


압축 설정이 중요하긴 한데, 몇가지만 기억해 주시면 됩니다. 여기서는 H.264 기본 인코더를 사용하세요. 인텔 그래픽을 사용하는 분들 중 녹화를 따로 하지 않고 바로 방송을 통해 자동 녹화 기능을 이용할 경우 H.264 인텔 퀵싱크를 선택해 주셔도 무방합니다. 인텔 퀵싱크를 이용하면, 인텔 내장 그래픽에서 하드웨어 가속을 통하기 때문에 캡쳐 성능이 향상되고 CPU사용율을 적게 먹습니다만, 녹화시에는 기본 인코더를 선택합니다. 이유는 녹화에서 인텔 퀵싱크를 사용해야 하거든요.

해상도는 최대가 720p 입니다. 더이상 높일 수 없습니다. 비트레이트는 많이 정적인 영상이라면 1000Kbps, 움직임이 많다 싶으면 3000Kbps, 움직임이 많은데다 영상이 검은 곳도 많다(보통 게임이겠죠) 하면 4000Kbps로 선택합니다. 프래임은 자신의 PC 사양이 높아서 게임이 60프래임으로 구동 가능하다 하면 60프래임, 아니라면 30프래임 해주세요. 가능하면 원본 프래임 사용은 체크 해제합니다. 녹화 결과가 좋지 않아질 수 도 있습니다. 그 외에 옵션은 자신의 PC상황과 원하는 품질에 맞게 선택해 주시면 됩니다.


동영상 캡쳐에서는 영상 코덱을 H.264 - 인텔 퀵싱크로 사용해주세요. 만약 내장 그래픽을 사용하지 않는다면 H.264 - 오픈 코덱을 사용하거나 외장 그래픽의 영상 가속 디코더를 사용해 주시면 됩니다.(팟플레이어에 외부 코덱 사용 방법은 따로 찾으시는거 추천드립니다) 다만 외장 그래픽의 영상 가속 디코더를 선택하면 게임 성능이 저하될 수 있으니 일단 설정해 보고 측정하는거 추천드립니다.

영상 품질, 해상도, 프래임은 캡쳐설정 당시에 했던대로 맞춰주면 되고 음성 코덱은 MP3에 나머지는 캡쳐설정 당시로 맞춰주면 됩니다.

자 그리고 이제 녹화할 일 만 남았는데, 게임 같은 경우는 해상도를 녹화 해상도에 맞춰주는걸 추천합니다. 그러니까 720p로 해상도를 낮춰서 게임을 플래이하세요. 성능 문제가 아니라 스무스필터를 꺼 두려면 해상도 자체를 낮춰야 영상이 일그러지는 문제가 없습니다.

그러니까, 왠만한건 권장 옵션으로 놔두지만 하드웨어 가속을 할 수 있는 부분이 있다면 이걸 분산시켜서 하드웨어 가속을 시키고 성능에 문제가 없도록 하자, 그리고 녹화되는 영상에 맞춰서 조절하자는 옵션입니다.


결과

트리플 모니터를 활용해 왼쪽 모니터에는 작업 관리자와 GPU-Z로 GPU상태를 확인하였고, 오른쪽에는 캡쳐 영상을 재생하고 녹화를 하는 팟플레이어 창들을 띄워뒀습니다. 이렇게 하여 노트북 화면을 캡쳐하게 되면 위와 같은 시스템 사용률을 보이게 됩니다. 실사용 시스템이니 시스템 리소스 사용량이 원래보다 조금 높다고 생각하고 봐주세요.

또 제가 지금 라이즈 오브 더 툼레이더 영상을 이 방법으로 녹화하여 업로드 하고 있으니, 확인해 보시는것도 좋을 것 같습니다.

사실, 게임 녹화의 경우 Windows 10에서 제공하는 게임 DVR 기능을 사용하는것이 더 좋은데, 이상하게 제 노트북에서는 게임 DVR이 활성화 안되서 어쩔 수 없이 위 방법으로 녹화하고 있네요.




Minny_

,

엔비디아 지포스 드라이버 일부 840M, 940M 설치 불가 문제 해결 방법

개요

이 문서에서는 엔비디아에서 공식 배포되는 드라이버 패키지가 일부 840M, 940M 그래픽 칩셋을 가진 장치에서 설치되지 않는(“이 그래픽 드라이버는 호환되는 그래픽 하드웨어를 찾지 못했습니다”) 문제에 대해 원인 분석과 수정한 드라이버 패키지를 배포합니다.

대상

시스템은 HP Pavilion 14 n266tx 이며, 해당 시스템에는 지포스 840m 그래픽 칩셋이 포함되어 있습니다. 드라이버는 현재까지 해당 문제가 확인되는 Windows 10 x64 용 드라이버 패키지중 현 시점 최신버전(361.43)을 기준으로 합니다.




다른 윈도우 버전용 드라이버 패키지 중에서도 해당 문제가 발생하면 동일한 방법으로 적용이 가능하며, 위 시스템 외에도 지포스 840m이나 940m에서 최신버전의 드라이버를 설치하려 할 때 “이 그래픽 드라이버는 호환되는 그래픽 하드웨어를 찾지 못했습니다” 라는 메시지가 뜨고 설치가 진행되지 않다면 확인해보세요.


840m 940m 말고도 다른 엔비디아 지포스 그래픽을 가진 시스템에서 드라이버가 위와 같은 에러로 설치되지 않는다 해도 이 글을 확인해보세요.

원인

일부 840m, 940m을 위한 그래픽 드라이버가 353.62 버전 이후로 빠져 있는것을 확인하였습니다. 아래 그림1 은 353.62 드라이버 패키지 파일 중 nvhmi.inf 파일과, 그 이후 드라이버 패키지 파일에서의 nvhmi.inf을 비교한 사진인데, 아래와 같이 최신버전의 드라이버 패키지에서 비어있는 하드웨어 ID 4가지를 확인할 수 있었습니다.

  • DEV_1341 / SUBSYS_2165103C
  • DEV_1341 / SUBSYS_2166103C
  • DEV_1341 / SUBSYS_21DB103C
  • DEV_1347 / SUBSYS_80DB103C

해당 ID를 가진 840M과 940M은 드라이버 패키지 안의 inf파일에 드라이버가 정의되지 않았기 때문에 드라이버 설치 프로그램에서 확인이 되지 않고 설치가 진행되지 않는 것입니다.



위에 언급된 하드웨어 ID 외에도 다른 장치에서도 똑같이 뜬다면, 1. 해당 장치의 하드웨어 ID를 확인하고, 2. 해당 장치에서 설치가 가능한 버전을 찾고, 3. 설치가 가능한 버전의 드라이버 패키지와 설치가 되지 않는 최신 버전의 드라이버 패키지 안의 inf 파일들을 찾아 4. 장치의 하드웨어 ID를 기준으로 찾아보시기 바랍니다.

해결

궁극적인 해결 방법은 엔비디아측의 공식 드라이버가 배포되기 전까지 별다른 방법이 없습니다. 우선 한국 엔비디아 커뮤니티에 문의 글을 올려둔 상황이니 진행사항에 따라 글을 수정합니다. 현재로써는 문제가 되는 해당 inf 파일을 수정하여 임시로 해결 가능합니다.


설치가 가능한 구 드라이버에서 비어있는 하드웨어 id를 설치할 드라이버의 inf에 맞춰서 넣어주면 됩니다. 이 때 중간부분에 해당 ID는 어느 섹션의 드라이버 패키지로 설치할 것인지([NVIDIA_Devices.NTamd64.10.0] 부분) 지정해 주고, 맨 밑부분에 하드웨어 ID에 따른 드라이버 이름을 지정하는 곳에([Strings]) 넣어주고 저장한 후 다시 설치 프로세스를 실행해 보세요.



참고

inf파일을 수정한 후 설치 프로세스를 시작하면 정상적으로 설치 프로세스가 진행되는 것으로 보이나 설치 과정 중 실패할 수 있습니다. 이는 위에서 수정하여 추가한 하드웨어 ID에 대한 Windows의 드라이버 서명이 존재하지 않아 시스템에서 설치를 중단시키는 것입니다.


고급 부팅 옵션에서 드라이버 서명 사용 안함 옵션으로 부팅한 후 설치를 다시하게 되면 아래와 같은 메시지를 확인할 수 있습니다. 서명을 무시하고 게속 설치하도록 하면 정상적으로 설치가 가능합니다.





수정 패키지 배포

저도 이 문제 때문에 해결법을 찾고 있었기 때문에 위의 방법으로 만들어보았습니다. 일단 제가 필요해서 만들었기 때문에 다른 그래픽 칩셋에서 동일한 문제는 따로 해결하고 추가 배포할 생각은 없습니다.(심심하면 할 것 같습니다)


이 문서에서 업로드하는 파일은 두가지입니다.

  • 위의 방법으로 수정한 inf 파일
  • 위의 방법으로 수정한 inf을 포함하는 361.43 드라이버의 자동 압축 풀림 패키지 파일

기존에 드라이버 패키지를 받으셨다면 inf 파일만 받으시고 드라이버 패키지가 풀린 곳에 적용시키면 됩니다. 기본 경로는 C:\에 엔비디아라는 풀더로 되어 있으며 안에 들어가면 드라이버 버전으로 풀더가 있고, 그 안에 디스플래이 드라이버라는 풀더가 있는데 이 안에 넣어주세면 됩니다. 해당 inf파일은 361.43 을 기반으로 수정하였으므로, 다른 버전 드라이버에서는 적용되지 않을 수 있습니다.


드라이버 패키지를 받으시지 않으셨다면 수정한 inf파일을 포함하는 자동 압축 풀림 패키지 파일을 다운로드 받으시면 됩니다. 드라이버 버전은 361.43이며 위의 inf파일을 적용 한 것 외에 추가적인 작업은 하지 않았습니다. 압축을 푸실때 경로 그대로 하시길 추천하며(자동으로 설치 프로그램을 시작할겁니다), 드라이버를 재패키징 하여 배포하는것은 라이센스 문제가 있을 수 있으므로 패키지는 이번 버전만 배포합니다.


추가적으로 이 후 버전도 똑같은 문제가 있을 경우 inf파일만 추가적으로 수정하여 배포 할거고, 공식적으로 문제가 해결된다면 배포를 중단합니다.

2016년 9월 3일 추가

 

대용량 파일이라 패키지 파일을 NAS에 업로드하여 링크로 제공하고 있었습니다. 그러나 NAS과 네트워크 관련 작업으로 인해 더이상 제공은 힘들 듯 하네요. 또한 굳이 패키지 파일을 배포할 필요성은 못느껴서 더이상 패키지 파일은 배포 중단합니다.

위의 방법으로 직접 적용하시는걸 추천드려요. 


다운로드

INF 파일 : nvhmi.inf
드라이버 패키지 파일 : NVIDIA GeForce Driver for 840940m.exe


Minny_

,