2008년 8월 31일 일요일

Nvidia 그래픽 카드 설정

사용하고 있는 그래픽 카드는 스파클 지포스 7300GT Ultra2 256MB 가온, 모니터는PCBANK 240W입니다.

  • 리눅스에서 모니터 문제로 xorg.conf를 아래와 같이 바꾸었습니다.

    Section "Monitor"
    ...
    ModeLine "1920x1200" 154.0 1920 1968 2000 2100 1200 1203 1209 1222 -hsync +vsync
    Gamma 0.9
    ...
    EndSection


    Section "Screen"
    ...
    Option "NoLogo" "True"
    Option "ModeValidation" "NoDFPNativeResolutionCheck"
    SubSection "Display"
    Depth 24
    Modes "1920x1200" "1920x1080" "1600x1200" "1280x1024" "1280x768" "1024x768" "800x600"
    EndSubSection
    EndSection

  • DPI 문제
    xorg는 displaysize로 DPI를 정합니다.
    본인의 모니터는 PBM-240W로 제원상 수평 518.4 mm이며, 수직 324.0 mm으로,
    xorg.conf의 Section "Monitor" 에 다음과 같이 기록합니다.

    Section "Monitor"
    ...
    DisplaySize 518.4 324.0
    ...
    EndSection

    그러나Nvidia社의 드라이버를 설치하여 사용하면 DisplaySize 옵션에 추가로 DPI 옵션을 사용할 수 있습니다.
    Section "Device"
    Driver "nvidia"
    Option "UseEdidDpi" "false"
    Option "DPI" "96 x 96"
    ...
    EndSection

    참고로 DPI 옵션과 DisplaySize옵션을 같이 사용하면 DisplaySize는 무시됩니다.

    본인의 모니터에서 Nvidia社의 드라이버를 설치하고 위의 DisplaySize, DPI 옵션을 설정하고 X윈도우를 띄우면 다음과 같이 보입니다.
    $ xdpyinfo | grep -B1 dot
    dimensions: 1920x1200 pixels (508x318 millimeters)
    resolution: 96x96 dots per inch
    실제 모니터 크기가 다르게 인식됩니다. 실제 픽셀 크기는 0.270 mm X 0.270 mm인데...

    참고로 DisplaySize 옵션만 적용하면 다음과 같으며,
    $ xdpyinfo | grep -B1 dot
    dimensions: 1920x1200 pixels (813x455 millimeters)
    resolution: 60x67 dots per inch
    X윈도우(그놈)에서 DPI 해상도를 96으로 맞추면 제대로 보이나 로그인창의 폰트가 작게 보여 불편합니다.
    Option "DPI" "96 x 96" 해야 로그인창의 폰트가 맞게 보입니다.

  • 최근의 xorg-xserver는 type1 font module 대신에 freetype을 사용하므로
    # nvidia-xconfig가 실행되고나서 xorg.conf에 type1 module설정이 남아있으면
    주석 처리 # 합니다.

    # Load "type1"


