这个问题困扰了我很久,今天终于解决了,发个帖子记录一下。
问题:
用 virt-viewer 打开虚拟机之后、鼠标进入虚拟机窗口时、移动鼠标时会自动抢占键盘。
期望:
在以上三种情况下不抢占键盘,但依然可以手动使用快捷键抢占键盘。
解决方案(假设系统是bullseye
):
- 首先安装一些必需的软件包和构建依赖并下载
libspice-client-gtk
的源码:sudo apt install devscripts sudo apt build-dep libspice-client-gtk-3.0-5 apt -t bullseye source libspice-client-gtk-3.0-5
- 进入源码目录:
cd spice-gtk-0.39/
- 修改源码文件
src/spice-widget.c
:@@ -1943,7 +1943,7 @@ d->mouse_have_pointer = true; spice_gtk_session_set_mouse_has_pointer(d->gtk_session, true); - try_keyboard_grab(display); + d->keyboard_grab_released = TRUE; update_display(display); return true; @@ -1995,7 +1995,6 @@ if (d->keyboard_grab_released) memset(d->activeseq, 0, sizeof(gboolean) * d->grabseq->nkeysyms); update_keyboard_focus(display, true); - try_keyboard_grab(display); if (gtk_widget_get_realized(widget)) update_display(display); @@ -2020,7 +2019,6 @@ return true; #endif - release_keys(display); update_keyboard_focus(display, false); return true; @@ -2119,12 +2117,6 @@ d->seq_pressed = FALSE; - if (d->keyboard_grab_released && d->keyboard_have_focus) { - d->keyboard_grab_released = FALSE; - release_keys(display); - try_keyboard_grab(display); - } - transform_input(display, motion->x, motion->y, &x, &y); switch (d->mouse_mode) {
- 修改版本号并打包:
dch -n dpkg-buildpackage -b -us -uc
- 安装:
sudo dpkg -i ../libspice-client-gtk-3.0-5_0.39-1.1_amd64.deb ../libspice-client-glib-2.0-8_0.39-1.1_amd64.deb ../spice-client-glib-usb-acl-helper_0.39-1.1_amd64.deb