기술을 얘기한다 2010.03.05 11:51
(1) 상황 설명

데스크탑 한 대와 랩탑 한 대가 있고 데스크탑에는 WANG 키보드가 연결되어 있습니다. 이 키보드를 시너지(Synergy)를 통하여 양쪽에서 공유하여 사용합니다. 그런데, 캡스락을 쓸 일이 없어서 컨트롤 키로 매핑하고 WANG 키보드에 있는 큼지막한 (그리고 다른 키보드에서는 ESC 키가 있는 자리를 차지하고 있는) Help 키를 ESC 키로 사용하려고 합니다.

키락(KeyLock)의 문제점 : 키락을 이용하면 캡스락을 컨트롤 키로 매핑하고 Help 키는 핫키 기능으로 ESC 키로 바꿀 수 있습니다. 그런데 시너지와 같이 쓰게 되면 시너지를 통해 키보드 입력을 받는 랩탑에서는 제대로 안됩니다.

키트윅(KeyTweak)의 문제점 : 키트윅은 키보드의 스캔 코드를 매핑하는 방식이므로 캡스락 스캔 코드를 컨트롤 키의 스캔 코드로 매핑하고 리부팅을 해주면 시너지 너머의 랩탑에서도 캡스락이 컨트롤 키로 동작합니다. 문제는 키트윅은 스캔 코드를 매핑하는 방식이므로 여러 키의 조합 (예를 들어, Help 키는 Left ALT + F8 입니다) 은 처리하지 못합니다.

즉, 키 조합 처리는 되는데 시너지에게 맥을 못추는 키락, 시너지에게는 강하지만 키 조합 처리가 안되는 키트윅... 이게 문제인거죠.

그럼 둘 다 동시에 쓰면 되는가? 그래도 완전히 되지는 않습니다. 그래서 마지막으로 등작하는 것이 시너지에 내장된 핫 키 기능. 키락/키트윅이 키보드가 붇은 쪽(데스크탑)에서는 거의 완벽하게 동작하니 키 조합을 시너지 너머로 넘기지 못하는 키락의 한계만 시너지의 핫키 기능으로 해결하면 되는 것이죠.

(2) 해결책

키락 설정 : 핫 키 기능을 이용하여 Help를 ESC로 매핑합니다.
키트윅 설정 : Half teach 모드를 이용하여 캡스락을 컨트롤 키로 매핑합니다.
시너지 설정 : 핫 키 기능을 이용하여 Help를 ESC로 매핑합니다.

(3) 동작 원리

상황1) 캡스락을 데스크탑 쪽에서 눌렀을 때 : 캡스락 -> 키트윅 -> 컨트롤키
상황2) 캡스락을 랩탑 쪽에서 눌렀을 때 : 캡스락 -> 키트윅 -> 컨트롤키 -> 시너지는 그냥 통과 -> 컨트롤키
상황3) Help를 데스크탑 쪽에서 눌렀을 때 : Help -> 키락 -> ESC
상황4) Help를 랩탑 쪽에서 눌렀을 때 : Help -> 시너지 -> ESC

(4) 결론

남들처럼 살면 좋잖아.
알고나면 뻔한 걸 한참 삽질했어.
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
posted by 신묘군
기술을 얘기한다 2009.12.28 11:44
상황 설명부터. 노트북에 우분투가 깔려 있고 듀얼 화면이 된다. 데스크탑운 윈도7이 깔려 있고 역시 듀얼이 되지만 우분투가 주요 작업 환경이므로 우분투만 듀얼로 쓰고 있다. 이 상황에서 우분투와 윈도를 하나의 키보드/마우스로 활용하려고 하면 당연히 시너지라는 프로그램을 쓰면 된다. (우분투와 윈도7에서 시너지를 쓰는 것에 대한 설명은 다른 글을 참조)

그런데 이전의 상황에서는 데스크탑이 듀얼이었기 때문에 간단히 해결이 되었는데 우분투가 듀얼인 경우에는 약간 사정이 다르다. 이는 우분투가 X 윈도 기반이고 X 윈도에서는 각 화면을 별개로 관리하기 때문이다. 그래서 우분투를 듀얼 화면으로 놓고 시너지를 윈도쪽에서 돌리면 우분투의 두 화면 중 한 화면으로만 마우스가 가고 나머지 화면에 마우스를 가져갈 수 없게 된다. 이를 해결하기 위해서는 우분투의 각 화면마다 별개의 시너지 클라이언트 프로그램을 실행하고 이에 맞춰 시너지 서버를 설정해야 된다.

따라서, 시너지 서버 (즉, 윈도7) 쪽의 설정 파일은 다음과 같이 하여야 한다. (설정 파일의 위치는 문서/syngergy.sgc 이다)
section: screens
    ubuntu:
        switchCorners = none
        switchCornerSize = 0
    ubuntu2:
        switchCorners = none
        switchCornerSize = 0
    win7:
        switchCorners = none
        switchCornerSize = 0
end
section: links
    ubuntu:
        right = ubuntu2
    ubuntu2:
        left = ubuntu
        right = win7
    win7:
        left = ubuntu2
end
section: options
end
말하자면 우분투의 각 화면을 ubuntu, ubuntu2 라고 각기 따로 이름을 부여하고 이 세 화면의 상대적인 위치를 정의해주면 된다. 물론 우분투 쪽에서는 이에 맞게 시너지 클라이언트 프로그램을 실행시켜주어야 한다. (한 가지 알 수 없는 상황은 예전에 우분투를 듀얼로 하지 않을 때는 시너지 클라이언트를 시작하게 하는 스크립트를 /etc/X11/Xsession.d 아래에 두어서 실행이 되게 하였는데 이번에는 그렇게 하면 클라이언트는 실행이 되지면 여전히 화면 하나가 제대로 안된다. 무슨 이유인지 모르겠음. 이전의 다른 설정과 충돌을 일으키는건지... 그래서 어쩔 수 없이 다음과 같은 내용의 스크립트를 gnome의 시작 응용으로 시작하게 하였다.)
killall synergyc
sleep 1
/usr/bin/synergyc --name ubuntu2 --display :0.1 yko.kaist.ac.kr
sleep 1
/usr/bin/synergyc --name ubuntu --display :0.0 yko.kaist.ac.kr

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
posted by 신묘군

티스토리 툴바