모니터를 분리하면 데비안 리눅스 서버가 응답하지 않는 경우, GRUB의 그래픽 터미널과 하드웨어·펌웨어 사이의 호환 문제를 의심할 수 있다. /etc/default/grub에 GRUB_TERMINAL=console을 설정하고 update-grub로 반영하며, nomodeset을 추가해 모니터와 키보드 없이 부팅하는 헤드리스 서버를 구성하고 확인하는 방법을 설명한다.
모니터 케이블을 뽑으면 부팅이 되지 않는 데비안 리눅스?
테스트용 데비안 리눅스 서버가 필요해 작업실에서 놀고 있던 서버에 데비안 리눅스를 설치하고 장비실의 랙에 장착했는데, SSH 접속이 되지 않았다.
서버를 다시 꺼내 와 작업실에서 전원을 켜 보았다. 하지만 아무런 문제가 없었다. 그런데 희한하게도 랙에만 장착하면 서버에 접속이 되지 않았다.
수차례 재설치해 보아도 동일한 현상이 반복되면서 랙 아래에 수맥이 흐르고 있나?라는 생각까지 하고 있던 와중, 본 필자의 머릿속에 문득 하나의 차이가 떠올랐다.
랙에는 모니터가 없지!
작업실에서는 초기 설치 작업과 상태를 확인하기 위해 모니터를 연결해 두었지만, 랙에는 모니터가 없었다는 것을 기억해 낸 본 필자는 확인을 위해 작업실로 다시 가져온 서버의 전원을 끄고 모니터 케이블을 분리한 뒤 다시 전원을 넣어 보았다. 그리고 랙에 장착했을 때와 동일한 현상이 그대로 재현되었다.
서버는 켜진 것처럼 보였지만, 외부에서는 아무런 응답도 없었다. 모니터를 다시 연결하자 언제 그랬냐는 듯 정상적으로 부팅이 진행되었다. 즉, 이 서버는 모니터가 없어 부팅 프로세스를 끝내지 못하고 있었다.
모니터가 없다는 이유만으로 동작을 멈춘다면 의심해 볼 부분은 많지 않다. 부팅 과정 어딘가에서 모니터 없으니 배 째라를 시전하고 있는 존재가 있다는 것이다.
문제의 원인: GRUB의 그래픽 출력 초기화
결론부터 말하면, 본 필자의 서버에서 부팅을 멈추게 만든 원인은 GRUB의 그래픽 출력 초기화 과정과 관련이 있었다. 모니터를 연결하면 정상적으로 부팅되지만 연결하지 않으면 다음 단계로 넘어가지 못했으며, GRUB의 그래픽 출력 설정을 변경하자 문제가 해결되었다.
GRUB은 부팅 메뉴를 그래픽 화면으로 표시하기 위해 gfxterm을 사용할 수 있다. gfxterm이 활성화되면서 그래픽 장치를 초기화하고, 이 과정에서 그래픽 장치와 연결된 모니터의 데이터를 읽어 사용할 수 있는 화면 모드와 해상도를 확인한다. 보통은 모니터가 연결되어 있지 않거나 EDID를 읽지 못하더라도 기본 화면 모드를 사용하거나 그래픽 출력을 생략한 채 부팅을 계속하는 게 정상이다.
하지만 본 필자의 경우 모니터만 뽑으면 부팅이 멈췄다. 비록 정확한 이유를 알 수 없지만, 모니터의 정보를 그래픽 장치에 제공해 주는 EDID를 읽어오는 과정에서 뭔가 문제가 생겼고, 이 문제로 인해 GRUB이 부팅을 멈췄다는 것을 예상할 수 있었다.
해결 방법: GRUB을 텍스트 콘솔로 강제하기
GRUB이 배 째라!를 시전하고 있다는 것을 알았으니, 해결 방법은 간단하다. 배를 째 주면 된다. GRUB에게 모니터 없으니까 그래픽 출력 쓰지 말고 텍스트 모드로 동작하라고 말해 주며 달래 주면 된다.
Step 1. GRUB 기본 설정 파일 수정
터미널을 열고 다음 명령을 이용해 GRUB 설정 파일을 편집한다. GRUB 설정은 잘못 건드릴 경우 부팅이 아예 불가능해진다. 변경 전에 파일을 백업해 두는 것이 안전하다.
sudo nano /etc/default/grub파일을 열면 여러 주석과 설정 항목이 보이는데, 그중 그래픽 터미널과 관련된 부분을 확인한다.
...(전략)...
# Uncomment to disable graphical terminal
#GRUB_TERMINAL=console // 이 라인의 #을 제거
...(생략)...
GRUB_TERMINAL은 GRUB이 사용할 입출력 터미널을 지정하는 항목으로 기본적으로 주석 처리되어 있다. 이 줄의 주석을 제거하거나, 해당 항목이 없다면 파일에 아래와 같이 직접 추가해 주어도 된다.
GRUB_TERMINAL=console
이렇게 설정하면 GRUB이 gfxterm 대신 시스템의 기본 콘솔을 사용한다. 즉, 서버면 서버답게 콘솔로만 출력해라라고 설정해 주는 것이다.
GRUB의 그래픽 터미널 때문에 발생한 문제는 이 설정만으로 충분하다. 하지만 그래픽 장치의 초기화 과정에 뭔가 문제가 발생할 수 있다는 것을 경험했기 때문에 그래픽 장치 자체를 사용하지 않도록 추가적인 설정을 해 준다.
GRUB_CMDLINE_LINUX_DEFAULT="nomodeset"
이 설정은 리눅스 커널이 부팅될 때 그래픽카드 드라이버의 KMS 기능을 비활성화하고, 기본 비디오 모드(VESA/UEFI 프레임버퍼)를 사용하도록 고정한다. 따라서 혹시나 추가적으로 발생할 수 있는 그래픽 관련 문제를 미연에 방지할 수 있다.
다만 이 설정은 그래픽 장치 자체를 완전히 비활성화하거나 그래픽 드라이버가 절대로 로드되지 않도록 만드는 것은 아니다. 대신 그래픽 가속, 화면 해상도 변경 및 일부 GPU 기능이 제한될 수 있다. 하드웨어 가속이나 GPU를 이용한 트랜스코딩이 필요한 시스템이라면 nomodeset을 상시 적용하지 말고, 해당 기능이 정상적으로 동작하는지 먼저 확인해야 한다.
또한 nomodeset은 리눅스 커널에 전달되는 옵션이므로 커널이 실행되기 전인 GRUB 단계의 멈춤 현상에는 직접적인 영향을 주지 않는다. 이 단계의 문제는 앞에서 설정한 GRUB_TERMINAL=console이 담당하고, nomodeset은 커널이 시작된 이후의 그래픽 초기화 문제를 예방하기 위한 추가 설정이다.
Step 2. GRUB 설정 반영
설정을 저장한 뒤 변경 사항을 실제 부팅 설정에 반영한다. 데비안 계열 리눅스에서는 /etc/default/grub을 수정한 후 update-grub 명령을 실행해 /boot/grub/grub.cfg를 다시 생성해야 변경된 설정이 적용된다.
debian@debian:~$ sudo update-grub Generating grub configuration file ... Found linux image: /boot/vmlinuz-6.1.0-37-amd64 Found initrd image: /boot/initrd.img-6.1.0-37-amd64 Found linux image: /boot/vmlinuz-6.1.0-32-amd64 Found initrd image: /boot/initrd.img-6.1.0-32-amd64 Found linux image: /boot/vmlinuz-6.1.0-30-amd64 Found initrd image: /boot/initrd.img-6.1.0-30-amd64 Found linux image: /boot/vmlinuz-6.1.0-29-amd64 Found initrd image: /boot/initrd.img-6.1.0-29-amd64 Warning: os-prober will not be executed to detect other bootable partitions. Systems on them will not be added to the GRUB boot configuration. Check GRUB_DISABLE_OS_PROBER documentation entry. Adding boot menu entry for UEFI Firmware Settings ... done
마지막에 done이 표시되면 GRUB 설정 파일 생성이 완료된 것이다. 위 예시의 os-prober 메시지는 다른 운영체제의 자동 검색이 비활성화되어 있다는 경고이며, 이번 설정 변경이 실패했다는 의미는 아니다.
update-grub 실행이 오류와 함께 중단된다면 /etc/default/grub의 문법과 수정한 내용을 먼저 확인한다. 설정을 바로잡기 어렵다면 백업해 둔 파일로 원상 복구한 후 다시 update-grub를 실행한다.
Step 3. 모니터 없이 재부팅
이제 모니터와 키보드를 완전히 분리한 상태에서 서버를 재부팅해 본다.
sudo reboot정상적으로 설정이 적용되었다면 디스플레이 출력 단자에 아무것도 연결하지 않은 상태에서도 부팅이 끝까지 진행된다. 잠시 기다린 뒤 SSH로 접속해 시스템과 네트워크 서비스가 정상적으로 시작되었는지 확인한다. 모니터를 연결해 두었다면 이제까지 보던 화면과 달리 왠지 원초적인 느낌의 글자들이 평소보다 큰 크기로 출력되는 것을 볼 수 있다.
원격 접속까지 정상적으로 이루어진다면 헤드리스 부팅 설정이 완료된 것이다. GRUB이 불러도 대답 없을 모니터를 순순히 포기한 셈이다. 이것으로 리눅스 시스템은 모니터와 키보드 없이도 부팅하고 동작할 수 있는 상태가 되었다.
결론
대부분의 서버용 하드웨어는 모니터와 키보드가 없어도 부팅할 수 있도록 설계되어 있어 이런 문제를 일으키지 않는다. 그러나 특정 그래픽 칩셋이나 펌웨어를 사용했거나, 일반 데스크탑용 하드웨어를 사용하는 경우에는 비슷한 상황을 만날 수 있다.
2026년 9월, 이 글을 다시 작성하는 과정에서 당시 사용했던 하드웨어가 무엇이었는지 기억나지 않아 아쉬움이 많이 남았다. 분명 특정 하드웨어에서만 나타나는 현상이었을 것이고, 조금 더 깊게 들여다볼 가치가 있는 문제라 생각하지만, 당시의 정확한 장비와 환경을 적어 둔 것이 없다. (사실 원인 찾느라 급급했겠지…)
KVM(키보드·비디오·마우스)은 PC의 가장 기본적인 입출력 수단이다. 대부분의 시스템은 이 장치들이 없어도 부팅할 수 있지만, 일부 하드웨어의 조합에서는 장치가 연결되지 않은 상태가 예상하지 못한 문제를 일으킬 수 있다. (과거 윈도우 XP에 모니터 꽂았다가 블루스크린 본 적도 있었다. ㅎ)
본 필자의 사례처럼 장비의 위치를 옮겼을 뿐인데 서버가 죽은 것처럼 보인다면 설정과 하드웨어만 의심하지 말고, 부팅 과정이 끝까지 정상적으로 진행되고 있는지도 확인해 보는 것이 좋다.
서버 용도로 쓸 놈이라면 설정을 마치고 랙에 장착하기 전에 모니터와 키보드 및 마우스를 모두 뽑고 부팅해 보는 것만으로도 불필요한 시간 낭비를 막을 수 있다. 수맥을 의심하는 것은 그 이후에 해도 충분하다.
FAQ
- 헤드리스 서버란 무엇인가?
- 헤드리스 서버는 모니터와 키보드 및 마우스를 연결하지 않고 운영하는 서버다. 일반적으로 SSH, 웹 관리 화면 또는 원격 관리 장치를 이용해 설정하고 관리한다.
- 모니터를 분리하면 리눅스 서버가 부팅되지 않는 이유는?
- 일반적인 리눅스 서버는 모니터가 없어도 부팅할 수 있다. 그러나 일부 그래픽 장치와 펌웨어 및 부트로더의 조합에서는 그래픽 출력 초기화 과정에서 호환 문제가 발생할 수 있다. 모니터 연결 여부에 따라 증상이 달라진다면 GRUB의 그래픽 터미널 설정과 펌웨어 설정을 함께 확인해 볼 수 있다.
- GRUB은 왜 그래픽 출력을 초기화하는가?
- GRUB은 부팅 메뉴와 배경 이미지 및 글꼴 등을 화면에 표시하기 위해
gfxterm이라는 그래픽 터미널을 사용할 수 있다. 이 과정에서 사용할 수 있는 화면 모드와 해상도를 확인한다. 이는 운영체제의 GPU 드라이버를 구동하는 것과는 다르며, GRUB이 펌웨어와 자체 비디오 기능을 이용해 부팅 메뉴를 출력하는 과정이다. GRUB_TERMINAL=console은 어떤 설정인가?GRUB_TERMINAL=console은 GRUB의 입출력 터미널을 시스템의 기본 콘솔로 지정하는 설정이다. 이를 적용하면 GRUB은gfxterm을 사용하지 않으므로 그래픽 터미널 초기화 과정에서 발생하는 문제를 피하는 데 도움이 될 수 있다.nomodeset의 의미는?nomodeset은 커널이 실행된 이후 그래픽 드라이버의 KMS 기능을 제한하는 별도의 설정이다. 불필요한 오류가 발생할 가능성을 줄이기 위해 추가하는 것을 권장한다.- 리눅스 시스템의 그래픽 기능을 완전히 비활성화할 수 있는가?
- 모든 시스템에 공통으로 적용할 수 있는 하나의 설정은 없다.
GRUB_TERMINAL=console은 GRUB의 그래픽 터미널을 중지하고,nomodeset은 커널의 KMS를 제한할 뿐 그래픽 장치 자체를 끄지는 않는다. 그래픽 장치를 완전히 비활성화하려면 해당 기능을 지원하는 BIOS 또는 UEFI에서 장치를 끄거나 커널 모듈의 로드를 제한해야 한다. 다만 이 경우 원격 콘솔, GPU 연산 및 하드웨어 트랜스코딩 같은 기능도 사용할 수 없거나 제한될 수 있다. - 그래픽 데스크탑 환경만 실행되지 않게 하는 방법은?
- 그래픽 장치는 유지하면서 데스크탑 환경만 자동으로 실행되지 않게 하려면 기본 부팅 대상을
multi-user.target으로 변경할 수 있다. sudo systemctl set-default multi-user.target을 실행하면 텍스트 기반의 다중 사용자 환경으로 부팅된다. 이 설정은 GRUB의 그래픽 출력이나 GPU 장치 자체를 비활성화하는 것은 아니다. /etc/default/grub을 수정한 뒤 무엇을 해야 하는가?- 데비안 계열 리눅스에서는 sudo update-grub를 실행해 변경 내용을
/boot/grub/grub.cfg에 반영해야 한다. 명령이 오류 없이 완료된 다음 시스템을 재부팅해야 새로운 설정이 적용된다. - 모니터 없는 헤드리스 부팅이 정상적으로 설정되었는지 확인하는 방법은?
- 모니터와 키보드를 분리한 상태로 시스템을 재부팅한 뒤 SSH로 접속해 본다. 원격 접속이 가능하고 필요한 네트워크 서비스가 정상적으로 실행된다면 헤드리스 부팅이 완료된 것이다. 첫 시험은 설정에 문제가 생겼을 때 모니터를 다시 연결해 복구할 수 있는 장소에서 진행하는 것이 안전하다.
갱신 내역
- — 최초 게시
- — 수정 및 주소 이전 (https://www.EQMaker.kr/)