RHEL6.x 기반 모니터가 장착되지 않는 환경에서 Xserver 실행하기

RHEL6.x 기반 모니터가 장착되지 않는 환경에서 Xserver 실행하기

작성자 : 클루닉스 / 서진우

전산실에 위치한 서버에서 VirtualGL 등을 사용할 경우 서버의 GPU 단자에 모니터가 연결되지 않는 경우가 많다.
기존적으로 모니터가 장착되어 있지 않으면 Linux에서 init 5 모드로 부팅이 않되는 경우가 많다.
특히 Nvidia 그래픽 카드가 장착된 경우라면 더더욱 이런 증세가 많다.

이때 모니터가 장착되지 않은 환경에서 Xserver (Xorg :0) 를 실행하기 위해서 기존에 –use-display-device=none
옵션을 많이 사용했다.

RHEL6.4 부터 기존과 같은 방식으로 처리할 경우 Xserver 가 실행되지 않는 증세가 발생했다.
이 문서는 기존에 RHEL6.3 이하에서 –use-display-device=none 를 사용하는 방법과 RHEL6.4 이상에서
–use-display-device=none 기능을 사용하는 방법에 대해 설명한다.

– RHEL6.3 이하

Since GPU node on EOS has no physical monitor attached to it, ‘–use-display-device=none’ option need to be used to configure X Window

$nvidia-xconfig -a –virtual=1024×768 –use-display-device=none
$/usr/bin/X :0 -ac -audit 0 -tst -auth /var/gdm/:0.Xauth -nolisten tcp vt7&
$cat ~/.vnc/xstartup
#!/bin/sh

# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80×24+10+10 -ls -title “$VNCDESKTOP Desktop” &
twm &

GridCenter 상의 개발시스템의 desktop 기능에서 3D 를 구현하기 위해서는 반드시 해당 시스템에
모니터 연결 환경이 구성되어야 하고, init 5 모드로 부팅을 해야한다.

서버 환경이여서 모니터가 기본적으로 연결되지 않는 경우가 있는데, 이경우 TurboVNC에서 OpenGL
관련 SW를 실행하면 can’t DISPLAY : 0 비슷한 에러가 발생하며 SW가 동작하지 않는다.

문제를 해결하는 좋은 방법이 있다.

우선 실제 NVIDIA 그래픽 카드가 장착된 경우..
/etc/inittab -> 3 으로 변경

nvidia-xconfig -a –virtual=1024×768 –use-display-device=none

vi /etc/rc.d/rc.local
/usr/bin/X :0 -ac -audit 0 -tst -auth /var/gdm/:0.Xauth -nolisten tcp vt7&

그래픽 카드가 없는 경우에는
/etc/inittab -> 3 으로 변경
vi /etc/rc.d/rc.local
/usr/bin/X :0 -ac -audit 0 -tst -auth /var/gdm/:0.Xauth -nolisten tcp vt7&

수행해 주면 된다.

————

리눅스 시스템의 부팅 모드를 init 5 모드로 부팅을 해야할 경우, 기본적으로 콘솔에 모니터가 장착되어 있
어야 한다. 하지만 서버용도로 사용할 경우 콘솔에 모니터가 연결 안되어 있는 환경도 존재
한다. 이때 원격으로 3D 관련 라이브러리를 이용하는 SW 실행 시 문제가 발생할 수 있다.

아래는 모니터를 연결하지 않고, init 5 모드로 정상 부팅 시키는 방법이다.

/etc/X11/xorg.conf 파일의 screen 설정 세션에서

Option “ConnectedMonitor” “CRT-0”
Option “UseDisplayDevice” “CRT-0”

옵션을 추가하면 된다.

실제 init 5 로 부팅할 경우 일반적인 부팅프로세스를 진행한 후, X 로딩 시 그래픽 카드가 모니터의 EDID>값을 자동으로 받아와서 모니터 환경과 해상도 등을 자동으로 적용하게 된다.

이때 모니터가 장착되지 않은 환경에서는 모니터의 EDID 값 호출 단계에서 실패하여 정상적으로 X 를 시작
할수 없다.

