FREEDOM. FRIENDS. FEATURES. FIRST.
페도라 한국 사용자 모임

[Tip]Nvidia Driver 설치 후 Gnome-Shell 티어링 패치시 opengl 라이브러리 링크 방법

게시판 Tech/Tip [Tip]Nvidia Driver 설치 후 Gnome-Shell 티어링 패치시 opengl 라이브러리 링크 방법

  • This topic has 0개 답변, 1명 참여, and was last updated 5 years, 3 months 전에 by 난해주님. This post has been viewed 19 times
  • 만든이
    게시글
  • #12256
    난해주님
    참가자
    • 게시글114
    • 댓글337
    • 총합451
    • ★★
    @workman729

    여러명의 지인 또는 우분투 모임의 사용자로 부터 같은 질문과 쪽지를 받은 적이 있어 글을 씁니다.

    우선 저는 페도라를 좋아라 해서 페도라 모임에 글을 남기는 것이 나으리라 보고
    참고로 우분투는 mesa와 nvidia 라이브러리가 분리되어 있고 드라이버 설치시 이미 둘 중 어느 것을 사용할지
    설정까지 다 되어 있으므로 활용만 하시면 되므로 언급할 필요가 없을 것으로 봅니다.

    티어링 방지를 위한 gnome-shell 패치 버전은 자료실에서 다운로드가 가능 합니다.

    여러 질문의 요지는 Gnome을 데스크 탑으로 이용하고 nvidia 드라이버를 메뉴얼 설치가 아닌 패키지 설치를 한 경우
    제가 올려드린 gnome-shell 패치를 한 경우 티어링이 발생한다는 요지의 질문입니다.

    이유는 간단 합니다만 페도라의 경우 opengl 라이브러리를 mesa가 아닌 nvidia에서 제공하는
    라이브러리가 /usr/lib64에 위치 하고 있어야 한다는 말씀을 드린 적이 있고 또한 강조해 드렸습니다.

    입문자를 위해 티어링 패치시 opengl 라이브러리를 어떻게 위치 시켜야 하고 사용하는지 보다 자세히 말씀 드리겠습니다.

    첫번째 방법은 nvidia 드라이버를 메뉴얼 설치하는 방법입니다. 이 방법을 사용하시면 gnome-shell 패치 버전만
    설치 하시면 되고 별다른 조치가 필요 없습니다.

    그러나 가장 간단하지만 메뉴얼 설치를 하시면 어떤 리눅스 배포반이든지 간에 주의 하셔야 하는 데
    mesa 패키지가 업데이트 되거나 xorg 드라이버가 업데이트 되는 경우 libGL, libEGL, libGLESv2 라이브러리의 링크가
    mesa의 것으로 바뀌거나 libglx의 링크가 변경되어 그놈 로딩시 문제가 발생 하거나 로그인 화면이 출력되지 않습니다.
    (페도라에선 이런 증상이 보다 자주 발생하므로 유의 하시기 바랍니다.)

    전자는 libglx의 링크 문제이고 후자는 libGL의 링크가 깨진 경우입니다.
    해결책은 링크를 바로 잡아 주시거나 드라이버를 재 설치해 주시면 간단히 해결 됩니다.

    두번째 방법은 alternatives 명령을 이용하여 mesa와 nvidia의 라이브러리를 선택적으로 링크해 주는 방법입니다.
    다음과 같이 터미널을 이용하여 링크해 주시면 됩니다.

    우선 이미 생성된 mesa 라이브러리의 링크를 unlink 합니다.
    # cd /usr/lib64
    # sudo unlink libGL.so.1
    # sudo unlink libEGL.so.1
    # sudo unlink libGLESv2.so.2

    다음과 같이 링크를 생성 합니다. (사용법: alternatives --install <링크> <이름> <원본경로> <우선순위>)
    # sudo alternatives --install "/usr/lib64/libGL.so.1" "libGL.so.1" "/usr/lib64/nvidia/libGL.so.버전" 500
    # sudo alternatives --install "/usr/lib64/libGL.so.1" "libGL.so.1" "/usr/lib64/libGL.so.1.2.0" 500
    # sudo alternatives --install "/usr/lib64/libEGL.so.1" "libEGL.so.1" "/usr/lib64/nvidia/libEGL.so.버전" 500
    # sudo alternatives --install "/usr/lib64/libEGL.so.1" "libEGL.so.1" "/usr/lib64/libEGL.so.1.0.0" 500
    # sudo alternatives --install "/usr/lib64/libGLESv2.so.2" "libGLESv2.so.2" "/usr/lib64/nvidia/libGLESv2.so.버전" 500
    # sudo alternatives --install "/usr/lib64/libGLESv2.so.2" "libGLESv2.so.2" "/usr/lib64/libGLESv2.so.2.0.0" 500

    참고고 위에서 버전이란 nvidia의 드라이버 버전을 뜻하며 libGL만 해주어도 상관 없지만 저의 경우 여러 옵션으로 패키지를 재빌드하는 경우가 많으므로 위의 3개의 파일을 링크를 해주시기를 권해 드립니다.

    각각의 so 파일의 링크는 위의 열거한 파일들로 링크되어 있으니 걱정 하지 않으셔도 됩니다.
    만약 원본 위치가 다르거나 링크가 깨져 있다면 생성한 만큼 아래 처럼 바로 잡아 주시면 됩니다.

    # cd /usr/lib64
    # sudo ln -s libGL.so.1 libGL.so
    # sudo ln -s libEGL.so.1 libEGL.so
    # sudo ln -s libGLESv2.so.2 libGLESv2.so

    생성한 링크의 선택적 사용은 alternatives --config <이름> 명령을 사용 하여 선택해 주시면 되고
    각각의 so 파일의 링크는 생성된 링크로 걸어 주시면 됩니다.

    다만 mesa 패키지 업데이트 시 링크가 mesa의 것으로 변경되지만
    걱정하지 마시고 추후 티어링 발생시  alternatives --config 명령을 이용하여 nvidia의 것으로 잡아주면 티어링이 발생하지 않습니다.

    만약 원래 설정으로 변경하고 싶다면 ldconfig 명령을 실행해 주시면 원래 상태로 돌아 가며
    다시 이용하고 싶으시다면 alternatives --config 명령을 재차 사용하시면 됩니다.

    이도 저도 번거롭다면 아래 처럼 mesa 패키지의 업데이트를 제외하는 방법도 있습니다.(추천안함)

    # sudo vi /etc/yum.repo.d/fedora-update.repo
    ~~~~~ 중략 ~~~~~
    exclude=mesa*
    ~~~~~ 중략 ~~~~~

    위에서 처럼 mesa로 시작하는 패키지는 업데이트 제외합니다.

    세번째 방법은 사용하는 어플리케이션의 desktop 파일에 LD_PRELOAD 명령을 이용하여 libGL.so.1 파일의 위치를 지정해 주는 방법입니다.
    (각각의 라이브러리는 필요에 따라 파일 명만 변경해 주시면 됩니다.)

    예를 들어 mpv를 사용하는 데 티어링이 발생한다면 /usr/share/applications/mpv.desktop 파일을 아래와 같이 편집합니다.

    # sudo vi /usr/share/applications/mpv.desktop
    ~~~~~ 중략 ~~~~~
    Exec=mpv --profile=pseudo-gui -- %U
    ~~~~~ 중략 ~~~~~

    위의 부분을 찾아서 아래 처럼 변경하여 줍니다.
    Exec=env LD_PRELOAD="/usr/lib64/nvidia/libGL.so.1" mpv --profile=pseudo-gui -- %U

    저장 후 mpv를 실행해 주시면 티어링 발생 하지 않음을 확인 하실 수 있습니다.

    기타 멀티미디어 어플리케이션(예: steam, 기타 게임, smplayer, mplayer, kodi, totem, bomi등) desktop 파일에 위와 같이 변경하여
    사용하시면 티어링이 발생 하지 않습니다.

    위의 세가지 방법 중 선택하여 적용하시면 되고 이외 특별한 설정은 필요하지 않습니다.
    고급 사용자는 첫번째 방법을 초보 사용자는 두번째 방법을 추천하며
    특별히 셋팅 없이 필요한 것만 적용하신다면 세번째 방법을 추천합니다.

    유용하게 이용되기를 희망합니다.

  • 답변은 로그인 후 가능합니다.