COMMANDE UTILISÉE DANS LA VIDÉO
On commence par installer les trois paquets essentiels...
- sudo apt update && sudo apt install qemu-guest-agent spice-vdagent spice-webdavd
Création règle "udev" qui sera déclenchée lors du redimensionnement de la fenêtre "virt-viewer"...
- sudo nano /etc/udev/rules.d/50-x-resize.rules
Ajout de la ligne suivante au fichier de règles vide...
- ACTION=="change",KERNEL=="card0", SUBSYSTEM=="drm", RUN+="/usr/local/bin/x-resize"
Création du script qui sera exécuté lorsque la règle sera déclenchée...
- sudo nano /usr/local/bin/x-resize
Ajout du contenu suivant au fichier (script) vide...
#!/bin/bash
Bash required
Should be run as root and saved to /usr/local/bin/x-resize
Requies udev rule: /etc/udev/rules.d/50-x-resize.rules
udev rule content: ACTION=="change",KERNEL=="card0", SUBSYSTEM=="drm", RUN+="/usr/local/bin/x-resize"
Make sure auto-resize is enabled in virt-viewer/spicy
Credit for Finding Sessions as Root: https://unix.stackexchange.com/questions/117083/how-to-get-the-list-of-all-active-x-sessions-and-owners-of-them
Credit for Resizing via udev: https://superuser.com/questions/1183834/no-auto-resize-with-spice-and-virt-manager
Ensure Log Directory Exists
LOG_DIR=/var/log/autores; if [ ! -d $LOG_DIR ]; then mkdir $LOG_DIR; fi LOG_FILE=${LOG_DIR}/autores.log
Function to find User Sessions & Resize their display
function x_resize() { declare -A disps usrs usrs=() disps=() for i in $(users);do [[ $i = root ]] && continue # skip root 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; }') echo "Session User: $session_user" | tee -a $LOG_FILE; echo "Session Display: $session_display" | tee -a $LOG_FILE; echo "Session Output: $session_output" | tee -a $LOG_FILE; sudo -u "$session_user" PATH=/usr/bin DISPLAY="$session_display" xrandr --output "$session_output" --auto | tee -a $LOG_FILE; done } echo "Resize Event: $(date)" | tee -a $LOG_FILE x_resize
Rendre le fichier (script) exécutable...
- sudo chmod +x /usr/local/bin/x-resize
BONUS
Depuis la réalisation de cette vidéo, un dépôt GitHub existe...
- https://github.com/anyblabla/spice-resize