수정자가 아닌 작업이 주요 이벤트에 대해 수행되기 때문입니다.

수정자가 아닌 작업이 주요 이벤트에 대해 수행되기 때문입니다.

길게 누르세요 Ctrl. 그런 다음 Alt길게 누르세요. 마지막으로 를 누릅니다 Delete. Ubuntu 시스템(아마도 Debian 기반 시스템)을 사용하는 경우 Ctrl++ 단축키 Alt를 실행했기 때문에 세션이 잠겼을 가능성이 높습니다 Delete.

자, Delete잠깐만요. 그런 다음 Ctrl길게 누르세요. 그런 다음 을 누르십시오 Alt. 세션 바로가기 잠금발동되지 않습니다.

왜 그럴까요? 이 설정은 어디에 하드코딩되어 있나요?

내 추측: 단축키는 실제로 "확장 키보드 키"를 통해 작동하는 것 같습니다. 선택한 키로 "새 키보드"를 선택 Ctrl하거나 엽니다 . 하지만 처음에 이 가상 확장 키보드가 아닌 실제 키보드에 속하도록 선택한 경우에는 그렇지 않습니다. 그렇습니까?AltDeleteDelete

답변1

수정자가 아닌 작업이 주요 이벤트에 대해 수행되기 때문입니다.

이것은 실제로 키보드 하드웨어와 거의 관련이 없습니다. USB 및 PS/2 키보드는 이와 관련하여 동일하게 작동합니다. 가지다아무것도 없다소위 "수정자 키"를 특별하게 만드는 하드웨어. 어느한 가지 예외를 제외하고 키는 수정자 키일 수도 있고 아닐 수도 있습니다.

수정자 키가 무엇인지 결정하는 것은 무엇입니까?키보드 다이어그램운영 체제에서 사용되는 소프트웨어. 하드웨어는 유효한 이벤트(실제로는 현재 누른 키의 비트맵인 USB HID 입력 보고 프로토콜의 세부 정보를 마스킹하고 짧게 유지하기 위해 부분적으로 내부 형식으로 인코딩됨) 키 다운 및 키 다운 이벤트만 보냅니다. .

예를 들어, FreeBSD 키맵에서 다음 줄을 찾을 수 있습니다:

# 대안
# cntrl alt alt cntrl 잠금 검사
# 코드 기본 Shift cntrl Shift alt Shift cntrl Shift 상태
#------------------------------------------------ - -----------------
029 제어 제어 제어 제어 제어 제어 제어 제어 O
이슈 042
이슈 054
영형
이슈 083'.' '.' 가이드 가이드 N

029, 042, 054, 056은 키보드 코드(USB HID 사용번호와 PS/2 스캔 코드번호를 기준으로 범용 시스템으로 표준화된 코드 )이지만 lctrl, lshift,rshiftlalt 행동이러한 키를 맵의 수정자 키로 정의합니다. 이를 다른 작업으로 정의하고 일부 기본 FreeBSD 맵처럼 해당 작업을 다른 곳으로 이동합니다.완전히 다른키는 수정자입니다.

(이 규칙의 예외는 Fnkey인데, 이는 하드웨어에 구현된 수정자입니다.완전히하드웨어에서는 소프트웨어가 볼 수 없습니다.별말씀을요. 유선을 통해 어떤 이벤트도 생성하지 않습니다. 실제로 또 다른 하드웨어 수정자가 있습니다. 이것은 열쇠가 아닙니다. NumLock LED의 상태입니다. )

이것행동, 이와 같은 수정자 작업인 경우 변경됩니다.현재 수정자 상태는 (간단히 말하면) 현재 "열린" 수정자를 기록하는 운영 체제에 기록된 플래그 세트입니다. 키맵의 열 헤더에서 볼 수 있듯이 현재 수정자 상태("shift", "altgr", "control" 및 "alt" 상태에 대한 "on" 플래그 측면에서)가 어떤 영향을 미치는지 알 수 있습니다.행동추가 키가 매핑됩니다.

키 코드 083(즉, 숫자 키패드의 키 코드)이 있는 줄에서 . del현재 수정자 상태가 최소한 "alt cntrl"인 경우에만 매핑된 작업이 수행됨을 알 수 있습니다 boot.

키보드 드라이버 개발수정 작업열쇠를 받은 후~에 따르면또는 열쇠풀어 주다이벤트. 다른 작업은 주요 이벤트에만 적용됩니다.~에 따르면또는자동 반복이벤트. boot예를 들어 이 작업의 경우입니다. 키 083에서 키 누름 또는 자동 반복 이벤트가 발생한 경우에만그리고boot이 작업이 발생하는지 여부에 관계없이 현재 수정자 상태는 이미 "alt cntrl"/"alt cntrl Shift"입니다 .

먼저 운영 체제의 현재 수정자 상태를 해당 상태로 가져오려면 laltlctrl/ rctrl작업이 다음을 수행해야 합니다.그것이 일어났다, 통과첫 번째해당 키에 매핑된 키를 누르세요. (FreeBSD 시스템은 또한 수정자를 허용합니다.잠그다일반적인 수정자 시스템 외에도변화, 하지만 이를 사용할 수 있는 기본 키맵은 두 개뿐입니다. ISO 키보드 표준에서는 수정자도 허용합니다.걸쇠, 그러나 FreeBSD는 이 메커니즘을 제공하지 않습니다. )

내가 말했듯이 FreeBSD가 그 예입니다. 그러나 MS/PC-DOS(현재 수정자 상태가 메모리에서 잘 알려진 바이트임)부터 Windows NT(키맵에 코드 및 데이터 커널 모드 DLL이 포함됨)에 이르기까지 PS/2 또는 USB HID 장치가 있는 대부분의 운영 체제 ) 대략 다음과 같이 작동합니다.

추가 읽기

답변2

a그때를 눌러도 키 Shift코드가 제공되지 않는 것처럼 이전에 A눌러도 올바른 키 코드가 전송 되지 않습니다.DeleteAltCtrl

수정자 키는 수정자 키보다 먼저 눌러야 합니다. 이 인스턴스의 수정자 키는 Alt수정자 키이거나 그렇지 않습니다.CtrlDelete

가져오기 전에 누르는 것이 허용되면 a키 입력을 읽는 소프트웨어는 다음 문자가 입력될 때까지 어떤 문자도 출력할 수 없습니다.ShiftA

키보드 하드웨어는 누른 키에 활성 수정자가 있는지 여부에 따라 다른 스캔 코드를 보냅니다.

관련 정보