Fn 키는 어떻게 작동합니까?


26

Fn랩톱에서 키 가 어떻게 작동 하는지 알고 싶습니다 . Fn키 를 잡아서 뭔가를하기 위해 스크립트를 호출 하는 커널 모듈이 있다고 생각합니다 . 내 랩톱에서 Fn+ F2무선 및 블루투스의 전원을 켭니다.

acpi_listen내가 Fn+를 누르면의 출력입니다 .F2

hotkey ATKD 0000005d 00000019
hotkey ATKD 0000007e 00000009

그리고 다음에 xev대한 출력은 Fn+F2

keycode 238 press
keycode 238 release
keycode 237 press
keycode 237 release

내가 누를 때마다 것 같아요 Fn+ F2두 개의 이벤트가 뛰어있다. 이 키에 대해 어떤 작업이 실행되는지 확인하려고했습니다. 어떤 아이디어라도 감사합니다;)

답변:


26

SynetechFn키 에 대한 매우 읽기 쉬운 설명을 제공 합니다 .

기술적 세부 사항

키보드의 키를 누르면 키보드 컨트롤러 (키보드 내부 의 작은 IC 칩 )가 전기 회로를 감지하고이를 눌러 어떤 키를 눌렀는지 해독 한 다음 스캔 코드마더 보드 로 보냅니다 . 운영 체제는 BIOS 에서 스캔 코드를 수신 한 다음 해당 키 누르기를 처리하기 위해 필요한 모든 조치를 수행합니다.

대부분의 키를 사용하면 간단합니다. A 키 를 누르면 키보드 컨트롤러가 스캔 코드를 마더 보드로 보낸 다음 스캔 코드를 OS 로 전달하여 일반적으로 'A'를 인쇄합니다. (OS에서 수정 자 키 중 하나가 현재 눌려 있음을 감지하면 다르게 작동 할 수 있습니다. 실제로 A수정자를 사용하거나 사용하지 않고 키를 누를 때 원하는대로 수행하도록 구성 할 수 있습니다 .)

이제 Fn열쇠는 특별하다. 자체적으로 누르면 키 가 독점적 으로 수정 자 키이며 일반적으로 자체적으로 아무것도하지 않기 때문에 아무 일도 일어나지 않습니다. 키보드 컨트롤러를 누른 상태에서 다른 키를 누르면 키보드 컨트롤러가이를 감지하고 내장 테이블을 통해 알려진 조합인지 확인합니다. 콤보가 테이블에 없으면 콤보를 무시하지만 콤보가 테이블에 있으면 연관된 스캔 코드를 찾아서 보냅니다.

OS는 무엇을 보게 되나요? 키의 스캔 코드와 다른 키의 스캔 코드 가 표시 되지 않습니다Fn . 대신 Fn- 콤보가 설정 한 기능과 관련된 단일 스캔 코드가 표시됩니다. 예를 들어 랩톱 제조업체가 볼륨을 줄이기 위해 Fn+ Down Arrow콤보를 설정 한 경우 OS는 Volume Down일부 키보드에 실제로있는 스캔 코드를 표시합니다 .

또한 Fn키 는 운영 체제와 독립적 으로 작동합니다.

또한 이 기사 는 올바른 방향을 알려주 는 데 도움 될 수 있습니다.

커널에는 자체 매핑 테이블이 있으므로 특정 스캔 코드를 키 코드 scancodekeycode매핑합니다. /usr/include/linux/input.h에서 커널이 스캔 코드에서 키 코드로 매핑하는 데 사용하는 것을 확인할 수 있습니다 keymap.


추신

Fn키가 전적으로 OS와 독립적 으로 작동 한다는 이전 주장에 대해 어느 정도 회복해야 할 수도 있습니다 . 더 자세한 기술 정보를 보지 않으면 OS가 키보드 Fn키 의 일부 또는 전부를 "지원"하지 않을 수 있습니다 .


1
감사합니다. Fn 키에 대한 흥미로운 정보입니다. 실제로 scancode"keycode 238"과 같은 OS 처리 부분을 찾고 싶습니다 .
soroosh

3
어쩌면 이 글은 옳은 방향으로 당신을 가리 도와 드릴까요? "커널 자체가 scancodekeycode가 키 코드에 특정 스캔 코드를 매핑 있도록 매핑 테이블 당신은 어떤 키 코드 매핑 스캔 코드에 대한 커널이 사용하는 볼 /usr/include/linux/input.h로 볼 수 있습니다 -. 그것이라고 keymap"
natty에 대해 nutty

1
그 기사는 완벽하다. 이것이 내가 찾는 것이다
soroosh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.