이때 위 두 옵션을 추가하면, xorg.conf 설정 파일 자체에서 CRT-0 로 모니터가 장착되었다고 강제로
정의시켜 이런 문제를 해결할 수 있다.
아래는 전체 screen 설정 예이다.

Section “Screen”
Identifier “Screen0”
Device “Device0”
Monitor “Monitor0”
DefaultDepth 24
Option “TwinView” “0”
Option “metamodes” “1280x1024_60 +0+0”
Option “ConnectedMonitor” “CRT-0”
Option “UseDisplayDevice” “CRT-0”
SubSection “Display”
Depth 24
Modes “1280×1024”
EndSubSection
EndSection

– RHEL6.4 이상

우선 grub.conf 의 kernel 옵션에 nomodeset 을 추가한다.
그렇지 않으면 Nvidia GPU 장착시 bootloader(grub) menu 를 선택한 후 splash 화면이
나타나지 않는다.

# vi /boot/grub/menu.lst

kernel /boot/vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=7e0e29b0-0c3f-488b-8b86-3764abf4491a rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=ko rhgb crashkernel=auto quiet rd_NO_LVM rd_NO_DM rhgb quiet nomodeset

init 3 로 부팅을 한 후 NVIDIA Driver 를 설치한다. (NVIDIA-Linux-x86_64-352.21.run)

# nvidia-xconfig –query-gpu-info
—————————————————————————
Number of GPUs: 1

GPU #0:
Name : Tesla K20m
UUID : GPU-ad6ee1ac-074f-6950-ae49-8d84ad7600df
PCI BusID : PCI:3:0:0

Number of Display Devices: 0
—————————————————————————-

여기서 PCI BusID 값을 확인한다.
RHEL6.3 이전과의 차이는 xorg.conf 의 Device 세션에 BusID 값을 포함해야 한다.
그렇지 않으면 Option “UseDisplayDevice” “none” 이 적용되지 않고, Monitor 가
장착되어 있지 않을 경우 no found screen 에러가 발생한다.

# nvidia-xconfig -a –virtual=1024×768 –busid=PCI:3:0:0 –use-display-device=none

/etc/inittab -> 3 으로 변경
# vi /etc/rc.d/rc.local
/usr/bin/X :0 -ac -audit 0 -tst -auth /var/gdm/:0.Xauth -nolisten tcp vt7&

# vi /etc/X11/xorg.conf
—————————————————————————-
Section “ServerLayout”
Identifier “Layout0”
Screen 0 “Screen0”
InputDevice “Keyboard0” “CoreKeyboard”
InputDevice “Mouse0” “CorePointer”
EndSection

Section “Files”
EndSection

#Section “Module”
# Load “extmod”
# Load “glx”
# Load “record”
#EndSection
Section “InputDevice”
# generated from default
Identifier “Mouse0”
Driver “mouse”
Option “Protocol” “auto”
Option “Device” “/dev/input/mice”
Option “Emulate3Buttons” “no”
Option “ZAxisMapping” “4 5”
EndSection

Section “InputDevice”
# generated from default
Identifier “Keyboard0”
Driver “kbd”
EndSection

Section “Monitor”
# Identifier “Headless”
Identifier “Monitor0”
VendorName “Unknown”
ModelName “Unknown”
HorizSync 28.0 – 33.0
VertRefresh 43.0 – 72.0
Option “DPMS”
EndSection

Section “Device”
Identifier “Device0”
Driver “nvidia”
VendorName “NVIDIA Corporation”
BoardName “Quadro K2000”
BusID “PCI:0:5:0”
EndSection

Section “Screen”
Identifier “Screen0”
Device “Device0”
# Monitor “Headless”
Monitor “Monitor0”
DefaultDepth 24
# Option “UseEdid” “False”
# Option “MetaModes” “nvidia-auto-select @2560×1400”
Option “UseDisplayDevice” “none”
SubSection “Display”
Virtual 1024 768
Depth 24
EndSubSection
EndSection
—————————————————————————-

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

2 Responses

  1. 2022년 6월 20일

    3gradation

  2. 2023년 1월 27일

    1contractors