데비안
  • 저장소에 커널에 맞게 만들어진 nvidia 모듈이 있으면 간단히 설치하고,
    없으면 module-assistant로 직접 소스 패키지로 모듈을 만들어 설치하거나,
    Nvidia 회사의 설치파일을 이용합니다.

    먼저 /etc/apt/sources.list에 contrib non-free 추가후 update

    1. 배포판 커널을 사용중이고, 저장소에 커널에 맞게 만들어진 nvidia 모듈이 있으면 다음과 같이 합니다.

      # uname -r
      # apt-get install nvidia-kernel-$(uname -r)
      # apt-get install nvidia-glx nvidia-settings nvidia-xconfig
      # nvidia-xconfig

    2. 소스패키지로 설치후 모듈을 직접 만들어 설치

      module-assistant 설치
      # apt-get install module-assistant

      # m-a update
      # m-a prepare

      설치된 gcc와 커널을 컴파일한 gcc 버전이 맞는지 확인
      # cat /proc/version
      # ls -l /usr/bin/gcc
      gcc 버전이 맞지 않으면 다음의 방법과 같이 바꾸어 줍니다.
      # ln -sf /usr/bin/gcc-4.1 /usr/bin/gcc

      # apt-get install nvidia-kernel-common nvidia-settings nvidia-xconfig

      # m-a autoinstall nvidia
      이제 nvidia-glx 설치
      # apt-get install nvidia-glx

      # nvidia-xconfig

    3. Nvidia회사의 드라이버를 직접 설치시

      설치전에 xorg가 xserver-xorg-video-vesa나 nv를 사용하여야 합니다.

      설치 전에 다음을 확인합니다.
      * development tools like make and gcc are installed
      * the linux-headers package matching the installed Linux kernel is installed
      * the pkg-config and xserver-xorg-dev packages are installed
      * the nvidia-glx package has been uninstalled with the --purge option and the file /etc/init.d/nvidia-glx does not exist.
      추가로 libc6-dev가 필요하므로 설치되어있는지 확인합니다.
      따라서,
      설치 전에 다음이 설치되어 있어야 합니다.
      커널에 맞는 linux-headers-$(uname -r) make gcc pkg-config xserver-xorg-dev libc6-dev
      다음과 같이 설치합니다.
      # apt-get install linux-headers-2.6.18-6-k7 make gcc pkg-config xserver-xorg-dev libc6-dev

      • (참고)
        module-assistant 설치후 m-a prepare하면 gcc와 커널에 맞는 linux-headers가 설치됩니다. 추가로 build-essential도 설치됩니다.
        # apt-get install module-assistant
        # m-a update
        # m-a prepare
        이제 나머지 필요한 패키지 설치
        # apt-get install pkg-config xserver-xorg-dev

      gcc확인
      $ cat /proc/version 및 ls /usr/bin/gcc -l 하여 커널을 컴파일한 gcc와 설정되어 있는 버전이 같은지 확인합니다.
      다르면 다음과 같이 맞게 고치거나
      # mv /usr/bin/gcc /usr/bin/gcc.backup.00
      # ln -s /usr/bin/gcc-4.1 /usr/bin/gcc
      또는, #export CC=gcc-XXX하여 XXX에 알맞은 gcc 버전을 기록합니다.

      X윈도우를 빠져나온 후 (또는 Ctrl + Alt + F1)
      # /etc/init.d/gdm stop
      # sh NVIDIA-Linux-x86-100.14.19-pkg1.run
      # /etc/init.d/gdm start

      참고)
      • nvidia 드라이버를 제거하려면 nvidia-installer --uninstall합니다.

      • xorg.conf를 만들려면 nvidia-config합니다.

      • 설치후 man nvidia-xconfig하면 자세한 설정방법을 알 수 있습니다.


  • 그래픽카드에 모니터를 2개 모두 연결하니 주 모니터인 LCD가 보이지 않아 다음과 같이 하였습니다.

    Section "ServerLayout"
    Screen 0 "Default Screen" 0 0
    Screen 1 "Screen-2nd" Rightof "Default Screen"
    EndSection


    Section "Monitor"
    Identifier "PCBANK.240W"
    Gamma 0.9
    DisplaySize 518.4 324.0
    # ModeLine "1920x1200" 154.0 1920 1968 2000 2104 1200 1203 1209 1222 +hsync -vsync
    ModeLine "1920x1200" 154.0 1920 1968 2000 2100 1200 1203 1209 1222 -hsync +vsync
    EndSection


    Section "Monitor"
    Identifier "42LB5DR"
    ModeLine "1024x768" 65.0 1024 1048 1184 1344 768 771 777 806 +hsync +vsync
    EndSection


    Section "Device"
    Identifier "7300GT.Ultra2.256MB"
    Driver "nvidia"
    Option "UseDisplayDevice" "DFP"
    Option "UseEdidDpi" "false"
    Option "DPI" "96 x 96"
    Screen 0
    EndSection


    Section "Device"
    Identifier "7300GT.Ultra2.256MB-2nd"
    Driver "nvidia"
    Option "UseDisplayDevice" "CRT"
    Screen 1
    EndSection


    Section "Screen"
    Identifier "Default Screen"
    Device "7300GT.Ultra2.256MB"
    Monitor "PCBANK.240W"
    DefaultDepth 24
    Option "NoLogo" "True"
    Option "ModeValidation" "NoDFPNativeResolutionCheck"
    # Option "TwinView" "True"
    # Option "MetaModes" "nvidia-auto-select, nvidia-auto-select"
    SubSection "Display"
    Depth 24
    Modes "1920x1200" "1920x1080" "1600x1200" "1280x1024" "1280x768" "1024x768" "800x600"
    EndSubSection
    EndSection


    Section "Screen"
    Identifier "Screen-2nd"
    Device "7300GT.Ultra2.256MB-2nd"
    Monitor "42LB5DR"
    DefaultDepth 24
    Option "NoLogo" "True"
    Option "ModeValidation" "NoMaxPClkCheck,NoEdidModes,NoVirtualSizeCheck"
    SubSection "Display"
    Depth 24
    Modes "1024x768"
    EndSubSection
    EndSection

  • Nvidia社의 드라이버를 설치하면 사용중인 커널에 맞게 모듈이 설치됩니다. 따라서 새로 설치된 커널로 부팅하여 X윈도우가 안되면 Nvidia社의 드라이버를 다시 설치하면 됩니다.

  • 또한 원래 Nvidia社의 드라이버를 설치하면 xorg의 버전에 맞게 설치됩니다. 따라서 사용중에 xorg가 업그레이드 되면서 /usr/lib/xorg/modules/extensions/libglx.so 파일이 변경될 수 있습니다. 원래 Nvidia社의 드라이버를 설치하면 libglx.so.xx(버전)이 설치되고 libglx.so는 단지 이를 가리키는 symbolic link파일입니다. xorg가 업그레이드되면서 이 symbolic link파일이 xorg의 libglx.so로 바뀌게 됩니다.

    Nvidia社의 드라이버를 다시 설치할 때 libglx.so가 symbolic link파일이 아니라는 에러가 보여도 그냥 설치하면 새 symbolic link파일로 설치 됩니다.

    사용중에 xserver-xorg-code의 업그레이드로 문제가 있으면
    문제가 있으면 다음과 같이 합니다.
    # /etc/init.d/gdm stop
    # cd /usr/lib/xorg/modules/extensions
    # rm libglx.so
    # ln -s libglx.so.1.0.9746 libglx.so
    # etc/init.d/gdm start

