관리 메뉴

Linux Programmer

리눅스의 nvidia 드라이버 설치 본문

컴퓨터 관련/리눅스, 유닉스

리눅스의 nvidia 드라이버 설치

sunyzero 2014.07.06 00:06

* 리눅스에서 엔비디아(nvidia) 그래픽 카드의 드라이버를 설치

Last update : 2018-01-22


리눅스를 공부할 때 vmware, virtualbox를 설치한 뒤에 가상머신으로 리눅스를 설치하고 있는가?


만일 가상머신으로 리눅스를 돌리고 있다면, 리눅스를 중급이상으로 익숙해지기 힘들다. 왜냐하면 가상머신은 오류가 발생되지 않도록 vmware, virtualbox에서 호환성이 높은 드라이버를 가상으로 제공하기 때문이다. 그래서 오류 메시지를 경험하지 못하고 리눅스를 사용하게 된다.


그러나 회사나 연구실에서 머신러닝(machine learning)이나 CUDA를 사용하거나, 혹은 그래픽 처리를 위해 리눅스를 사용한다면 꼭 리눅스를 직접 설치해야만 한다. 그러나 직접 설치해보면 가상머신처럼 깔끔하게 설치되지 않는 경우가 많다. 특히 노트북에 리눅스를 설치하면 수많은 오류로 좌절하는 경우가 많다. 하지만 오류를 해결하면서 여러가지 하드웨어 지식을 배울 수 있기 때문에 꼭 가상머신이 아닌 환경에서 리눅스를 설치하고 사용하는 것이 좋다고 생각된다.


이 글은 그 중에서 가장 기초적인 그래픽 카드 드라이버에 대해 설명하는 글이다.


리눅스와 궁합이 잘 맞는 그래픽 카드는 nvidia 제품인데, 그 이유는 nvidia사가 직접 리눅스용 그래픽 드라이버를 배포하기 때문이다. 그런데 역설적으로 리눅스 진영에서 가장 욕먹는 회사중 하나가 nvidia다. 그 이유는 그래픽 드라이버의 스펙을 공개하지 않고 있기 때문이다. 사실 스펙만 공개해준다면 다른 사람들이 만들어도 되고, 개선도 가능한데... 그래서 리누즈 토발즈는 nvidia를 매우 싫어한다. 이런 얘기는 검색해서 재미 삼아 읽어보면 좋을 것이다.


nvidia 드라이버를 설치하는 방법은 그렇게 어렵지는 않다. 아래 글은 주로 Redhat 계열(레드햇, CentOS, Fedora, Suse...등)에 해당하는데, debian, ubuntu라도 거의 똑같다. 단지 패키지 설치때 yum 대신에 apt 혹은 apt-get으로 설치해주면 된다. 참고로 데비안 계열은 패키지명이 약간씩 다르다.


설치 작업은 관리자 계정인 root로 해야만 한다.(su - 명령) ubuntu에서 sudo를 사용한다면 "su -" 대신에 명령어 앞에 sudo 를 붙여서 실행하면 된다.



1. C컴파일러, kernel 패키지 설치

