키맵과 애플리케이션 자체

키맵과 애플리케이션 자체

내 CentOS 시스템에서는 Ctrl+Alt+F1이름이 X Windows 세션으로 표시되지만 :0다른 시스템에서도 Ctrl+Alt+F7동일한 작업을 수행할 수 있습니다. Fn 키가 X 세션 및 TTY에 매핑되는 방식을 결정하는 것은 무엇입니까?

관련되어 있지만 다릅니다.Ctrl + Alt + F<Num>을 누르면 어떻게 되나요?

답변1

키맵과 애플리케이션 자체

실제 키와 코드 인식은 키보드 맵에 프로그래밍된 내용에 따라 달라진다는 점을 인용한 Q&A에서 분명히 알 수 있습니다. 이 옆에는두 개의 다른관련된 키보드 매핑은 다음과 같습니다.두 개의 다른코드 세트.

  • X11 서버에는 키보드 장치의 입력 이벤트를 변환하는 자체 키맵이 있습니다. 이는 ⎈ Control++ 형식의 코드를 ⎇ Alt활성 커널 가상 터미널을 변경하기 위한 요청(X11 서버에서 발행)으로 변환합니다.Fn
  • 커널에 내장된 터미널 에뮬레이터에는 키보드 장치의 입력 이벤트를 변환하는 자체 키맵이 있습니다. 이는 ⎇ Alt코드의 + 형식을 활성 커널 가상 터미널을 변경하라는 요청으로 변환합니다. 코드는 일반적으로 동일한 작업에 매핑되지만 이 매핑은 필수는 아닙니다.Fn⎈ Control⎈ Control

적어도 많은 Linux 운영 체제에서 후자의 키맵은 구성 메커니즘을 통해 전자에서 파생되며 시스템 관리자는 단일 위치에서 하나의 매핑만 구성합니다. 하지만 실제 지도는 두 개입니다.

어떤 것이 적용되는지는 어떤 커널 가상 터미널이 활성화되어 있는지에 따라 다릅니다. 이는 X11 서버가 커널 가상 터미널을 효과적으로 "소유"하는 프로토콜을 사용하기 때문입니다.

  • 이 터미널로 전환하면 X11 서버는 KVT 하위 시스템을 커널 자체 내장 터미널 에뮬레이터가 키보드 입력 장치에서 완전히 연결 해제되는 모드로 전환하거나 가상 터미널을 원시 키코드 모드로 전환하여 커널이 빌드되도록 합니다. 터미널에서는 시뮬레이터에서 Mapping이 수행되지 않으며,
  • X11 서버는 터미널이 다른 곳으로 전환되면 이 작업을 취소합니다.

이를 통해 X11 서버는 커널에 내장된 터미널 에뮬레이터와 다양한 I/O 장치를 공유할 수 있습니다. (이 공유 프로토콜은 사용하는 I/O 장치에 커널 내장 터미널 에뮬레이터가 전혀 연결되어 있지 않은 경우 필요하지 않습니다.) I/O 장치를 담당하는 경우 해당 키맵은 커널이 내장되어 있을 때 적용됩니다. 터미널 에뮬레이터에서는 해당 키맵이 적용됩니다.

이는 X11 서버가 어떤 커널 가상 터미널을 먼저 "소유"하는지 결정하는 방법을 보여줍니다. 이 결정은 X11 서버에 달려 있기 때문입니다. 세 가지 방법이 있습니다:

  • 사용 가능한 첫 번째 커널 가상 터미널을 할당합니다. 이 모드에서 ⎇ AltX11 세션으로 전환하는 데 사용되는 +키보드 코드는 시스템이 시작되는 다른 항목과 서비스가 시작되는 순서에 따라 런타임에 다를 수 있습니다. Fn
    • 예를 들어 커널 가상 터미널 1~4에 고정된 TUI 로그인 서비스(실행 중이거나 유사한 서비스)가 있는 경우 gettyX11 서버는 KVT 번호 5를 사용 가능한 다음 가상 터미널로 찾으므로 ⎇ Alt+ F5가 키보드 코드입니다.
    • 예를 들어 시스템이 요청 시(사용자가 KVT로 전환할 때) TUI 로그인 서비스를 시작하고 아직 서비스가 시작되지 않은 경우 X11 서버는 KVT 번호 1을 사용 가능한 다음 가상 터미널로 찾게 되며 따라서 ⎇ Alt+ F1는 키보드 코드.
  • 명령줄에서 지시된 커널 가상 터미널을 할당합니다(표면적으로는 예약되어 있음). 서버 프로그램에 대한 명령줄 인수 중 하나는 사용할 커널 가상 터미널의 수입니다. 따라서 인수가 여기에 주어지면 vt7+ ⎇ AltF7키보드 코드입니다.
  • 현재 커널 가상 터미널을 사용합니다. 이는 KVT의 TUI 로그인 세션에 로그인한 다음 해당 로그인 세션에서 X11 서버를 시작하는 (현재는 더 특이한) 경우입니다.