페도라
  • Nvidia 드라이버 설치는 Livna Repository에서설치하였습니다.

    # rpm -ivh http://rpm.livna.org/livna-release-8.rpm
    # rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-livna
    # yum install kmod-nvidia

    kmod-nvidia 설치시에 알맞은 새 커널이 설치되기도 합니다.
  • 모니터는 LCD로 DVI로 연결하여 사용중인데, 여분의 모니터를 추가로 그래픽카드의 RGB에 연결하면 RGB가 첫번 째 모니터로 인식되어 다음과 같이 바꾸어 DVI에 연결된 모니터가 첫번째 모니터가 되게 바꾸었습니다.


    Section "ServerLayout"
    Identifier "Default Layout"
    Screen 0 "Screen0" 0 0
    Screen 1 "Screen-2nd" Rightof "Screen0"
    InputDevice "Keyboard0" "CoreKeyboard"
    EndSection


    Section "Monitor"
    Identifier "PCBANK.24W"
    HorizSync 28.0 - 51.0
    VertRefresh 43.0 - 60.0
    Gamma 0.9
    DisplaySize 518.4 324.0
    ModeLine "1920x1200" 154.0 1920 1968 2000 2100 1200 1203 1209 1222 -hsync +vsync
    Option "DPMS"
    EndSection


    Section "Monitor"
    Identifier "42LB5DR"
    ModeLine "1024x768" 65.0 1024 1048 1184 1344 768 771 777 806 +hsync +vsync
    Option "DPMS"
    EndSection


    Section "Device"
    Identifier "Videocard0"
    Driver "nvidia"
    Screen 0
    BusID "PCI:5:0:0"
    Option "UseDisplayDevice" "DFP"
    Option "UseEdidDpi" "false"
    Option "DPI" "96 x 96"
    Option "AddARGBGLXVisuals" "True"
    EndSection


    Section "Device"
    Identifier "7300GT.Ultra2.256MB-2nd"
    Driver "nvidia"
    Option "UseDisplayDevice" "CRT"
    Screen 1
    BusID "PCI:5:0:0"
    EndSection


    Section "Screen"
    Identifier "Screen0"
    Device "Videocard0"
    Monitor "PCBANK.24W"
    DefaultDepth 24
    Option "NoLogo" "True"
    Option "ModeValidation" "NoDFPNativeResolutionCheck"
    SubSection "Display"
    Viewport 0 0
    Depth 24
    Modes "1920x1200" "1280x768" "1024x768" "800x600"
    EndSubSection
    EndSection


    Section "Screen"
    Identifier "Screen-2nd"
    Device "7300GT.Ultra2.256MB-2nd"
    Monitor "42LB5DR"
    DefaultDepth 24
    Option "NoLogo" "True"
    Option "ModeValidation" "NoMaxPClkCheck,NoEdidModes,NoVirtualSizeCheck"
    SubSection "Display"
    Depth 24
    Modes "1024x768"
    EndSubSection
    EndSection
  • TV로 출력이 되게 설정되어 tv out이 안되게 하였습니다.
    #Section "Extensions"
    # Option "Composite" "Enable"
    #EndSection

