virt-viewerをフルスクリーンにしても、VMの画面サイズはそのままなので、ディスプレイのサイズを手動で変更しなければならない。
VirtualBox Guest Additionsみたいに、spice-vdagent
を入れておけばどうにかなる訳でも無く。
一応、解像度の変更はVM側に通知しているようなので、それを読み取って画面サイズを更新すれば良い。
spice display auto resize
とかで調べてみたら、udevを使った解決策があった。
追記
2023年2月13日 こっちのスクリプトの方が良さそうです。
udevルールの作成
# vim /etc/udev/rules.d/50-spice-resize.rules ACTION=="change",KERNEL=="card0",SUBSYSTEM=="drm",RUN+="/usr/local/bin/spice-resize"
ディスプレイの変更を検出すると、/usr/local/bin/spice-resize
を実行するudevルール。
画面サイズを変更するスクリプト
/usr/local/bin/spice-resize
ファイルを作成し、下記のスクリプトを貼り付ける。
ログの出力など余計な部分を省いたコード
#!/bin/bash function x_resize() { declare -A disps usrs usrs=() disps=() for i in $(users);do [[ $i = root ]] && continue usrs[$i]=1 done for u in "${!usrs[@]}"; do for i in $(sudo ps e -u "$u" | sed -rn 's/.* DISPLAY=(:[0-9]*).*/\1/p');do disps[$i]=$u done done for d in "${!disps[@]}";do session_user="${disps[$d]}" session_display="$d" session_output=$(sudo -u "$session_user" PATH=/usr/bin DISPLAY="$session_display" xrandr | awk '/ connected/{print $1; exit; }') sudo -u "$session_user" PATH=/usr/bin DISPLAY="$session_display" xrandr --output "$session_output" --auto done } x_resize
spice-resize
に実行権限を与える
# chmod +x /usr/local/bin/spice-resize