키보드 초보자들 중에서 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 키를 다른 키로 바꿀 수 없다고 생각하고 포기하시는 게 낫습니다 ㅡㅡ;;