yum 플러그인

Yellow dog Updater, Modified (Yum)의 플러그인을 사용하려면 /etc/yum.conf에 다음과 같이 기록합니다.
plugins=1
이제 플러그인을 사용할 준비가 되었고, 사용하고자 하는 플러그인을 설치합니다.

3개의 중요한 플러그인이 있습니다.
FastestMirror 빠른 mirror를 찾아줍니다.
ProtectBase 외부 저장소가 기본저장소의 패키지를 덮어 쓰지 않게 합니다.
Priorities 패키지가 덮어쓰지 않게 1에서 99 단계까지 설정할 수 있습니다.
그러나 protectbase와 priorities 플러그인을 같이 사용하지 말아야 합니다. protectbase는 사용 또는 사용하지 않음의 선택이 있으나 priority는 1부터 99까지 설정할 수 있습니다.
  • FastestMirror
    # yum install yum-fastestmirror

  • Priorities
    # yum install yum-priorities

    priorities 플러그인으로 각각의 repository에 순서를 부여해서 낮은 priority보다 높은 priority의 패키지가 설치되게 됩니다. priority로 기본 패키지가 third-party repositories 패키지로 업그레이드 하지 않게 하여 안정된 시스템을 유지할 수 있습니다.

    플러그인을 설치후 /etc/yum/pluginconf.d/priorities.conf 파일을 다음과 같이 합니다.
    먼저 플러그인을 활성화하고, 패키지의 metadata에 obsoletes로 인해 낮은 priority의 패키지가 높은 priority의 패키지를 쓸모 없음으로 인식해서 업그레이드 하지 않게 합니다.
    [main]
    enabled=1
    check_obsoletes=1

    이제 repository 파일에 다음과 같이 priority를 지정합니다.
    priority=N
    여기서 N은 1부터 99가 될 수 있습니다. 1이 제일 높고, 99가 제일 낮은 priority입니다. 기본값은 99입니다. 따라서 /etc/yum.repos.d/fedora.repo와 /etc/yum.repos.d/fedora-updates.repo 파일에 priority=1로 하여 third-party repositories 패키지로 업그레이드 하지 않게 하여 안정된 시스템을 유지할 수 있습니다.

    yum-protectbase를 사용하려면
    # yum install yum-protectbase
    /etc/yum/pluginconf.d/protectbase.conf 에서 [main] enabled = 1로 맞게 되있는지 확인하고, /etc/yum.repos.d/의 repository에서 protect=1 나 protect=0를 설정합니다.