LINUX.ORG.RU

DPI мыши в qemu evdev passthrough

 , , ,


2

4

Об этом не часто упоминается, но для шаринга клавы и мыши между хостом и гостём можно использовать не только synergy, но и встроенный в qemu так называемый evdev passthrough (начиная c версии 2.6)

qemu-system-x86_64 \
-object input-linux,id=kbd,evdev=/dev/input/event0,grab_all=yes \
-object input-linux,id=mouse,evdev=/dev/input/by-id/usb-Logitech_Gaming_Mouse_G400-event-mouse \
...

(полный скрипт в конце)

я использую вот что:
хост - qemu 2.9, linux 4.11
гость - винда 8.1

Проблема вот в чём:

в госте DPI мыши меньше, чем в хосте, причём значительно - примерно в два-три раза (я сравниваю отношение расстояния, пройденного мышью по коврику, к расстоянию, пройденному курсором мыши по экрану)

При использовании synergy, например, DPI мыши одинаковое и в хосте, и в госте. Но с synergy есть другие проблемы, поэтому не хотелось бы его использовать.

Я пробовал настраивать скорость курсора в настройках винды, но даже с максимальной скоростью получается меньше чем в хосте. Чую, дело где-то в evdev или qemu, но я не сведущ в этох вопросах.

Я пробовал гуглить настройки для qemu и evdev, но не нашёл ничего релевантного, кроме, разве что, этого патча для qemu (не вошёл в 2.9), добавляющего поддержку абсолютных координат. На сколько я понимаю, он добавляет поддержку пробрасывания эвентов от тачпадов и планшетов. Может быть можно как-нибудь сэмулировать из мыши тачпад? (судя по комментарию в патче - можно, жаль что не написали как)

А может быть мне нужно просто как-то по другому сконфигурить мышь и клаву в qemu? Cейчас они определяются как PS/2 - это дефолтное поведение.

#!/bin/bash

# Guest grabs host keyboard and mouse.
# Press L.Ctrl+R.Ctrl to switch input between host and guest.

qusb=""
# webcam
if [ "$(lsusb | grep 046d:0825 | wc -l)" == "1" ]; then
    echo "$(lsusb | grep 046d:0825)"
    qusb+=" -device usb-host,bus=ehci.0,vendorid=0x046d,productid=0x0825,port=1"
fi
# xbox gamepads
if [ "$(lsusb | grep 045e:0719 | wc -l)" == "1" ]; then
    echo "$(lsusb | grep 045e:0719)"
    qusb+=" -usbdevice host:045e:0719"
fi
# spare keyboard
if [ "$(lsusb | grep 04d9:1203 | wc -l)" == "1" ]; then
    echo "$(lsusb | grep 04d9:1203)"
    qusb+=" -usbdevice host:04d9:1203"
fi
# spare mouse
if [ "$(lsusb | grep 09da:000a | wc -l)" == "1" ]; then
    echo "$(lsusb | grep 09da:000a)"
    qusb+=" -usbdevice host:09da:000a"
fi

cp /usr/share/edk2.git/ovmf-x64/OVMF_VARS-pure-efi.fd /tmp/my_vars.fd
QEMU_PA_SAMPLES=128 QEMU_AUDIO_DRV=pa
qemu-system-x86_64 \
-serial none \
-parallel none \
-enable-kvm \
-name win8x64 \
-machine type=pc,accel=kvm \
-m 8196 \
-smp cores=4,threads=2,sockets=1 \
-cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time,kvm=off,hv_vendor_id=Nvidia43FIX \
-vga none \
-display none \
-soundhw hda \
-rtc base=localtime,clock=host,driftfix=none \
-object input-linux,id=kbd,evdev=/dev/input/event0,grab_all=yes \
-object input-linux,id=mouse,evdev=/dev/input/by-id/usb-Logitech_Gaming_Mouse_G400-event-mouse \
-device usb-ehci,id=ehci -usb $qusb \
-device vfio-pci,host=01:00.0,multifunction=on \
-device vfio-pci,host=01:00.1 \
-drive if=pflash,format=raw,readonly,file=/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd \
-drive if=pflash,format=raw,file=/tmp/my_vars.fd \
-device virtio-scsi-pci,id=scsi \
-drive file=/home/slowpoke/data/vm/win8x64.img,id=disk1,format=qcow2,if=none,cache=writeback -device scsi-hd,drive=disk1 \
-drive file=/dev/sda7,id=disk2,format=raw,if=none,cache=none -device scsi-hd,drive=disk2 \
-netdev user,id=lan0 -device virtio-net,netdev=lan0,mac=52:54:00:be:ef:00

Ответ на: комментарий от anonymous

АЧЁ тогда не пробросить usb устройство мыши.

Если пробрасывать единственную мышь, то она будет недоступна в хосте до выключения виртуалки. Если подключить вторую мышь и пробросить её, то всё работает отлично, но мне не нравится иметь две мыши - между ними неудобно переключаться, всё время хватаю не ту мышь.

dsxl ()

оказалось, что по умолчанию для мыши задаётся какое-то ускорение, а настройка mouse acceleration 1.0 в KDE5 ничего не решает.

добавил /etc/X11/xorg.conf.d/50-mouse-acceleration.conf такого содержания и всё стало хорошо

Section "InputClass"
	Identifier "My Mouse"
	Driver "libinput"
	MatchIsPointer "yes"
	Option "AccelProfile" "flat"
EndSection
(по инструкции из https://wiki.archlinux.org/index.php/Mouse_acceleration)

dsxl ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.