일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 버그
- catalina
- 3D 프린터
- asahi
- high sierra
- 컨트롤러
- IOS
- 맥북프로
- 3D프린터
- 맥
- 애플
- macos
- 아이폰
- 모하비
- mojave
- Mac
- Linux
- iOS 13
- 터치바
- 에어팟
- 업데이트
- 정식버전
- AirPods
- asahi linux
- Fedora
- beta
- Tarantula
- tevo
- sierra
- 시에라
- Today
- Total
elsa in mac
Asahi Linux에서 QEMU를 이용한 windows 11 VM 설치 및 사용하기 본문

이번 포스트에서는 Asahi Linux에서 QEMU를 이용한 windows 11 가상머신을 만들고, 사용하는 방법을 알아보도록 하겠습니다.
개인적으로는 Windows를 그렇게 사용할 일은 없는데, 아주 가끔 또 사용할 일이 있어서 완전히 필요가 없는 것은 아니고 필요할 때는 macOS로 부팅해서 parallels로 사용하면 되긴 합니다 만.. 그것도 조금은 귀찮은 일인지라.. Asahi Linux에서 사용가능하다면 좋지 않을까 하여 Try를 해 봤습니다.
아래의 전체 진행과정 중에 살짝 건너띈 부분도 있고, 사용자들이 환경이 필자와 달라 동일한 결과가 나오지 않을 수도 있습니다. 이 점은 이해하시기 바랍니다.
이 과정은 Fedora Asahi Remix 41 혹은 42에서 최신 Kernel 업데이트를 반영했다는 것을 가정으로 합니다. 굉장히 긴 포스팅이니 차분이 숙지하시고 진행하시기 바랍니다. 현재 사용 중인 커널버전은 다음과 같습니다.
> uname -r
6.13.7-401.asahi.fc42.aarch64+16k
운용 환경
우선, windows 11 가상머신을 생성하고 운영하기 위해서는 QEMU가 설치되어 있어야 합니다. 아래와 같이 설치를 합니다. (이미 설치되어 있을 수도 있습니다)
sudo dnf install qemu-img qemu-system-aarch64 seabios-bin seavgabios-bin
관련 package가 설치 되었다면.. 아래의 폴더가 존재하는지를 확인합니다.
cd /usr/share/edk2/aarch64
해당 폴더에 대략 아래와 같은 파일들이 존재해야 합니다.

