키보드의 키가 눌려지면 수많은 하드웨어와 소프트웨어 부분들이 작동을 해서 키의 의도된 동작 (예를 들어 특정 문자를 발생시킨다거나 하는) 이 실제로 일어나도록 해준다. 여기서는 소프트웨어 부분에 대해서만 설명할 것이며 (하드웨어 부분에 대해서는 제어가 불가능하다) 일단은 콘솔 출력과 관련된 것에 대해서만 얘기하겠다.
키를 누르면 키보드 스캔코드가 발생한다. 이 스캔코드들은 다시 키코드로 변환된다. i386 시스템에서는 일반적으로 Backspace 키는 키코드 14를, Delete 키는 키코드 111을 발생시킨다.
이후 키보드 라이브러리는 사용자가 지정한 키보드 정의에 의해서 키코드를 키보드 심볼 (키심볼)로 변환한다. 키보드 데이타베이스를 들여다 본다면 (Red Hat Linux의 경우엔 /usr/lib/kdb/) 서로 다른 컴퓨터, 레이아웃, 같은 키에 대한 다른 해석에 따라서 여러 개의 정의가 있는 것을 알 수 있다 (예를 들어 어떤 사용자는 두 Alt 키들이 서로 다른 modifier로 작동하길 원한다). 리눅스 콘솔의 키보드 레이아웃은 키심볼 Delete를 키코드 14로, 키심볼 Remove를 키코드 111로 지정하고 있다. 이는 이상하게 보일지도 모르나 리눅스 콘솔은 VT100 터미날처럼 작동하도록 되어있으며 이 터미날에서도 실제로 이렇게 작동한다.
아직 과정이 끝난 것이 아니다. 콘솔 어플리케이션들은 키심볼이 아닌 ASCII 문자열을 읽어들인다. 따라서 콘솔은 키심볼을 읽어 들여서 이를 키를 알맞게 나타내는 ASCII 문자열로 변환해 줘야 한다. 물론 이 작업은 어플리케이션이 알아들을 수 있는 방식으로 행해져야 한다. 예를 들어 리눅스 콘솔상에서 Delete 키심볼은 ASCII 코드 127 (DEL)로, Remove 키심볼은 적당한 문자열로, BackSpace 키심볼은 ASCII 코드 8 (BS)로 변환된다.
마지막으로 다시 앞으로 돌아가서 각 키에 의해 생성된 ASCII 문자열을 키 기능으로 변환해 주어야 한다. 이 일은 터미날 데이타베이스가 해주는데 이 터미날 데이타베이스는 각각의 터미날 종류에 대해서 문자열에서 키 기능 (기본적으로는 키심볼의 부분집합이다) 으로의 변환 정보를 가지고 있다.
참고: 불행히도 터미날 데이타베이스는 termcap과 terminfo의 두 "표준"이 존재한다. 사용하는 배포판에 따라서 둘 중 하나를 사용하거나 각 어플리케이션에 따라서 다를 수도 있다. 우리의 논의는 좀 더 현대적인 terminfo 데이타베이스에 맞춰 나갈 것이지만 제공되는 수정사항들은 둘 모두를 염두에 둔 것이다.
예를 들어, 리눅스 콘솔상에서 F1 키는 [[A 이스케잎 문자를 발생시키며 이 값은 터미날 데이타베이스의 콘솔 항목에 따라서 key_f1 기능으로 해석될 수 있다 (각 항목을 보고 싶으면 infocmp linux 명령을 사용하면 된다). 터미날 데이타베이스에 대한 자세한 내용들은 GNU의 termcap 메뉴얼을 보면 된다. 보통 리눅스 어플리케이션들은 ncurses 패키지에 포함되어 있는 terminfo 데이타베이스를 사용한다.
이 시점에서는 크게 놀라운 일도 아니겠지만, 리눅스 콘솔의 terminfo 항목은 DEL을 kbs(backspace 키) 기능으로, [3~ 이스케잎 문자를 kdch1 ("한 문자 지움" 키) 기능으로 변환한다. 처음에 Backspace 키가 DEL을 발생시키는 것이 이상했지만 터미날 데이타베이스가 모든 것을 제자리로 돌려놓으므로 정상적으로 작동하는 어플리케이션들은 DEL을 kbs로 해석하여 커서 왼쪽의 한 문자를 지우게 된다.