how*_*ven 14 qemu linux-kvm libvirt virt-manager
我已经设置了一个很好用的虚拟机,除了似乎不一致的自动调整大小功能。我让它随机工作了几次,但它也随机停止工作。它目前无法正常工作,我不确定我需要做什么才能让它可靠地工作(例如 VirtualBox 自动调整大小)。请参阅下面的我的配置。
设置
Host: Ubuntu 16.10
Guest: Ubuntu 16.04.2, et. al (I've tried with other Linux distros with similar results)
Guest: created using virt-manager
Guest: installed spice-vdagent
Guest: virt-manager > View > Scale Display > Auto resize VM with window (checked)
Run Code Online (Sandbox Code Playgroud)
香料
user@ubuntu:~$ ps aux | grep spice
root 805 0.0 0.0 30568 260 ? Ss 08:59 0:00 /usr/sbin/spice-vdagentd
user 1365 0.0 0.0 35124 2360 ? Ss 08:59 0:00 /usr/bin/spice-vdagent
user 1933 0.0 0.0 21292 1020 pts/17 S+ 09:00 0:00 grep --color=auto spice
Run Code Online (Sandbox Code Playgroud)
qxl
user@ubuntu:~$ sudo lshw -c Video
*-display
description: VGA compatible controller
product: QXL paravirtual graphic card
vendor: Red Hat, Inc.
physical id: 2
bus info: pci@0000:00:02.0
version: 04
width: 32 bits
clock: 33MHz
capabilities: vga_controller rom
configuration: driver=qxl latency=0
resources: irq:10 memory:f4000000-f7ffffff memory:f8000000-fbffffff memory:fc058000-fc059fff ioport:c040(size=32) memory:c0000-dffff
Run Code Online (Sandbox Code Playgroud)
使用 qemu/kvm 正确启用自动调整大小我缺少什么?
gsk*_*ker 11
gnome 桌面,mutter,有一些处理调整大小的热插拔代码。
如果您有任何其他桌面,例如 xfce4 或 KDE,或者像我一样运行 compiz 的裸 .xinitrc 文件,您会很困惑,但我想我终于找到了一个优雅而简单的解决方案。
xrandr --output Virtual-0 --auto 将获取大小并从 vdagent 应用它。所需要的只是一个触发器。
这是触发器以及如何处理它。
udev将调整大小事件公开为如下所示的drm设备change:
UDEV [10758.537471] change /devices/pci0000:00/0000:00:02.0 `drm/card0 (drm)
要让您的桌面对它做出反应udev,请创建一个规则并参考一个脚本来调整大小:
Rule in /etc/udev/rules.d/50-x-resize.rules:
ACTION=="change",KERNEL=="card0", SUBSYSTEM=="drm", RUN+="/usr/local/bin/x-resize"
Run Code Online (Sandbox Code Playgroud)
/usr/local/bin/x-resize 中的脚本:
#! /bin/sh
PATH=/usr/bin
export DISPLAY=:0.0
xrandr --output "$(xrandr | awk '/ connected/{print $1; exit; }')" --auto
Run Code Online (Sandbox Code Playgroud)
您可能需要根据您的情况自定义该 shell 脚本。
我发现在 debian 10 和 Ubuntu 20.04 上我什至不需要重新启动任何东西;它立即捡起来。
更新:2021-03-17
我最近发现我必须获得允许该脚本工作的权限。我把它改成这样:
#! /bin/sh
PATH=/usr/bin
desktopuser=$(/bin/ps -ef | /bin/grep -oP '^\w+ (?=.*vdagent( |$))') || exit 0
export DISPLAY=:0
export XAUTHORITY=$(eval echo "~$desktopuser")/.Xauthority
xrandr --output $(xrandr | awk '/ connected/{print $1; exit; }') --auto
Run Code Online (Sandbox Code Playgroud)
小智 5
我使用 Debian 10 和 icewm 作为来宾 VM。当 spice-vdagent 运行时,我可以手动调整屏幕大小xrandr --output Virtual-1 --auto
使用 xev 也可以观察到显示尺寸的变化:
joe@l1:~$ xev -root -event randr
RRScreenChangeNotify event, serial 18, synthetic NO, window 0x3af,
root 0x3af, timestamp 39153, config_timestamp 82137
size_index 65535, subpixel_order SubPixelUnknown
rotation RR_Rotate_0
width 1320, height 949, mwidth 348, mheight 250
RRNotify event, serial 18, synthetic NO, window 0x3af,
subtype XRROutputChangeNotifyEvent
output Virtual-1, crtc 63, mode 1320x949 (1320x949)
rotation RR_Rotate_0
connection RR_Connected, subpixel_order SubPixelUnknown
Run Code Online (Sandbox Code Playgroud)
使用它作为触发器似乎比使用 udev 更不具有侵入性,尤其是在同一 VM 中使用不同的桌面环境或窗口管理器时。
joe@l1:~$ cat /home/joe/.xsession
#!/bin/sh
if [ -x /usr/bin/spice-vdagent ] ; then
/usr/bin/spice-vdagent
/home/joe/.icewm/xrandr-loop &
fi
exec /usr/bin/icewm-session
joe@l1:~$ cat /home/joe/.icewm/xrandr-loop
#!/bin/sh
sleep 2
xrandr --output "$(xrandr | awk '/ connected/{print $1; exit; }')" --auto
xev -root -event randr | \
grep --line-buffered 'subtype XRROutputChangeNotifyEvent' | \
while read foo ; do \
xrandr --output "$(xrandr | awk '/ connected/{print $1; exit; }')" --auto
done
joe@l1:~$
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14815 次 |
| 最近记录: |