![QEMU 게스트에서 프레임버퍼 비활성화](https://linux55.com/image/105829/QEMU%20%EA%B2%8C%EC%8A%A4%ED%8A%B8%EC%97%90%EC%84%9C%20%ED%94%84%EB%A0%88%EC%9E%84%EB%B2%84%ED%8D%BC%20%EB%B9%84%ED%99%9C%EC%84%B1%ED%99%94.png)
QEMU 옵션 -display curses
및 -nographic -device sga
(직렬 그래픽 어댑터)는 그래픽 환경 외부에서 QEMU를 실행하는 데 매우 편리합니다.
(생각해 보세요: 원격 SSH 연결, 구조 시스템 등)
그러나 두 모드 모두 프레임 버퍼 텍스트 모드와 함께 사용할 수 없습니다. 일부 Linux 배포판(예: Fedora 25)의 새로운 기본값은 부팅 중 어느 시점에서 프레임 버퍼 텍스트 모드가 활성화되어 -display curses
QEMU가 "1024x768 그래픽 모드"만 표시하는 것으로 보입니다 . SGA의 경우 아무것도 인쇄되지 않습니다.
그래서 내 질문은: 커널(그리고 나머지 부팅 부분)이 구식 초기 텍스트 모드를 사용하도록 어떻게 강제할 수 있습니까?
부록
nomodeset
커널 매개변수를 추가하는 것과 커널 매개변수를 제거하는 것에 rhgb
는 차이가 없습니다 .
가장 편리한 것은 게스트에 대한 수정이 필요하지 않기 때문에 커널이 가장 기본적인 텍스트 모드만 감지하도록 하는 일부 QEMU 구성입니다.
내 환경에서는 직렬 콘솔 설정(예: console=ttyS0
게스트에 커널 매개변수 추가)이 작동하지만 Gnome 터미널에서 일부 이스케이프 시퀀스 문제가 관찰되었습니다. 또한 이는 이미 프레임 버퍼(Fedora 25 서버 ISO 등)를 사용하는 부트로더에는 도움이 되지 않으며 클라이언트 수정이 필요합니다.
Fedora 게스트 예
Fedora 25를 게스트로 사용하면 initrd가 실행되는 동안 프레임 버퍼로 전환되며 일부 로그 메시지(직렬 콘솔에서):
[ 1.485115] Console: switching to colour frame buffer device 128x48
[ 1.493184] bochs-drm 0000:00:02.0: fb0: bochsdrmfb frame buffer device
[ 1.502492] [drm] Initialized bochs-drm 1.0.0 20130925 for 0000:00:02.0 on minor 0
nofb
이러한 메시지는 vga=normal
및 (게스트) 커널 매개변수와 함께 표시됩니다.
답변1
2017년부터 qemu는 더 이상 x86-64용 텍스트 전용 그래픽 카드 에뮬레이션을 제공하지 않으며, 이로 인해 게스트는 텍스트 모드로 유지됩니다.
현재 배포판(예: Fedora 25)과 함께 제공되는 커널 모듈은 bochs_drm
기본적으로 프레임 버퍼를 활성화합니다(예: 1024x768 그래픽 모드). 대조적으로, 예를 들어 Debian 8(안정적)은 이 모듈을 제공하지 않으므로 전체 부팅 중에 구식 텍스트 모드로 유지됩니다.
따라서 -display curses
터미널에서 qemu를 실행할 때 직렬 콘솔을 안전 장치로 활성화하는 것이 합리적입니다(예: 다음을 사용).
console=tty0 console=ttyS0
또는
console=tty0 console=ttyS0,115200
GRUB_CMDLINE_LINUX
(고객의 커널 매개변수, 기본 속도는 9600입니다. 두 설정 모두 Fedora /etc/sysconfig/grub
에 할당하고 실행하거나 설정을 grub2-mkconfig -o /etc/grub2.cfg
유지 함으로써 qemu와 함께 작동합니다 grub2-mkconfig -o /etc/grub2-efi.cfg
.)
다른 방법이 작동하지 않으면 Alt+3을 통해 qemu 내에서 직렬 콘솔로 전환할 수 있습니다.
두 번째 조치는 모듈 매개변수를 통해 프레임 버퍼를 비활성화하는 것입니다 bochs_drm
. 즉, 게스트 커널 명령줄에서 설정하여 프레임 버퍼를 비활성화하는 것입니다.
bochs_drm.fbdev=off
블랙리스트 대안
또는 모듈을 블랙리스트에 추가할 수 있습니다. bochs_drm
예를 들어 다음과 같이 구성을 생성하면 됩니다./etc/modprobe.d
bochs.conf
blacklist bochs_drm
initramfs도 bochs_drm 모듈을 로드할 수 없으므로 이 구성이 initramfs에 포함되어 있는지 확인해야 합니다. Fedora와 같은 배포판에서는 다음을 통해 이를 달성합니다.
# dracut -f
UEFI 부팅
UEFI 펌웨어(예 -bios /usr/share/edk2/ovmf/OVMF_CODE.fd
: )로 qemu를 부팅할 때 bochs fbdev를 비활성화하는 것만으로는 충분하지 않습니다. 그런 다음 bochs 프레임 버퍼로 전환하려고 하면 Fedora 시작이 중단됩니다. bochs_drm을 블랙리스트에 올리면 이 문제가 해결되지만 그것만으로는 충분하지 않습니다. 단지 640 x 480 그래픽 모드를 얻을 뿐이며 커널은 이를 텍스트 모드로 재설정하지 않습니다. 따라서 UEFI 게스트의 경우 직렬 콘솔 경로를 사용해야 합니다.
직렬 콘솔
직렬 콘솔을 함께 사용하면 -display curses
저주가 vt110/vt220 터미널 에뮬레이션을 방해하므로 최적이 아닌 사용자 환경이 생성됩니다. 따라서 긴급 상황에만 대처할 수 있습니다.
더 나은 해결책은 디스플레이를 완전히 끄고 직렬/모니터 결합 Qemu 모드를 사용하는 것입니다.
-display none -serial mon:stdio -echr 2
( Ctrl+는 b h도움말을 표시하고 Ctrl+는 b c모드 간 전환)
Fedora 27에서 Grub2는 기본적으로 직렬 콘솔 지원으로 구성됩니다. 따라서 직렬 터미널을 통해서도 제어할 수 있습니다.
로그인 후 호출되면 resize
터미널 형상이 업데이트되어 결과 터미널이 로컬 터미널과 마찬가지로 작동합니다.
다중 사용자 대상
게스트 이미지에 그래픽 로그인 관리자 설치 프로그램이 있으면 의미가 있습니다.비활성화:
# systemctl set-default multi-user.target
그렇지 않으면 시작할 때마다 첫 번째 가상 콘솔로 전환해야 합니다(예: 저주 디스플레이를 사용할 때 Alt+2 또는 Alt+3).