diff --git a/quickemu b/quickemu index 75fcbd9..fe14376 100755 --- a/quickemu +++ b/quickemu @@ -488,42 +488,41 @@ function vm_boot() { fi fi - local X_RES=1152 - local Y_RES=648 - if [ "${XDG_SESSION_TYPE}" == "x11" ]; then - local LOWEST_WIDTH="" - if [ -z "${SCREEN}" ]; then - LOWEST_WIDTH=$(xrandr --listmonitors | grep -v Monitors | cut -d' ' -f4 | cut -d'/' -f1 | sort | head -n1) - else - LOWEST_WIDTH=$(xrandr --listmonitors | grep -v Monitors | grep "^ ${SCREEN}:" | cut -d' ' -f4 | cut -d'/' -f1 | head -n1) - fi - if [ "${FULLSCREEN}" ]; then + # Determine a sane resolution for Linux guests. + if [ "${guest}" == "linux" ]; then + local X_RES=1152 + local Y_RES=648 + if [ "${XDG_SESSION_TYPE}" == "x11" ]; then + local LOWEST_WIDTH="" if [ -z "${SCREEN}" ]; then - X_RES=$(xrandr --listmonitors | grep -v Monitors | cut -d' ' -f4 | cut -d'/' -f1 | sort | head -n1) - Y_RES=$(xrandr --listmonitors | grep -v Monitors | cut -d' ' -f4 | cut -d'/' -f2 | cut -d'x' -f2 | sort | head -n1) + LOWEST_WIDTH=$(xrandr --listmonitors | grep -v Monitors | cut -d' ' -f4 | cut -d'/' -f1 | sort | head -n1) else - X_RES=$(xrandr --listmonitors | grep -v Monitors | grep "^ ${SCREEN}:" | cut -d' ' -f4 | cut -d'/' -f1 | head -n1) - Y_RES=$(xrandr --listmonitors | grep -v Monitors | grep "^ ${SCREEN}:" | cut -d' ' -f4 | cut -d'/' -f2 | cut -d'x' -f2 | head -n1) + LOWEST_WIDTH=$(xrandr --listmonitors | grep -v Monitors | grep "^ ${SCREEN}:" | cut -d' ' -f4 | cut -d'/' -f1 | head -n1) + fi + if [ "${FULLSCREEN}" ]; then + if [ -z "${SCREEN}" ]; then + X_RES=$(xrandr --listmonitors | grep -v Monitors | cut -d' ' -f4 | cut -d'/' -f1 | sort | head -n1) + Y_RES=$(xrandr --listmonitors | grep -v Monitors | cut -d' ' -f4 | cut -d'/' -f2 | cut -d'x' -f2 | sort | head -n1) + else + X_RES=$(xrandr --listmonitors | grep -v Monitors | grep "^ ${SCREEN}:" | cut -d' ' -f4 | cut -d'/' -f1 | head -n1) + Y_RES=$(xrandr --listmonitors | grep -v Monitors | grep "^ ${SCREEN}:" | cut -d' ' -f4 | cut -d'/' -f2 | cut -d'x' -f2 | head -n1) + fi + elif [ "${LOWEST_WIDTH}" -ge 3840 ]; then + X_RES=3200 + Y_RES=1800 + elif [ "${LOWEST_WIDTH}" -ge 2560 ]; then + X_RES=2048 + Y_RES=1152 + elif [ "${LOWEST_WIDTH}" -ge 1920 ]; then + X_RES=1664 + Y_RES=936 + elif [ "${LOWEST_WIDTH}" -ge 1280 ]; then + X_RES=1152 + Y_RES=648 fi - elif [ "${LOWEST_WIDTH}" -ge 3840 ]; then - X_RES=3200 - Y_RES=1800 - elif [ "${LOWEST_WIDTH}" -ge 2560 ]; then - X_RES=2048 - Y_RES=1152 - elif [ "${LOWEST_WIDTH}" -ge 1920 ]; then - X_RES=1664 - Y_RES=936 - elif [ "${LOWEST_WIDTH}" -ge 1280 ]; then - X_RES=1152 - Y_RES=648 fi fi - if [ "${guest_os}" != "macos" ]; then - echo " - Screen: ${X_RES}x${Y_RES}" - fi - # https://www.kraxel.org/blog/2019/09/display-devices-in-qemu/ if [ "${guest_os}" == "linux" ]; then case ${OUTPUT} in @@ -555,8 +554,8 @@ function vm_boot() { # Build the video configuration VIDEO="-device ${DISPLAY_DEVICE}" - # Do not try and coerce the display resolution for macOS - if [ "${guest_os}" != "macos" ]; then + # Try and coerce the display resolution for Linux guests only. + if [ "${guest_os}" == "linux" ]; then VIDEO="${VIDEO},xres=${X_RES},yres=${Y_RES}" fi