기본으로 C compiler와 make 같은 개발 툴이 설치되어있어야 nvidia 드라이버를 설치할 수 있다. 이미 설치되어있는 경우라면 그냥 넘어가면 되고, 없다면 다음 명령어로 설치해야 한다. 잘 모르겠다면 그냥 한 번 명령을 내려보면 된다. 이미 설치되어 있다면 패키지 관리자는 알아서 스킵한다. (# 는 root 유저의 프롬프트 표시이므로 실제로 입력하는 부분은 아니다.) 


1.1 레드햇 계열인 경우 : CentOS, RHEL, Fedora

아래의 명령어를 실행해서 컴파일에 필요한 패키지를 설치한다.


# yum -y install gcc gcc-c++ make binutils libtool autoconf automake patch pkgconfig redhat-rpm-config gettext


그 다음에 kernel의 헤더, 개발용 헤더 및 스크립트 패키지를 설치해야 한다. 패키지 이름은 kernel-headers , kernel-devel 이다. 주의할 점은 자신이 사용하는 커널의 버전과 동일해야 한다는 것이다. 그래서 커널 버전을 불러오는 uname -r 명령을 같이 사용한다.


# yum -y install kernel-devel-$(uname -r)  kernel-headers-$(uname -r)  dkms



1.2 데비안 계열인 경우 : Debian, Ubuntu, Mint ...

데비안 계열이라면 apt 나 apt-get 혹은 aptitude를 사용한다. 아래는 데비안 계열 명령어이다. 참고로 우분투는 앞에 sudo를 붙여야 한다. (아래 apt 부분에 apt-get 혹은 aptitude를 사용해도 된다. apt나 aptitude가 설치되어있지 않다면 apt-get을 사용하라.)


# apt -y install gcc make linux-headers-$(uname -r)




2. nvidia driver download

이제 www.nvidia.com 에 접속한 뒤에 linux 드라이버를 받는다. 주의할 점은 32bit, 64bit인지 헷갈리면 안된다. 아래 그림은 64bit 버전을 다운로드 받는 모습이다. 다운로드 받은 파일은 *.run 확장자명을 가지고 있다.


nvidia sitenvidia site




3. nouveau 비활성화

nouveau는 리눅스에 기본으로 탑재된 그래픽 드라이버인데, 이게 로딩되어있으면 nvidia 드라이버와 충돌이 발생하여 설치가 제대로 되지 않는다. 그래서 nouveau 모듈을 비활성화 하기 위한 작업을 해야 한다. 


원래는 커널 모듈 비활성 설정 파일을 /etc/modprobe.d 에 저장해야 하는는데, 사실 nvidia driver 설치 파일을 실행하면 nouveau 때문에 설치할 수 없다고 에러가 발생한 뒤에, disabled 시키기 위한 설정 파일을 만들깝쇼?하고 물어본다. 여기서 Yes하면 /etc/modprobe.d/에 nvidia-installer-disable-nouveau.conf 파일을 자동으로 만들어준다.


하지만 설치 과정에서 오류 메시지를 보기 싫거나, 꼭 수동으로 하고 싶은 분을 위해 여기에 적어두겠다. 아래 내용을 그대로 긁어서 실행시키면 된다. (cat 으로 파일에 내용을 넣는 명령이므로 cat 이하의 라인을 그대로 복사해서 붙여넣으면 된다.)


# cat <<HERE > /etc/modprobe.d/nvidia-installer-disable-nouveau.conf 

blacklist nouveau

options nouveau modeset=0

HERE


마지막 라인에서 HERE을 치는 순간 /etc/modprobe.d/nvidia-installer-disable-nouveau.conf 파일이 생성될 것이다. 그리고 실제로 위 코드를 타이핑 하면 2~3번 행의 타이핑 되는 내용 첫칸에 > 기호가 나올텐데 이는 line이 이어지는 것을 보여주는 것이고 실제로 입력되지는 않으니 위에 적힌 대로 blacklist ... 부분만 치면 된다.


설정을 변경한 뒤에는 initramfs (init ram filesystem)를 새로 생성해야 한다. initramfs 생성은 레드햇 계열과 데비안 계열이 서로 다르니, 레드햇 계열은 3.1.을 참고하고, 데비안 계열은 3.2.를 보도록 한다.


3.1. nouveau 비활성화 후 initramfs 재생성 : CentOS, Fedora, RHEL (레드햇 계열) 인 경우

아래는 레드햇 계열에서 내리는 명령어이다. 데비안 계열이라면 아래 3.2. 항목을 참고하자.


# cd /boot

# mv initramfs-$(uname -r).img{,_backup}

# dracut

# ls initramfs-$(uname -r).img



3.2. nouveau 비활성화 후 initramfs 재생성 : Debian, Ubuntu, Mint .. (데비안 계열) 인 경우

아래는 데비안 계열에서 내리는 명령어이다. 레드햇 계열이면 위 3.1. 항목을 참고하자.


# cd /boot

# mv initramfs-$(uname -r).img{,_backup}

# update-initramfs -u

# ls initramfs-$(uname -r).img



3.3. nouveau 비활성화 후 initramfs 재생성 후 확인 : 데비안, 레드햇 계열 공통

앞서 3.1 혹은 3.2에서 내린 마지막 명령어인 ls initramfs-$(uname -r).img 에서 새롭게 생성된 initramfs-$(uname -r).img 파일 목록이 출력되는 것을 확인한다. 

만일 파일이 생성되지 않았다면 어디가 잘못되었는지 확인해야 한다. initramfs-$(uname -r).img 파일이 제대로 생성되지 않았거나 문제가 발생했을때 무턱대고 재부팅을 하면 부팅 실패가 생길 수 있으니 주의하자.


문제가 없다면 이제 재부팅을 한다. 재부팅 완료 후에 root로 다시 로그인을 하여 lsmod | grep nouveau 라고 명령하면 커널 모듈 목록에 nouveau 관련 모듈이 출력되지 않을 것이다. 만일 여전히 nouveau 커널 모듈 목록이 출력되면 뭔가 꼬인것이다. 아마도 오타일 가능성이 높으니 위 항목 3에서 설정한 설정 파일을 다시 한 번 천천히 살펴보자.




4. init 3 런레벨로 작동

재부팅을 한 뒤에 CTRL-ALT-F2를 눌러서 콘솔 화면으로 나온뒤에 root로 로그인 하자. 이제 리눅스 버전에 따라 명령이 조금 달라진다.


* CentOS 6.x를 사용하는 경우


# init 3


init 3 은 runlevel 3 으로 변경하는 명령어로, 기존 runlevel 5 에서 작동중인 X window를 종료시켜준다. X 윈도우가 작동중이면 nvidia 드라이버는 설치되지 않기 때문에 런레벨을 변경하는 것이다.


* CentOS 7.x나 Fedora 17 이후인 경우


# systemctl isolate multi-user.target


새로운 최신의 리눅스 시스템은 과거의 SysV runlevel을 대체하여 systemd를 사용하기 때문에 systemctl 명령으로 X윈도우를 종료해야 한다.


간혹 systemctl isolate multi-user.target 명령을 내리면 화면이 먹통이 되는 경우가 있는데, 당황하지 말자. 이는 보통 외장 그래픽을 가지는 데스크탑에서 발생한다. 최근의 CPU는 내장 그래픽 칩을 가지고 있는데, 텍스트 모드에서는 외장 nvidia 그래픽 카드보다 내장 intel 그래픽이 먼저 활성되는 경우가 있다. 따라서 이런 경우에는 모니터 케이블을 내장 그래픽 포트에 꼽아서 확인해보면 될 것이다. 애초에 이런 문제를 겪지 않는 확실한 방법은 BIOS에서 내장 그래픽을 꺼놓는 방법이 있다.


* Debian 7.x을 사용하는 경우


# init 1


데비안계열은 싱글모드(1번 런레벨)을 사용하므로 1번 런레벨로 스위칭한다.



5. nvidia driver 설치 파일 실행

이제 다운로드 받은 nvidia 드라이버 설치 파일을 실행한다. 실행파일이 아니므로 실행 권한을 주고 실행해야 한다. 드라이버 설치 파일명이 NVIDIA-Linux-x86_64-331.89.run 인 경우에는 아래와 같은 명령어를 사용하면 된다.


#  chmod +x NVIDIA-Linux-x86_64-331.89.run

#  ./NVIDIA-Linux-x86_64-331.89.run


처음에 라이선스 동의는 Accept 해주고, 그 다음에 계속 Yes 혹은 OK를 누르면 된다.


마지막에 자동으로 설정파일을 고칠 것이냐고 묻는데 기본값이 No로 되어있으므로, 그냥 엔터를 치다간 설정 파일이 수정되지 않고 바로 넘어간다. 따라서 마지막에 물어보는 것은 Yes로 바꾼 뒤에 끝내면 된다.


nvidia linux driver installernvidia linux driver installer



6. nvidia 제어판 실행

터미널에서 nvidia-settings를 실행해서 nvidia가 제대로 인식되고 있는지 확인해보자.



PS. 동영상 플레이어는 한국어 자막이 잘 지원되는 bomi-player(구 cmplayer)를 많이 사용하므로 이것으로 nvidia 드라이버 테스트를 해보면 된다. bomi-player가 접속이 원활하지 않은 경우에는 vlc player로 하면 된다.

VLC player : https://www.videolan.org/vlc/download-fedora.html


2017년도 이후에는 mpv 플레이어가 훨씬 안정화되고 빨라지면서 대부분의 경우 mpv 플레이어를 사용하도록 권장한다. mpv 플레이어의 속도는 최정상 급이다.



* History

2018.01.22 데비안 계열 설정 명령어 추가

2017.10.30 오타 수정

2014.07.06 초안 작성


* 패키지로 설치하는 다른 방법 : https://fedoramagazine.org/install-nvidia-gpu/

32 Comments
  • 프로필사진 버크하우스 2014.07.06 00:14 신고 잘 보고 갑니다. 오늘도 보람찬 하루 되세요. ^^
  • 프로필사진 sunyzero 2014.07.06 21:01 신고 네 감사합니다
  • 프로필사진 지나가는사람 2014.09.16 16:48 신고 지금 시점에서는 nvidia보다 amd가 더 낫습니다.
    amd는 GPU관련 개발 문서를 정식으로 공개하여서 이를 토대로 오픈소스 드라이버가 개발되고 있고, amd내에 full-time으로 오픈소스 리눅스 드라이버만 개발하는 직원도 있습니다.
    오픈소스 드라이버가 3D에서 일부분은 리눅스용 catalist 드라이버의 성능을 넘어서기도 합니다.

  • 프로필사진 sunyzero 2014.09.21 14:01 신고 지금은 amd 도 많이 좋아졌죠. 그리고 본문에도 적었듯이 nvidia의 정책은 좀 그렇죠. 토발즈의 "Nvidia Fu*k you!!" 사건은 꽤 유명하니까요 ^^
  • 프로필사진 flack3r 2014.10.15 10:41 신고 와 감사합니다 덕분에 삽질에서 벗어날 수 있었어요 ^^
  • 프로필사진 sunyzero 2014.10.17 18:02 신고 도움이 되셨다니 기쁘네요 ^^
  • 프로필사진 Puma 2015.12.27 01:56 신고 그럼 혹시 제가 vmware로 리눅스 쓰는데 Window system doesn't support OpenGL. 오류가 뜨는 이유도 가상머신 때문에 그런 것일까요?
  • 프로필사진 sunyzero 2015.12.28 09:48 신고 vmware는 virtual machine settings에서 Display에 Accelerate 3D graphics을 체크해주시고 vmware-tools를 설치하면 됩니다.
  • 프로필사진 사압질 2016.01.08 19:38 신고 debian 8 jessie amd64 stable버전 설치한초보입니다 gcc컴파일러 설치에관해 여쭙고자합니다
    aptitude -y install gcc make linux-headers-$(uname -r) 입력시 설치디스크를 넣으라고뜨는데요 패키지가없는것같습니다 그래서 데비안사이트에서 deb 파일을 받아서설치햇는데 binutils이없어서 인스톨이 안된다뜨고 그후 gcc관련 패키지를 여러개 다운받아 중구난방으로 설치해봣으나(조사를좀하고깔지ㅡㅡ)결국 드라이버설치시 gcc를 찾을수없다고뜨내요 결론은 이때동안 깔앗던패키지 제거후 다시 깔아야된다는건데 웹에서 어떤패키지를 받아야될지 모르겠습니다 검색해도 자료는없고 (영어로된 자료는 많으나..) 도와주세요
    설치는 윈도우에서 windisk32imager로 dvd1 파일을받아 구웠고
    x윈도우 환경은 gnome입니다 현제 gui로 로그인하면 그놈 터미널 안켜지고 시스템멈춤현상발생; 엔비디아 그래픽드라이버 깔아도 해결될지 의문이네요

  • 프로필사진 sunyzero 2016.01.10 18:45 신고 APT의 source list 환경을 구성하는 방법을 먼저 배우셔야 할 것 같습니다.
  • 프로필사진 bnes0824@gmail.com 2016.01.16 09:30 신고 제가 하드 하나를 사서, centos를 설치해서 두 컴퓨터에서 쓰고 있습니다.
    한 컴퓨터는 내장 그래픽이지만, 다른 컴퓨터가 nvidia라 말씀해주신 방법으로 설치성공했는데요... (감사합니다.) 다른 컴퓨터에 하드를 연결했더니 어쩌면 당연히도 그래픽 문제인지 centos로 booting시 에러가 나네요... 그래서 혹시 booting 시마다 그래픽 카드 설정을 변경할 수는 없는가 해서요... 만약에 바로 설명이 어려우시면 해결방향만이라도 알려주시수 있으신가요? ^^;;;
  • 프로필사진 sunyzero 2016.01.16 09:38 신고 nvidia와 intel graphics를 같이 사용하는 방법을 검색해보시기 바랍니다.
  • 프로필사진 감사합니다 2017.04.29 20:34 신고 감사해요~
  • 프로필사진 sunyzero 2017.05.09 15:48 신고 도움이 되셨길 바랍니다 ^^
  • 프로필사진 linxer 2017.10.21 08:07 신고 정말 감사합니다.
    1. 정말 일목요연

    글의 분류실력이 탁월함
    프로그래밍도 잘짜실 것이 느껴짐

    2. 초보자들도 쉽게 이해할수 있음 - 상세히 설명
    3. 글도 재미있어서

    결론 : 자주 방문하고 싶을정도 대박^^

    감사합니다.
  • 프로필사진 sunyzero 2017.10.23 19:52 신고 감사합니다. 좋은 하루 되세요.
  • 프로필사진 이닷티 2017.10.30 14:31 신고 좋은 자료 잘 보고 갑니다.
    몇번 삽질하다가 올려주신 자료 덕분에 centos에 드라이버 설치를 완료할 수 있었습니다.
  • 프로필사진 sunyzero 2017.10.30 22:07 신고 잘 설치되셨다니 다행입니다. ^^
  • 프로필사진 Lind 2017.12.21 17:33 신고 M5000을 잘못 설치해서 계속 리눅스가 먹통이 되었었는데,
    알려주신 방법대로 설치후 정상화 되었습니다. 정말 유용한 자료 감사합니다.
  • 프로필사진 sunyzero 2017.12.21 21:42 신고 감사합니다. ^^
  • 프로필사진 BIND 2018.03.23 09:45 신고 설치후 ERROR : the control is undefined 가 뜨는건.. 아무 상관이 없나요?
    init 3이라서 그렇게 뜨는건가요? 설치됬는건 맞는거죠..?
  • 프로필사진 sunyzero 2018.03.25 20:48 신고 나중에 X윈도가 잘 된다면 괜찮은 겁니다. 혹시라도 문제가 생기시면 부팅시 grub 화면에서 single mode로 부팅하셔서 고치면 됩니다.
  • 프로필사진 crackerr 2018.07.07 16:38 신고 알려주신 순서대로 따라가면서 nouveau 비활성화 후 initramfs 재생성까지 하고 재부팅을 했는데
    그대로 글자를 복사하고 확인했을 땐 오타가 없었는데
    커서만 깜빡 깜빡 하고 부팅이 안되는 이유를 잘 모르겠습니다. ㅠㅠ
  • 프로필사진 sunyzero 2018.07.08 12:15 신고 부팅 목록 화면 자체가 나오지 않는 경우에는 디스플레이 포트가 다른 쪽으로 출력되는 경우도 있습니다. 예를 들어 PC라면 onboard쪽으로 출력된다든지 하는 경우입니다.

    그게 아니라 부팅 목록 화면이 나오고 그 다음에 문제가 된다면, rescue mode로 부팅하셔서 작업을 다시 한번 확인해보시는게 좋습니다.

    grub의 rescue 모드로 부팅할 때 잘 안된다면 설치할 때 사용하는 USB으로 응급모드 부팅을 하면 됩니다.
  • 프로필사진 Chacha 2018.10.12 10:06 신고 안녕하세요. 글써주신대로 차근차근 잘따라가고있습니다^^ 그런데 init 3 런레벨로 작동하고 nvidia driver 설치파일실행시키려고 chmod~명령어를 입력했는데 해당 파일을 찾을수가없어 접근할수없다고 떠서 설치를 못했습니다ㅜ
    드라이버설치파일은 배경화면에 있고 제가 받은 설치파일명으로 바꿔서 명령어를 입력했는데 되질않아 무엇이 문제인지 모르겠습니다.

    + 배경화면에 있는 설치파일을 열려고 시도해보니 인코딩이 맞지않아 파일을 열수가없다고 나왔어요
  • 프로필사진 sunyzero 2018.10.12 11:27 신고 파일을 홈디렉터리에 받으셔서 작업하시기 바랍니다. 파일의 위치가 바탕화면이라서 파일을 못 찾아서 그런 겁니다.

    터미널에서 ls 로 먼저 파일이 있는지 확인하시고 작업하시기 바랍니다.

    위의 작업은 탐색기가 아니라 모두 터미널에서 작업한 겁니다. 터미널에서 명령을 내리실 때 실행 파일은 원래 chmod로 실행 권한이 있어야 합니다. (윈도우즈와 이런 부분이 다릅니다.)

    하지만 chmod 명령이 익숙하지 않다면 실행파일이 있는 디렉터리에서 bash "실행파일명" 으로 명령을 내려도 됩니다.
  • 프로필사진 Chacha 2018.10.12 14:07 신고 말해주신대로 해서 설치화면까지 가는데 성공했어요^^ 감사합니다.
    그런데 경로에 cc를 찾을수없다고 패키지 gcc가 설치되어있는지 확인해보라는 에러가 떴습니다. 다시 깔아야하는걸까요?

    + gcc,kernel 패키지가 제대로 안깔려서 다시 설치하고 실행했더니 설치가 되었어요.
    그런데 그 후에 # init 5로 xwindow를 다시살리려고하는데 안되네요ㅠ
  • 프로필사진 sunyzero 2018.10.12 16:57 신고 에러 메시지나 화면을 댓글로 적어주시거나, 만일 내용이 많다면 제 메일로 보내주시면 알려드리겠습니다.
  • 프로필사진 Hahhoho 2018.10.12 19:33 신고 안녕하세요. 한가지 질문을 드리려고합니다.
    혹시 그래픽 카드에 출력포트가 없는 tesla 계열 vga를 사용하여 리눅스 드라이버를 설치하려면 어떻게 해야할까요?
    온보드 rgb포트밖에 없어 모니터를 연결했는데, 그래픽 드라이버만 설치하면 gui가 실행이 안되네요.
    아마 그래픽 드라이버를 설치하면 vga 출력포트로 출력이 되게끔 되어서 온보드 포트로 연결하고 있어서 안되나 싶은 생각이 드네요.
    그래픽 드라이버 설치할때 옵션을 줘야할까요?
    아니면 단순 bios 설정때문일까요? 감이 안잡히네요ㅜ
    아시는 내용이면 도움 부탁드리겠습니다.
  • 프로필사진 sunyzero 2018.10.14 18:55 신고 테슬라용 드라이버는 따로 있는 것으로 압니다. 만일 테슬라 전용 드라이버를 설치했음에도 문제가 생긴다면 nvidia측에 문의해보시는게 좋을 듯 합니다.
  • 프로필사진 Chacha 2018.10.15 09:53 신고 안녕하세요.
    저번주에 설치를 했는데 GUI가 뜨지않아서 댓글을 남겼습니다. 이유는 모르겠지만 본체에 연결된 선들을 다시 꽂아보니 되었습니다. 그래픽카드가 보내는 출력을 받아내지못했다가 인식해서 그런것같다고..? 같이 일하시는선생님께서 추측하셨어요^^;;;
    덕분에 그래픽카드 드라이버를 설치할수있었습니다. 도움이 되어주셔서 정말 감사합니다.
  • 프로필사진 sunyzero 2018.10.15 19:59 신고 잘 되셨다니 다행입니다. ^^
댓글쓰기 폼