수십 년 전에는 X11 서버를 KVT 번호 7에 할당하는 것이 일반적인 관행이었습니다. 그러나 이는 이후 여러 운영 체제에서 변경되었습니다. 이것도 아니야원래이는 적어도 Linux 운영 체제 세계에서는 일반적인 관행입니다. (물론 멀티코어 가상 터미널이라는 개념은 Linux보다 먼저 나온 것이며, 실제 Unices에는 다른 관례가 있습니다.)

10년 전에 Fedora 운영 체제 제품군에서 변경되었습니다. 사람들은 화면 지우기+다시 그리기 없이 또는 X11 서버가 인계받을 준비가 될 때까지 운영 체제 부팅 초기에 시스템이 부팅 화면을 계속 표시하기를 원했기 때문입니다. X11 서버가 다른 서버에 있었습니다. KVT에서 부팅하고 강제로 스위치를 강제로 실행하기 전에 커널의 내장 터미널 에뮬레이터는 KVT 번호 1에서의 부팅으로 인해 다른 디스플레이 모드로 들어가고 나가는 깜박임을 유발합니다. 부팅 화면에서 비활성화된 KVT 번호 1에서 커널의 내장 터미널 에뮬레이터를 시작하지 않고 사용하도록 변경되었습니다.저것그런 다음 X11 서버는 KVT를 사용하여 스플래시 화면에서 GUI 로그인 화면으로 원활하게 전환합니다.

(사람들은 이 변경 사항을 systemd로 잘못 생각합니다. 사실 이는 systemd보다 수년 전에 발생했으며 Fedora가 upstart를 사용하는 기간 동안 발생했습니다. 사실 잘못된 귀인을 고려하면 여러 systemd 사람들이 몰랐다는 것은 다소 아이러니합니다. 몇 년 후 systemd가 처음 시작되었을 때 이 변경 사항이 있었고 systemd가 upstart가 수행한 작업을 복제하지 못하게 하여 TUI 로그인 세션과 X11 서버 간에 KVT 1 충돌이 발생했습니다.

따라서 일부 운영 체제에서는 X11 서버가 KVT 번호 7을 사용하고 다른 운영 체제에서는 KVT 번호 1을 사용한다는 것을 알 수 있습니다.

Debian 9와 같은 다른 시스템에서는 KVT 번호 1이 할당된 것이 이제 X11 서버가 아닌 다른 그래픽 하위 시스템이며 기본 GUI 로그인 인터페이스에 사용되며 보조 X11 서버가 할당됩니다.다른모든 GUI 로그인 세션에 사용되는 KVT. ( ⎈ Control+) ⎇ Alt+는 F1기본 GUI 로그인 화면으로 전환하고, ( ⎈ Control+) ⎇ Alt+는 F2(있는 경우 첫 번째) GUI 로그인 세션으로 전환합니다.

추가 읽기

답변2

"Fn 키가 X 세션 및 TTY에 매핑되는 방식"을 결정하는 것은 없습니다.

Ctrl+Alt+F1은 항상 콘솔 터미널 1(tty1)에 매핑됩니다.

Ctrl+Alt+F2는 항상 콘솔 터미널 2(tty2)에 매핑됩니다.

등.

지금은 무엇이 바뀌었나요?달리다그 콘솔에서. 이는 운영 체제, 구성 및 시작 방법에 따라 크게 달라집니다.

예를 들어 CentOS6에서 이 /etc/init/start-ttys.conf파일에는 다음이 포함됩니다.

env ACTIVE_CONSOLES=/dev/tty[1-6]
env X_TTY=/dev/tty1
task
script
        . /etc/sysconfig/init
        for tty in $(echo $ACTIVE_CONSOLES) ; do
                [ "$RUNLEVEL" = "5" -a "$tty" = "$X_TTY" ] && continue
                initctl start tty TTY=$tty
        done
end script

따라서 이는 "런레벨 5"에 있는 경우 tty1(Ctrl+Alt+F1)에 X 서버가 있다고 가정하고 tty 2->6에서 텍스트 콘솔을 시작한다는 의미입니다. 그러나 다른 런레벨에서는 6개 tty 모두에서 텍스트 콘솔을 시작합니다.

따라서 동일한 시스템에서 X 서버는 다른 터미널에 나타날 수 있습니다. 시스템이 런레벨 5로 시작하면 tty1(Ctrl+Alt+F1)에 있지만 런레벨 3으로 시작하고 사용자가 입력 startx하면 tty7(Ctrl+Alt+F7)에 있습니다.

즉, 운영 체제 구성 방식, 현재 실행 수준, X 서버 시작 방식에 따라 달라집니다.

관련 정보