추천글
키보드 초보자들 중에서 Fn 키에 대해서 오해하시는 분들이 많이 계시더군요.
고수분들은 당연히 알고 있어서 이에 대해 설명하는 글을 잘 안 쓰시는 것 같고, 초보자들은 몰라서 안 쓰시는 것 같습니다.
어떻게 보면 초보자들에게는 이런 팁이 필요한데, 이런 팁은 찾기 어렵습니다.
초보 단계는 벗어난 중수 이상의 실력을 갖춘 사람들에게나 유용한 팁을 찾는 게 오히려 더 쉽습니다.
이 때문에 많은 초보자 분들이 이것 때문에 삽질(?)을 하시는 것 같아서, 저도 초보자이지만 이 글을 쓰게 됐습니다.
컴팩트 키보드(노트북 내장 키보드 포함)에 내장된 Fn을 다른 키로 바꾸고 싶은데 왜 못 건드리는지 갸우뚱하시는 분들이 아주 많은 것 같습니다.
대부분의 키는 윈도의 레지스트리 수정 또는 오토핫키 스크립트 등으로 리맵이 가능합니다.
예를 들어 Caps Lock 키를 왼쪽 Ctrl로 인식되도록 바꾸는 식으로요.
근데 Fn 키는 절대로 그런 식으로 리맵을 할 수 없습니다. 도대체 왜 이런 것일까요?
결론부터 말하자면, Fn 키는 자체 스캔코드를 컴퓨터에 전송하지 않습니다.
스캔코드란, 현재 키보드의 어떤 키를 눌렀다, 뗐다 하는 상황을 키보드의 회로에서 컴퓨터로 전달해주는 코드입니다. 각 키마다 고유한 스캔코드가 있습니다.
Ctrl, Alt, Shift, Win키는 키보드의 대표적인 수식(修飾, modifier) 키입니다(얘네는 보통 단독으로 쓰이지 않고 다른 키랑 같이 쓰이면서 다른 키를 '꾸며주는' 것들이라서 수식 키라고 부릅니다). 이런 키들도 스캔코드가 컴퓨터에 전달됩니다. 만약 키보드로 왼쪽 Shift+A를 누르면, 컴퓨터에 왼쪽 Shift 키의 스캔코드와 A 키의 스캔코드가 모두 전달됩니다.
Fn은 우리가 타이핑할 때에는 Ctrl, Alt, Shift, Win 등과 다를 바가 없습니다. Ctrl, Alt, Shift, Win이 다른 키와 동시입력하듯이 Fn도 그렇게 입력하거든요.
이러니까 키 리매핑에 입문한 초보자 분들은 헷갈리기 시작합니다.
레지스트리나 오토핫키를 이용해서 Ctrl, Alt, Shift, Win 키를 다른 위치로 옮겨버리거나 작동을 정지시키듯 Fn도 그럴 수 있어야 하는 거 아니냐고 오해하는 것이죠. 하지만 Fn은 그렇게 변경할 수 없습니다.
Fn은 컴퓨터에서 인식되는 키가 아닙니다. Fn 키는 스캔코드를 컴퓨터에 보내지 않습니다.
그럼 Fn 키가 하는 일이 뭐냐? Fn 키랑 다른 키를 동시에 입력하면 또 다른 키의 스캔코드를 전송하도록 꼼수를 쓰는 겁니다. 아시다시피 컴팩트 키보드는 풀사이즈 키보드보다 작게 만들다 보니 물리적인 키 개수가 적습니다. 그래서 적은 키로도 풀사이즈 키보드 못지 않게 키 입력을 할 수 있도록 조치를 취한 것입니다.
제 노트북에 내장된 키보드의 경우 Fn+Delete→Insert입니다. Fn과 Delete를 동시에 누르면 Delete가 아니라 Insert로 처리됩니다.
제 노트북 내장 키보드에서 Fn+Delete를 누르면 컴퓨터에는 Insert의 스캔코드를 전송합니다.
방금 내용을 요약 비교하면
왼쪽 Shift + A → 컴퓨터로 왼쪽 Shift의 스캔코드와 A의 스캔코드를 모두 전송
Fn + Delete → 컴퓨터로 Insert의 스캔코드를 전송함. (주의: Fn을 사용한 키 조합의 결과는 키보드마다 다를 수 있음)
초보자 분들은 이걸 오해하셔서
Fn+Delete를 누르면 키보드에서 Fn 스캔코드와 Delete 스캔코드를 컴퓨터로 전송하고, 그것을 컴퓨터에서 Insert로 처리하는 걸로 생각하시는 경우가 있습니다.
그러나 사실은 그렇지 않습니다. 그게 아니라 위의 요약처럼 제3의 스캔코드를 발생시키는 겁니다.
윈도의 레지스트리에서 키를 리매핑하는 것 또는 오토핫키 등의 유틸리티 프로그램으로 키를 리매핑할 때 Fn을 건드리지 못하는 건 Fn의 이런 특성에서 기인하는 것입니다.
윈도 레지스트리 또는 오토핫키로 키 리매핑하는 원리는 대충 다음과 같습니다. 사실 이것보다 훨씬 복잡한 과정을 거칩니다만 이해하기 쉽게 아래와 같이 다섯 단계로 요약하겠습니다.
1. 사람이 키보드의 키를 누름/뗌
2. 키보드가 해당 키의 스캔코드를 컴퓨터로 전송
3. 컴퓨터의 바이오스에서 운영체제로 그 사실을 전달
4. 윈도 운영체제나 오토핫키에서 스캔코드를 변조함(예를 들어 Caps Lock을 왼쪽 Ctrl로 리매핑하도록 설정을 해놨으면, 운영체제나 오토핫키에서 Caps Lock의 스캔코드가 들어왔으면 왼쪽 Ctrl의 스캔코드로 바꿔치기를 합니다)
5. 바꿔치기한 스캔코드를 다른 응용프로그램에 전달
그런데 Fn은 컴퓨터로 아무런 스캔코드를 전송하지 않으니까(2번 단계가 없음) 위 3~5번도 당연히 성립이 안 되는 겁니다.
인터넷에서 "Fn 키는 어떻게 다른 키로 바꾸나요?" 하는 질문이 올라오면 "스캔코드 조사 프로그램으로 테스트해 보라"고 답변하시는 초보자 분들이 생각보다 많더라구요. Fn 자체는 스캔코드가 없으므로 테스트 자체가 불가능하니, 이것은 잘못된 답변입니다.
(단, Fn 자체는 다른 키로 바꾸는 건 안 되지만, 변칙으로 Fn을 사용한 "일부 키" 조합을 다른 걸로 바꿀 수는 있습니다. 이 변칙에 대한 설명은 리플로 분리해서 쓰겠습니다.)
그럼 Fn 키를 다른 키로 바꾸는 건 불가능한 것일까요?
직접 키보드를 뜯어서 회로를 고치면 바꿀 수는 있습니다. 튜닝을 하는 것이죠.
하지만 이건 아무나 할 순 없습니다. 경험 없는 사람이 하다간 고장만 내고 AS도 못 받게 될 가능성이 높습니다.
결국 죄송한 말씀이지만 초보자는 Fn 키를 다른 키로 바꿀 수 없다고 생각하고 포기하시는 게 낫습니다 ㅡㅡ;;
예외적인 케이스 하나 찾아서 알려드립니다. 대부분의 경우 Fn이 제가 위에서 설명한대로 동작하니, 튜닝 외에는 수정 방법이 없습니다.
그러나 http://www.autohotkey.net/~daonlyfreez/tutorials/3p/Veil/fnkey.htm (영어)에 따르면 일부 제품은 예외적으로 Fn을 손볼 수 있게 하고 있습니다. 예를 들어 도시바에서 만든 키보드(노트북 내장형, 일반 외장형 모두 포괄하는 듯)는 Fn을 재정의할 수 있도록 Fn 키에 자체 스캔코드를 할당하고 있고, IBM 노트북(현재는 IBM이 개인용 컴퓨터 사업을 레노버에 매각해서 생산 안 됨. 현재 레노버 사의 노트북은 이 글에 언급되지 않아서 어떤지 알 수 없습니다)은 바이오스 차원에서 Fn 키를 재정의할 수 있도록 조치를 취하고 있습니다.
도시바 제품의 경우 컴퓨터에 그냥 연결해서 쓰면 컴퓨터가 Fn 키를 인식하지 못하지만, 도시바가 제공하는 Fn-esse라는 소프트웨어를 윈도에 설치하면, 그 프로그램 차원에서 자체적으로 Fn 키 컴비네이션을 관리할 수 있게 됩니다. Fn+W를 누르면 MS워드가 실행되는 식으로요.
거기에 오토핫키를 이용하면 Fn의 위치를 바꾸는 트릭까지 쓸 수 있게 됩니다.
아마 구 IBM 노트북의 내장 키보드는 Fn 위치까지 바꾸는 건 어려울 것 같고, 그저 Fn+다른 키를 무슨 키로 할당할지 정도만 수정이 가능할 것 같습니다. 구 IBM 노트북은 Fn 키를 바이오스 단계에서 제어하는 것 같습니다. 윈도 레지스트리나 오토핫키는 바이오스를 건드릴 수가 없기 때문에, 근본적으로 건드리진 못할 듯합니다.
참고: Fn+다른 키를 다른 걸로 바꿔서 부분적인 키 리매핑을 하는 방법
이 글은 별로 기대할 것은 없습니다. 변조 가능한 게 극히 일부 케이스 뿐입니다.
제 노트북으로 예를 들겠습니다.
제 노트북에서는 Fn+Delete를 누르면 컴퓨터에서 Insert를 누른 것으로 처리됩니다.
Fn+Delete를 Insert가 아니라 Caps Lock으로 바꾸고 싶다면, 레지스트리나 오토핫키에서 Insert를 Caps Lock으로 리매핑하도록 짜면 됩니다.
Fn+Delete를 Ctrl+Delete나 Alt+Space 같이 두 개 이상의 키 조합으로 바꾸려면, 레지스트리로는 못 바꾸고 오토핫키로만 바꿀 수 있습니다. Insert를 Ctrl+Delete나 Alt+Space로 리매핑하도록 하면 되죠.
(다만 이 방법은 한 컴퓨터에서 여러 개의 키보드를 사용할 때에는 문제가 될 수 있습니다.
만약 밖에서는 노트북 내장 키보드를 쓰다가 집에 들어오면 집에 있는 USB로 풀사이즈 키보드를 연결해서 쓴다고 가정합시다.
그런데 위와 같이 설정할 경우, USB로 연결한 별도 키보드에 Insert를 누르면 Insert로 처리되는 게 아니라 위에서 변경한 키, 즉 Caps Lock이나 Ctrl+Delete나 Alt+Space 식으로 인식이 됩니다.
이런 문제 때문에, 별도의 키보드를 같이 쓰실 때에는 그 키보드에서도 원하는대로 작동되는지 고려해야 합니다.
운신의 폭이 더욱 좁아지는 거죠)
위 Fn+Delete→Insert처럼 키보드 자체에서 Fn과 같이 누르면 또 다른 키로 인식시켜주는 경우는, 위와 같이 제한적으로나마 키 리매핑이 됩니다.
그러나 Fn이랑 같이 누르든 Fn 없이 누르든 똑같은 키로 인식되는 경우에는 이마저도 불가능합니다.
무슨 말인고 하니... 제 노트북에서 단독으로 A 키를 누르나 Fn + A 키를 누르나 컴퓨터에는 똑같은 A로 인식됩니다. 제조사가 내장 키보드에 따로 Fn + A에 대해 별도의 값을 부여하지 않았기 때문입니다.
이런 경우에는 Fn + A를 Ctrl + A로 인식시킨다든가 또는 Caps Lock으로 인식시킨다든가 하는 일체의 리매핑이 불가능합니다. 키보드에서 A를 누르나 Fn + A를 누르나 전송되는 스캔코드는 A 키에 대한 스캔코드 뿐이니까 컴퓨터에서는 이 둘을 구분할 방법이 없습니다. 따라서 레지스트리나 오토핫키로도 변조할 수가 없습니다.
또한 먼젓 글에서도 설명했지만 Fn만 단독으로 한 번 누르면 다른 기능을 하도록 하는 것도 불가능합니다. Fn만 누르면 키보드에서 컴퓨터로 스캔코드를 전달하지 않으니까 컴퓨터는 사용자가 Fn을 눌렀는지 안 눌렀는지 알지 못합니다.