특히, QEMU_EFI.fd는 반드시 있어야 합니다.
window 11 가상머신이 설치될 폴더(작업폴더)를 생성합니다. windows 11을 설치하고 사용하려면 결론적으로 대략 30GB 이상의 여유 공간이 필요 합니다. OS를 설치하는 데에만 대략 25GB 정도가 소요되므로, windows에서 이것저것 app을 설치하여 사용할 공간까지 감안 한다면 대략적으로 40GB 정도의 여유가 있으면 될 듯 합니다. 내장 SSD에 여유 공간이 부족하다면, 외장 SSD 등에서 작업을 해야 합니다. 정리하자면, 30GB로 잡을 경우 대략 10GB 정도를 windows 11에서 사용할 수 있게 되고, 40GB 정도로 디스크를 생성한다면 20GB 정도를 사용할 수 있다는 점을 참고하시기 바랍니다.
작업 폴더에 install-windows11.sh 라는 shell script 파일을 생성하고, 실행 옵션을 적용한 후, 아래의 소스코드를 넣어 줍니다.
touch install-windows11.sh
nano install-windows11.sh
# 소스코드 복사 및 저장
chmod +x install-windows11.sh
#!/bin/sh
performance_cores=$(awk '
/^processor/ { proc=$3 }
/^CPU part/ {
if ($4 == "0x023" || $4 == "0x025" || $4 == "0x029" || $4 == "0x033" || $4 == "0x035" || $4 == "0x039")
procs=procs ? procs","proc : proc
} END { print procs }
' /proc/cpuinfo)
taskset -c "$performance_cores" \
qemu-system-aarch64 \
-display sdl,gl=on \
-cpu max \
-M virt \
-enable-kvm \
-m 4G \
-smp 4 \
-bios /usr/share/edk2/aarch64/QEMU_EFI.fd \
-hda windows-11.qcow2 \
-device qemu-xhci \
-device ramfb \
-device usb-storage,drive=install \
-drive if=none,id=install,format=raw,media=cdrom,file=windows-11.iso \
-device usb-storage,drive=virtio-drivers \
-drive if=none,id=virtio-drivers,format=raw,media=cdrom,file=virtio-win.iso \
-object rng-random,filename=/dev/urandom,id=rng0 \
-device virtio-rng-pci,rng=rng0 \
-audio driver=pipewire,model=virtio \
-device usb-kbd \
-device usb-tablet \
-nic user,model=virtio-net-pci
실행 옵션이 굉장히 많은데, 각 옵션이 의미하는 바는 chat-GPT에게 물어보면 상세히 설명해 줄 것입니다.
window11 설치 이미지(ISO)는 여기에서 다운로드를 받습니다.

위의 스샷에서 보듯이, ARM64 버전을 다운로드 받으면 되는데, 다운로드 ISO 파일의 크기는 대략 4.7GB 정도 입니다. 다운로드 받은 .iso 파일의 이름을 windows-11.iso 로 변경합니다. 이것은 IoT 버전으로 우리가 알고 있는 windows 11 정식버전과는 다른버전 입니다. IoT 버전은 주로 사물 인터넷 디바이스에 최적화된 버전이기 때문에 일부 기능에 제한이 있을 수 있습니다. 참고하시기 바랍니다.
다음으로 설치할 VM disk 를 생성 합니다.
qemu-img create -f qcow2 windows-11.qcow2 40G
qcow2는 QEMU에서 사용하는 디스크 이미지 파일 형식으로 QEMU Copy-On-Write version2의 약자 입니다. 이 형식은 40GB로 설정한다고 해서 물리적인 40GB의 용량을 확정적으로 점유하는 것이 아니고, 가변적으로 확장하는 이미지 입니다. 초기에 생성으로 하면 대략 200KB 수준으로 생성되지만 디스크에 windows 11을 설치하거나 추 후 app 등을 설치하게 되면 동적으로 용량이 늘어나게 됩니다. 데이터 블럭들은 압축 저장되며, 암호화 및 스냅샷 기능등을 사용할 수 있는 형식으로 주로 KVM(Kernal-based Virtual Machine) 환경에서 널리 사용됩니다.
다음은 KVM/QEMU 가상환경에서 Guest Windows 운영 체제에 최적화된 VirtIO Driver Package인 VirtIO 이미지를 여기에서 다운로드 받습니다. 다운로드 받은 파일은 virtio-win.iso 그대로 사용합니다. (파일명이 틀리다면, virtio-win.iso 로 바꿔 줍니다.)
여기까지 진행을 했다면, 작업 폴더에는 아래와 같은 파일들이 있게 됩니다.
install-window11.sh
windows-11.qcow2
windows-11.iso
virtio-win.iso
모든 준비가 완료 되었므으로 install-windows11.sh 를 실행해 줘야 하는데, 시작하기에 앞서 Internet 연결을 끊어 줘야 합니다. 이유는 진행 과정에서 window sign-in 단계를 만나게 되는데, 이것을 건너띄기 위한 것 입니다. .
인터넷의 연결을 일시적으로 끊는 방법은 만일, 유선 Enternet을 사용하는 사용자라면, Ethernet 케이블을 잠시 빼 놓았다가 필요한 시점에 다시 꽃는 방법을 사용할 수 있고, WiFi를 이용하는 사용자라면, 터미널에서 아래의 명령을 이용하면 됩니다.
# Wifi 일시 끊기
nmcli radio wifi off
# wifi 연결 복구
nmcli radio wifi on
그럼 Internet 연결을 잠시 끊어 놓은 후, install-window11.sh를 실햄합니다. QEMU 창이 열리면서 부팅 프로세스를 진행하게 됩니다.
windows 11 설치
QEMU 창이 실행되고, 부팅이 시작되면 "Press any key to boot from CD or DVD..." 라는 문구가 나타나는데, 이 때, 빠르게 아무키나 눌러줘야 합니다.
그럼, windows 11 설치 화면이 나타나게 됩니다.










설치가 완료되면.. 화면이 검게 바뀌고 한 동안 반응이 없을 수 있는데, 화면이 검은색 이지만, 실제로 디스크에 기록하는 작업을 하는지의 여부는 ls -B -al 을 통해서 qcow2 파일의 용량이 변하는지를 확인하면 됩니다. 일정 시간 변화가 없지만 화면이 검은색으로 멈춰 있다면 강제로 종료(Ctrl-C) 후 다시 install-windows11.sh를 실행해 줘야 합니다.
그럼 계속 진행됩니다.







Network Driver에 대한 folder를 선택하면, 해당 driver를 설치하는데 약간의 시간이 들게 됩니다. 다시 기다라면, 아래와 같이 Network Driver가 설치된 것을 확인할 수 있는데, 설치에 앞서 Internet을 끊어 놨기 때문에 No Internet 으로 표시됩니다. 여기서 I don't have Internet을 클릭해 줍니다.






부팅이 완료되고 정상적으로 login이 되었다면.. 정상적인 절차로 windows 11를 종료 해 줍니다. 첫 번째 종료 과정에서 update의 나마지 과정이 실행될 수 있습니다.
해상도 제한을 극복하자
정상적으로 windows 11에 로그인을 하고 보면, 알게 되겠지만 해상도가 800x600인 VGA 모드로 실행이 되고 있다는 것을 알 수 있습니다. 물론 해상도를 변경할 수도 없습니다. 원래는 qemu를 실행할 때, virtio-gpu-pci device로 실행을 하고 그럼 해상도를 가변할 수 있는데, Asahi Linux에서는 현재까지는 이 device를 사용할 수 없습니다.
그래서, 약간이 편법을 사용해야 합니다. 바로 windows 11 Guest를 실행해 놓고, Linux Host에서 RDP(Remote Desktop Protocol) Client을 이용하여 접속하는 것 입니다. 그럼, 모니터의 전체 화면 해상도로 사용을 할 수 있습니다. 현재로써는 이 방법이 최선 입니다.
이를 위해서 몇 가지 package를 설치하고 RDP 설정을 해야 하며, client 실행 후 windows 11에 접속해야 합니다.
우선, 설치가 마무리 되었으므로, 설치가 아닌 설치된 windows 11을 실행하기 위한 실행 shell-script를 새로 하나 작성 합니다.
#!/bin/sh
performance_cores=$(awk '
/^processor/ { proc=$3 }
/^CPU part/ {
if ($4 == "0x023" || $4 == "0x025" || $4 == "0x029" || $4 == "0x033" || $4 == "0x035" || $4 == "0x039")
procs=procs ? procs","proc : proc
} END { print procs }
' /proc/cpuinfo)
taskset -c "$performance_cores" \
qemu-system-aarch64 \
-cpu max \
-M virt \
-enable-kvm \
-m 4G \
-smp 4 \
-device ramfb \
-bios /usr/share/edk2/aarch64/QEMU_EFI.fd \
-hda windows-11.qcow2 \
-device qemu-xhci \
-object rng-random,filename=/dev/urandom,id=rng0 \
-device usb-storage,drive=virtio-drivers \
-drive if=none,id=virtio-drivers,format=raw,media=cdrom,file=/Volumes/music/tiny11/virtio-win.iso \
-device virtio-rng-pci,rng=rng0 \
-audio driver=pipewire,model=virtio \
-device usb-kbd \
-device usb-tablet \
-nic user,model=virtio-net-pci
파일명은 run-windows11.sh 라고 하고 저장합니다.
run-windows11.sh를 실행하면, 여젼히 800x600 모드로 QEMU가 실행되고 로그인을 합니다. virt-io.iso 이미지를 cdrom으로 ㅅ걸어 놓았기 때문에, 부팅/로그인 후 file manager를 열면, D drive에 virt-io 디스크가 접혀 있을 것 입니다.

위의 스샷에서 보는 바와 같이 virtio-win-guest.tools 설치 앱을 실행 시켜 줍니다.

스샷은 이미 설치 후에 스샷을 찍기 위한 것이라 버튼이 uninstall 이라고 나오지만, install 버튼이라고 표시될 것입니다. 전체 설치를 해 줍니다.
다음으로, RDP(Remote Desktop Protocol)을 활성화 해야 합니다.
설정(Settings) -> Remote Desktop 을 선택합니다. 그리고, 아래 스샷과 같이 Remote Desktop을 On으로 활성화 해 줍니다.


이제 windows 11을 shutdown(종료) 해 줍니다. 그리고, 다음과 같이 몇 가지 package를 추가로 설치해 줍니다.
sudo dnf install spice-server spice-vdagent bridge-utils libvirt-daemon
sudo dnf install freerdp
package 설치가 완료 되었다면, run-windows11.sh 파일을 아래와 소스코드로 변경해 줍니다.
#!/bin/sh
performance_cores=$(awk '
/^processor/ { proc=$3 }
/^CPU part/ {
if ($4 == "0x023" || $4 == "0x025" || $4 == "0x029" || $4 == "0x033" || $4 == "0x035" || $4 == "0x039")
procs=procs ? procs","proc : proc
} END { print procs }
' /proc/cpuinfo)
taskset -c "$performance_cores" \
qemu-system-aarch64 \
-cpu max \
-M virt \
-enable-kvm \
-m 4G \
-smp 4 \
-device ramfb \
-bios /usr/share/edk2/aarch64/QEMU_EFI.fd \
-hda win11.qcow2 \
-device qemu-xhci \
-object rng-random,filename=/dev/urandom,id=rng0 \
-device virtio-rng-pci,rng=rng0 \
-audio driver=pipewire,model=virtio \
-device usb-kbd \
-device usb-tablet \
-device virtio-net-pci,netdev=net0 -netdev user,id=net0,hostfwd=tcp::3390-:3389 \
virt-io-win.iso 파일용 cdrom driver를 제거했고, rdp 연결을 위한 network 설정이 변경되었습니다.
Linux 에서 RDP clinet는 몇 가지 종류가 있는데, 개인적으로는 xfreerdp 이 외에는 확인하지 않았습니다. 참고 하시기 바랍니다. xfreerdp 는 그 이름에서 알 수 있듯이 x11용 Tool 입니다. 따라서, 사용하는 DE(Desktop Edition) 이나 WM(Window Manger)가 XWayland를 지원해야 사용할 수 있습니다. 아래는 실행 예 입니다. /v 는 동일하게 적용하면 되면, /u, /p 및 그 밖의 옵션은 적절하게 사용하면 됩니다.
xfreerdp /v:127.0.0.1:3390 /u:elsa /p:123456 /dynamic-resolution /size:1920x1080 /sound
# /v : 점속할 windows 11의 RDP 연결 주소 및 포트 번호
# /u : windows 11 로그인 ID
# /p : windows 11 로그인 패스워드
# /dynamic-resolution : xfreerdp 창의 크기를 가변함에 따라 windows11의 해상도가 바뀌게 함
# /size : 초기 화면 크기
# /size 대신에 -f를 하면 full screen(모니터 전체 해상도)으로 표시됨.
# /sound : 음성 및 오디오 지원
우선, run-windows11.sh를 실행하여 windows 11을 실행해 놓고, 이 후에 xfreerdp 를 실행하면 됩니다.

위의 스샷은 4K 모니터에서 xfreerdp를 이용하여 1920x1080으로 접속한 화면을 보여 줍니다. /dynamic-resolution 옵션을 주었기 때문에, xfreerdp의 창 크기를 가변하면 그에 따라 windows 11의 monitor 해상도가 바뀌게 됩니다.

windows의 bar에서 키보드 레이아웃을 korean으로 바꿔 놓으면, 키보드의 오른쪽 Alt 키로 한/영 전환이 됩니다. 이 하 windows 설정은 windows 안에서 해 주면 됩니다.
- - - - - - - - -
이미 Asahi Linux가 Hypervisor 를 지원하기 때문에, windows geust를 RDP로 실행했을 때, 성능은 쓸만합니다. 화면의 크기가 작을 수록 좋고, 해상도가 커지면 좀 버벅입니다. mac mini M1 기본형에서도 큰 무리는 없어보이니, 그보다 더 좋은 mac 이라면 Core수도 많고, RAM도 더 넉넉할 터이니, 좀 더 쾌적하게 사용할 수 있을 것이라 생각됩니다.
사실, Linux 자체를 쾌적하게 사용하려면 X86계열 PC나 MiniPC 같은 것을 사용하면 훨씬 안정적이고 좋을 수 있을 것입니다.
허나 미완의 Linux 배포판에서 여러 제한 사항이 있음에도 Asahi Linux를 사용하는 이유는 두 가지로 볼 수 있습니다. 첫 번째는 macOS의 옛 기기를 가지고 있는 사용자 가운데 해당 기기를 나름 활용하고 싶은 경우가 될 수 있을 것이고, 두 번째는 결국 시간이 지나면, macOS의 지원이 끊어질 것이라 그 때가 도래하면 중고로도 팔 수 없어 해당 기기는 창고에 들어가게 될 것입니다. 하지만, 생명 연장의 대안이 있고 여전히 꽤나 빠릿하게 쓸 수 있다면 그 대안을 마다할 이유가 없겠죠.
얼마전까지는 VM을 돌린다는 것을 꿈조차 꾸지 못했었는데, 현재로써 이 정도 수준에서 그나마 windows 11 VM을 사용할 수 있게 되었네요. 향 후에 QEMU 쪽이 좀 개선되어서 RDP client 사용하지 않고도 QEMU로 직접 사용할 수 있게 될 날이 오길 기다려 봅니다.
'Asahi Linux' 카테고리의 다른 글
Asahi Linux의 3월 진행 보고서가 올라 왔네요. (0) | 2025.03.21 |
---|---|
Fedora Asahi Remix 42 Beta 공개 (0) | 2025.03.19 |
Linux를 왜 쓰냐구요 ? (0) | 2025.03.16 |
Asahi Linux 개발리더 Hector Martin이 사임했군요 (0) | 2025.03.07 |
Asahi Linux, Vulkan 1.4 버전 공개 (0) | 2024.12.03 |