게스트 운영 체제에 대한 패스스루 PS/2 키보드

게스트 운영 체제에 대한 패스스루 PS/2 키보드

Windows 운영 체제는 가상 머신(ubuntu, libvirt, qemu-kvm)에서 실행됩니다. 내 콘솔 하드웨어에 PS/2 키보드가 있습니다. 성능 저하 없이 이를 게스트 OS에 전달할 수 있는 방법이 있습니까(아마도 PS/2 키보드의 키 매핑을 사용하여 USB 키보드를 에뮬레이트하는 것 등). Spice 서버(libvirt GUI "Virtual Machine Manager"에서)를 사용해 보았지만 키를 누를 때 매우 짜증나는 지연이 발생합니다.

답변1

virsh edit <vm-name>먼저 virt-manager GUI를 통해서는 구성 XML을 수정하는 데 를 사용해야 합니다 .

상위 <domain>태그를 확인하세요. 다음과 같아야 합니다.

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>

유형이 kvm이 아닌 경우 잘못된 항공편에 탑승한 것입니다. 새 VM으로 다시 시작하세요. xmlns:qemu 속성이 없으면 추가하십시오.

섹션 이 이미 있는 경우 <qemu:commandline>다음 두 줄을 추가합니다.

<qemu:arg value='-object'/>
<qemu:arg value='input-linux,id=kbd,evdev=/dev/input/eventN,grab_all=on,repeat=on'/>

그렇지 않은 경우 태그 아래에 만들고 <domain>이 두 태그를 포함하십시오.

<devices>또한 이 섹션 에 추가해야 하는 다음 XML을 사용하여 클라이언트에서 키보드 장치를 생성해야 합니다 .

<serial type='dev'>
<source path='/dev/input/eventN'/>
<target port='0'/>
</serial>

여기에 정의된 두 번째 qemu:arg와 소스 코드 경로가 eventN정의되었습니다. N을 키보드의 입력 장치 번호로 바꿔야 합니다. 대상 포트를 변경하지 말고 소스 경로만 변경하십시오.

내 키보드 장치는 2이지만 귀하의 키보드 장치는 0이거나 다른 숫자일 수 있습니다. 어떤 키보드 장치를 가지고 있는지 알아보려면 dmesg | grep input해당 키보드 장치를 찾으세요. 내 말은:

input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input2

여전히 /dev/input/eventN 경로를 사용하고 싶습니다. 이를 통해 N에 사용할 올바른 번호가 무엇인지 알 수 있습니다. evdev와 함께 X를 사용하는 경우(아마도 그럴 것임) X 로그 파일에서 이 정보를 찾을 수도 있습니다. 참고: 호스트 하드웨어를 재구성하면 장치 번호가 변경될 수 있습니다.

게스트에서 키보드를 사용하면 호스트가 더 이상 키보드를 인식하지 못합니다. 호스트를 제어하려면 다음을 수행할 수 있습니다.

  • 손님을 종료하거나
  • USB를 통해 다른 키보드를 연결하거나
  • SSH를 통해 로그인하거나
  • 직렬 콘솔을 사용하십시오.

다음 링크에서 대부분의 정보를 얻었습니다.

https://www.reddit.com/r/VFIO/comments/5hja2k/how_do_you_pass_through_a_ps2_keyboard/

답변2

Debian Bullseye에 대한 다른 답변의 단계를 시도하고 일부 지침을 업데이트하고 싶었습니다. journalctl -b그런 다음 검색을 사용하는 것이 좋습니다 input.*keyboard. 내 시스템의 가동 시간이 향상되었으며 dmesg에 더 이상 이러한 줄이 표시되지 않습니다. 내가 찾은 것 :

kernel: input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/in>
systemd-logind[2716]: Watching system buttons on /dev/input/event0 (AT Translated Set 2 keyboard)

이를 통해 현재 내 키보드가 event0을 사용하고 있음을 알고 있으므로 ls -l /dev/input/by-pathas 를 통해 찾을 수 있습니다 /dev/input/by-path/platform-i8042-serio-0-event-kbd.

libvirt 버전 7.4.0부터 도메인 XML이 지원됩니다 <input type='evdev'>. Bullseye-backports에서 libvirt를 업데이트하여 버전 8을 얻었습니다. 따라서 VM XML에 추가해야 할 사항은 다음과 같습니다.

<input type="evdev">
  <source dev="/dev/input/by-path/platform-i8042-serio-0-event-kbd" grab="all" grabToggle="ctrl-ctrl" repeat="on"/>
</input>

grabToggle="ctrl-ctrl"왼쪽 Ctrl + 오른쪽 Ctrl을 통해 게스트와 호스트 간에 키보드를 전환할 수 있는 추가 기능에 유의하세요 .

내가 이걸 어디서 얻었어?아치리눅스 위키. 여기에는 "PS/2에서 Virtio 입력으로 전환"하여 지연을 더욱 줄이기 위한 제안도 포함되어 있지만 아직 시도하지 않았습니다.

이 접근 방식의 이점은 키보드를 사용하기 위해 Qemu에 대한 추가 ACL/권한을 구성할 필요가 없다는 것입니다. 내가 그 방법을 시도했을 때 이로 인해 문제가 발생했습니다 qemu:commandline.

관련 정보