Black Screen Linux VM
- Dominant language
- Swift
- Stars
- 35.5k
- Forks
- 1.8k
- Avg merge
- 5d 5h
- Merged PRs (30d)
- 7
Description
So, I was installing Fedora Desktop on my iPad (specs below) and I was getting a black screen after starting the VM (this is before anything has been installed, the iso was attached to the VM though). So, I started with virtio-gpu-gl-device and then tried virtio-gpu-gl-pci I also tried virtio-ramfb-gl i also tried virtio-ramfb. I also tried adding a serial device. I even tried the Fedora 38 prebuilt and still the same thing. I installed UTM using Altstore.
* UTM Version: 4.7.5
* OS Version: iPadOS 27 (beta 2)
* Device Model: iPad Air M4 11-inch
* Is it jailbroken (name jailbreak used)? NO
* How did you install UTM? Altstore
The log below is on virtio-gpu-gl-pci:
Launching: qemu-system-aarch64 -L /var/mobile/Containers/Data/Application/E99FF72C-AE9D-43D9-A486-E3A8A648575D/Library/Caches/qemu -S -spice unix=on,addr=16D508EA-8D51-4D8F-A4E8-2DBC7255D438.spice,disable-ticketing=on,image-compression=off,playback-compression=off,streaming-video=off,gl=on -chardev spiceport,name=org.qemu.monitor.qmp.0,id=org.qemu.monitor.qmp -mon chardev=org.qemu.monitor.qmp,mode=control -nodefaults -vga none -device virtio-net-pci,mac=6A:59:45:03:73:4C,netdev=net0 -netdev user,id=net0 -device virtio-gpu-gl-pci -cpu cortex-a72 -smp cpus=3,sockets=1,cores=3,threads=1 -machine virt,virtualization=on -accel tcg,tb-size=1024,split-wx=on -drive if=pflash,format=raw,unit=0,file.filename=/var/mobile/Containers/Data/Application/E99FF72C-AE9D-43D9-A486-E3A8A648575D/Library/Caches/qemu/edk2-aarch64-code.fd,file.locking=off,readonly=on -drive "if=pflash,unit=1,file.filename=/private/var/mobile/Containers/Shared/AppGroup/9E82B0BE-7C3D-4A55-8957-0154FBDA7DAC/File Provider Storage/Downloads/fedora-38-arm64-utm/Fedora 38.utm/Data/efi_vars.fd" -m 4096 -audiodev spice,id=audio0 -device intel-hda -device hda-duplex,audiodev=audio0 -device nec-usb-xhci,id=usb-bus -device usb-tablet,bus=usb-bus.0 -device usb-mouse,bus=usb-bus.0 -device usb-kbd,bus=usb-bus.0 -device qemu-xhci,id=usb-controller-0 -chardev spicevmc,name=usbredir,id=usbredirchardev0 -device usb-redir,chardev=usbredirchardev0,id=usbredirdev0,bus=usb-controller-0.0 -chardev spicevmc,name=usbredir,id=usbredirchardev1 -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1,bus=usb-controller-0.0 -chardev spicevmc,name=usbredir,id=usbredirchardev2 -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2,bus=usb-controller-0.0 -device usb-storage,drive=drive540359EB-9642-4E25-9F4D-2F9D596B65BC,removable=true,bootindex=0,bus=usb-bus.0 -drive if=none,media=cdrom,id=drive540359EB-9642-4E25-9F4D-2F9D596B65BC,readonly=on -device virtio-blk-pci,drive=driveB70AB2C7-74FC-4E97-B4F0-0430B3C8C5CD,serial=B70AB2C774FC4E97B4F0,bootindex=1 -drive "if=none,media=disk,id=driveB70AB2C7-74FC-4E97-B4F0-0430B3C8C5CD,file.filename=/private/var/mobile/Containers/Shared/AppGroup/9E82B0BE-7C3D-4A55-8957-0154FBDA7DAC/File Provider Storage/Downloads/fedora-38-arm64-utm/Fedora 38.utm/Data/B70AB2C7-74FC-4E97-B4F0-0430B3C8C5CD.qcow2,discard=unmap,detect-zeroes=unmap" -device virtio-serial -device virtserialport,chardev=org.qemu.guest_agent,name=org.qemu.guest_agent.0 -chardev spiceport,name=org.qemu.guest_agent.0,id=org.qemu.guest_agent -device virtserialport,chardev=vdagent,name=com.redhat.spice.0 -chardev spicevmc,id=vdagent,debug=0,name=vdagent -name "Fedora 38" -uuid 16D508EA-8D51-4D8F-A4E8-2DBC7255D438 -device virtio-rng-pci
Loading qemu-aarch64-softmmu.framework/qemu-aarch64-softmmu
UI Error: Could not connect: Connection refusedRetrying interface connection...2026-08-24 17:14:41.912 UTM[692:13165] [QEMULogging(0x107cb8b50)] Retrying interface connection...
2026-08-24 07:14:41,914 WARNING GSpice-main-1:0: could not set sockopt TCP_NODELAY: Operation not supported on socket
2026-08-24 17:14:41.914 UTM[692:13317] [QEMULogging(0x107cb8b50)] 2026-08-24 07:14:41,914 WARNING GSpice-main-1:0: could not set sockopt TCP_NODELAY: Operation not supported on socket
2026-08-24 07:14:42,016 MESSAGE (null)-main channel: opened
2026-08-24 17:14:42.016 UTM[692:13317] [QEMULogging(0x107cb8b50)] 2026-08-24 07:14:42,016 MESSAGE (null)-main channel: opened
2026-08-24 07:14:42,018 WARNING GSpice-display-2:0: could not set sockopt TCP_NODELAY: Operation not supported on socket
2026-08-24 17:14:42.018 UTM[692:13317] [QEMULogging(0x107cb8b50)] 2026-08-24 07:14:42,018 WARNING GSpice-display-2:0: could not set sockopt TCP_NODELAY: Operation not supported on socket
2026-08-24 07:14:42,018 WARNING GSpice-cursor-4:0: could not set sockopt TCP_NODELAY: Operation not supported on socket
2026-08-24 17:14:42.018 UTM[692:13317] [QEMULogging(0x107cb8b50)] 2026-08-24 07:14:42,018 WARNING GSpice-cursor-4:0: could not set sockopt TCP_NODELAY: Operation not supported on socket
2026-08-24 07:14:42,019 WARNING GSpice-usbredir-9:2: could not set sockopt TCP_NODELAY: Operation not supported on socket
2026-08-24 17:14:42.019 UTM[692:13317] [QEMULogging(0x107cb8b50)] 2026-08-24 07:14:42,019 WARNING GSpice-usbredir-9:2: could not set sockopt TCP_NODELAY: Operation not supported on socket
2026-08-24 07:14:42,019 WARNING GSpice-usbredir-9:1: could not set sockopt TCP_NODELAY: Operation not supported on socket
2026-08-24 17:14:42.019 UTM[692:13317] [QEMULogging(0x107cb8b50)] 2026-08-24 07:14:42,019 WARNING GSpice-usbredir-9:1: could not set sockopt TCP_NODELAY: Operation not supported on socket
2026-08-24 07:14:42,019 WARNING GSpice-usbredir-9:0: could not set sockopt TCP_NODELAY: Operation not supported on socket
2026-08-24 17:14:42.019 UTM[692:13317] [QEMULogging(0x107cb8b50)] 2026-08-24 07:14:42,019 WARNING GSpice-usbredir-9:0: could not set sockopt TCP_NODELAY: Operation not supported on socket
2026-08-24 07:14:42,019 WARNING GSpice-playback-5:0: could not set sockopt TCP_NODELAY: Operation not supported on socket
2026-08-24 17:14:42.019 UTM[692:13317] [QEMULogging(0x107cb8b50)] 2026-08-24 07:14:42,019 WARNING GSpice-playback-5:0: could not set sockopt TCP_NODELAY: Operation not supported on socket
2026-08-24 07:14:42,019 WARNING GSpice-record-6:0: could not set sockopt TCP_NODELAY: Operation not supported on socket
2026-08-24 17:14:42.019 UTM[692:13317] [QEMULogging(0x107cb8b50)] 2026-08-24 07:14:42,019 WARNING GSpice-record-6:0: could not set sockopt TCP_NODELAY: Operation not supported on socket
2026-08-24 07:14:42,020 WARNING GSpice-port-10:1: could not set sockopt TCP_NODELAY: Operation not supported on socket
2026-08-24 17:14:42.020 UTM[692:13317] [QEMULogging(0x107cb8b50)] 2026-08-24 07:14:42,020 WARNING GSpice-port-10:1: could not set sockopt TCP_NODELAY: Operation not supported on socket
2026-08-24 07:14:42,020 WARNING GSpice-port-10:0: could not set sockopt TCP_NODELAY: Operation not supported on socket
2026-08-24 17:14:42.020 UTM[692:13317] [QEMULogging(0x107cb8b50)] 2026-08-24 07:14:42,020 WARNING GSpice-port-10:0: could not set sockopt TCP_NODELAY: Operation not supported on socket
2026-08-24 07:14:42,020 WARNING GSpice-inputs-3:0: could not set sockopt TCP_NODELAY: Operation not supported on socket
2026-08-24 17:14:42.020 UTM[692:13317] [QEMULogging(0x107cb8b50)] 2026-08-24 07:14:42,020 WARNING GSpice-inputs-3:0: could not set sockopt TCP_NODELAY: Operation not supported on socket
2026-08-24 07:14:42,113 WARNING Spice-playback:0 (0x11d26cba0): setsockopt failed, Operation not supported on socket
2026-08-24 17:14:42.113 UTM[692:13326] [QEMULogging(0x107cb8b50)] 2026-08-24 07:14:42,113 WARNING Spice-playback:0 (0x11d26cba0): setsockopt failed, Operation not supported on socket
2026-08-24 07:14:42,114 WARNING Spice-record:0 (0x11d26cc40): setsockopt failed, Operation not supported on socket
2026-08-24 17:14:42.114 UTM[692:13326] [QEMULogging(0x107cb8b50)] 2026-08-24 07:14:42,114 WARNING Spice-record:0 (0x11d26cc40): setsockopt failed, Operation not supported on socket
Monitor port created2026-08-24 17:14:42.117 UTM[692:13146] [QEMULogging(0x107cb8b50)] Monitor port created
Debug JSON recieved <- {
QMP = {
capabilities = (
);
version = {
package = "";
qemu = {
major = 10;
micro = 2;
minor = 0;
};
};
};
}
2026-08-24 17:14:42.117 UTM[692:13297] [QEMULogging(0x107cb8b50)] Debug JSON recieved <- {
QMP = {
capabilities = (
);
version = {
package = "";
qemu = {
major = 10;
micro = 2;
minor = 0;
};
};
};
}
Got QMP handshake: {
capabilities = (
);
version = {
package = "";
qemu = {
major = 10;
micro = 2;
minor = 0;
};
};
}
qemuQmpDidConnectDebug JSON send -> {
execute = "qmp_capabilities";
}
2026-08-24 17:14:42.117 UTM[692:13297] [QEMULogging(0x107cb8b50)] Got QMP handshake: {
capabilities = (
);
version = {
package = "";
qemu = {
major = 10;
micro = 2;
minor = 0;
};
};
}
2026-08-24 17:14:42.117 UTM[692:13297] [QEMULogging(0x107cb8b50)] qemuQmpDidConnect
2026-08-24 17:14:42.117 UTM[692:13297] [QEMULogging(0x107cb8b50)] Debug JSON send -> {
execute = "qmp_capabilities";
}
Debug JSON recieved <- {
return = {
};
}
2026-08-24 17:14:42.120 UTM[692:13168] [QEMULogging(0x107cb8b50)] Debug JSON recieved <- {
return = {
};
}
Debug JSON send -> {
arguments = {
device = "drive540359EB-9642-4E25-9F4D-2F9D596B65BC";
force = 0;
};
execute = eject;
}
2026-08-24 17:14:42.120 UTM[692:13297] [QEMULogging(0x107cb8b50)] Debug JSON send -> {
arguments = {
device = "drive540359EB-9642-4E25-9F4D-2F9D596B65BC";
force = 0;
};
execute = eject;
}
Debug JSON recieved <- {
data = {
device = "drive540359EB-9642-4E25-9F4D-2F9D596B65BC";
id = "/machine/peripheral-anon/device[7]/scsi.0/legacy[0]";
"tray-open" = 1;
};
event = "DEVICE_TRAY_MOVED";
timestamp = {
microseconds = 120661;
seconds = 1787555682;
};
}
2026-08-24 17:14:42.120 UTM[692:13165] [QEMULogging(0x107cb8b50)] Debug JSON recieved <- {
data = {
device = "drive540359EB-9642-4E25-9F4D-2F9D596B65BC";
id = "/machine/peripheral-anon/device[7]/scsi.0/legacy[0]";
"tray-open" = 1;
};
event = "DEVICE_TRAY_MOVED";
timestamp = {
microseconds = 120661;
seconds = 1787555682;
};
}
Debug JSON recieved <- {
return = {
};
}
2026-08-24 17:14:42.120 UTM[692:13165] [QEMULogging(0x107cb8b50)] Debug JSON recieved <- {
return = {
};
}
Debug JSON send -> {
execute = cont;
}
2026-08-24 17:14:42.120 UTM[692:13297] [QEMULogging(0x107cb8b50)] Debug JSON send -> {
execute = cont;
}
Debug JSON recieved <- {
event = RESUME;
timestamp = {
microseconds = 121134;
seconds = 1787555682;
};
}
2026-08-24 17:14:42.121 UTM[692:13162] [QEMULogging(0x107cb8b50)] Debug JSON recieved <- {
event = RESUME;
timestamp = {
microseconds = 121134;
seconds = 1787555682;
};
}
Debug JSON recieved <- {
return = {
};
}
qemuHasResumed2026-08-24 17:14:42.121 UTM[692:13162] [QEMULogging(0x107cb8b50)] Debug JSON recieved <- {
return = {
};
}
2026-08-24 17:14:42.121 UTM[692:13168] [QEMULogging(0x107cb8b50)] qemuHasResumed
DISPLAY: vmDisplay.displaySize changed
2026-08-24 17:14:42.138 UTM[692:13146] [QEMULogging(0x107cb8b50)] DISPLAY: vmDisplay.displaySize changed
DISPLAY: request window resize to (0.000000, 0.000000)
2026-08-24 17:14:43.181 UTM[692:13146] [QEMULogging(0x107cb8b50)] DISPLAY: request window resize to (0.000000, 0.000000)
Debug JSON send -> {
arguments = {
"command-line" = "delvm suspend";
};
execute = "human-monitor-command";
}
2026-08-24 17:15:21.899 UTM[692:13297] [QEMULogging(0x107cb8b50)] Debug JSON send -> {
arguments = {
"command-line" = "delvm suspend";
};
execute = "human-monitor-command";
}
Debug JSON recieved <- {
return = "";
}
2026-08-24 17:15:21.899 UTM[692:13168] [QEMULogging(0x107cb8b50)] Debug JSON recieved <- {
return = "";
}
Debug JSON send -> {
execute = quit;
}
2026-08-24 17:15:21.900 UTM[692:13297] [QEMULogging(0x107cb8b50)] Debug JSON send -> {
execute = quit;
}
Debug JSON recieved <- {
data = {
guest = 0;
reason = "host-qmp-quit";
};
event = SHUTDOWN;
timestamp = {
microseconds = 900141;
seconds = 1787555721;
};
}
2026-08-24 17:15:21.900 UTM[692:13162] [QEMULogging(0x107cb8b50)] Debug JSON recieved <- {
data = {
guest = 0;
reason = "host-qmp-quit";
};
event = SHUTDOWN;
timestamp = {
microseconds = 900141;
seconds = 1787555721;
};
}
qemuWillQuit2026-08-24 17:15:21.900 UTM[692:13162] [QEMULogging(0x107cb8b50)] qemuWillQuit
2026-08-24T17:15:24+1000 info com.utmapp.UTM : Entering background
2026-08-24 17:15:24.427 UTM[692:13146] [QEMULogging(0x107cb8b50)] 2026-08-24T17:15:24+1000 info com.utmapp.UTM : Entering background
2026-08-24T17:15:24+1000 info com.utmapp.UTM : [UTM] Entering background
Contributor guide
Research direction
Reproduce the Fedora 38 ARM VM on the listed iPad configuration with the reported virtio display devices, then inspect the launch log around the display resize request to (0, 0). Done means identifying and resolving the cause of the black screen so the guest display renders; no source file or test is named in the report.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- ios, linux, swift
- Domain
- mobile-dev, operating-systems
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100