18 марта 2017

Как побороть тиринг при использовании проприетарного драйвера nvidia в Linux

Я долгое время искал решение этой проблемы после установки проприетарного драйвера NVIDIA.
Используя окружение XFCE, пробовал устанавливать оконный менеджер compton. Но я сторонник чистоты системы и сторонние пакеты меня не устраивали. А решение как всегда лежало на поверхности, которым я и хочу поделиться с вами.


Приступим.

Чтобы убедится в том, что данное решение работает в вашем случае, скопируйте и выполните следующую команду в терминале:

nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceCompositionPipeline = On }"

Ваш монитор может мерцать секунду-две. После чего проверьте сработала ли команда. Проверьте движение скролинга в Fierfox, перемещая окна по экрану.  Если же проблема осталась, попробуйте немного изменить команду следующим образом:

nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"

Если после выполнения команды разрывов не наблюдается, двигаемся дальше.

Теперь закрепим результат.

Без дальнейших действий весь эффект пропадет после перезагрузки. А также если появились какие-то лаги, перезагрузитесь, значит данное решение вам не подходит.

Итак. Во-первых, необходимо убедиться что у нас есть файл xorg.conf, который находится по пути /etc/X11. Откроем для просмотра данную директорию командой в терминале:

ls /etc/X11

Если он есть, как показано на скриншоте ниже, продолжаем.


Если файла нет, пропустите следующие шаги, но продолжайте читать, в конце статьи я расскажу что нужно сделать в вашем случае.

Тем у кого все в порядке необходимо сделать резервную копию файла xorg.conf следующей командой:

cp /etc/X11/xorg.conf /etc/X11/xorg.conf.backup

Теперь откройте файл в любимом текстовом редакторе с привилегиями суперпользователя. В моем случае, это редактор nano.

Выполните в терминале следующую команду:

sudo nano /etc/X11/xorg.conf

Вы должны увидеть примерно следующее, в разделе Section «Screen»:


Если использовали вариант — ForeFullCompositionPipeline, строка Options «metamodes» , будет выглядеть как на изображении выше.

Если ее нет, добавьте с рабочим для себя вариантом.
У некоторых из вас уже есть опция «metamodes» в вашем файле /etc/X11/xorg.conf, как в примере ниже для настройки с двойным монитором:

Option "metamodes" "VGA-0: 1152x864_60 +0+0, DVI-D-0: 1680x1050_60 +0+864"

Если это так, просто измените строку так, чтобы она выглядела следующим образом:

Option "metamodes" "VGA-0: 1152x864_60 +0+0, DVI-D-0: 1680x1050_60 +0+864 { ForceCompositionPipeline = On }"

И вот теперь перезагружаемся, наслаждаемся плавной картинкой.

Что делать, если у вас отсутствует файл /etc/X11/xorg.conf?

У пользователей Ubuntu и Linux Mint может не оказаться файла xorg.conf по умолчанию. Поэтому для его создания открываем nvidia-settings и переходим в раздел X Server Display Configuration, нажимаем Save to X Configuration File (создаем тем самым необходимый для нас файл xorg.conf).
Пример на скриншоте ниже.
И снимите галочку с Merge with existing file (совместить с существующим файлом).


Проверьте наличие файла xorg.conf и возвращайтесь к началу инструкции.

Всем спасибо за внимание. Надеюсь это кому-то поможет.

P.S. Если вы знаете другие способы решения данной проблемы, поделитесь ими в комментариях.

Автор статьи  Максим Жилкин.

18 комментариев :

  1. у меня просто в автозапуске запилена команда
    nvidia-settings -a [gpu:0]/GPUPowerMizerMode=1
    тиринга нет

    ОтветитьУдалить
  2. Спасибо тебе, добрый человек, как же меня это бесило...

    ОтветитьУдалить
  3. На Arch просто меняем в XFCE оконный менеджер xfwm4 на гит версию из AUR, перезагружаемся и имеем тонну счастья.

    ОтветитьУдалить
  4. В статье не указано(забыл), но должно работать и в других оболочках и дистрибутивах отличных от deb-based.

    ОтветитьУдалить
  5. Максим, молодец! Хорошая и нужная статья!

    ОтветитьУдалить
  6. Здравствуйте. Подскажите тему оформления, которая использовалась на скринах в этой статье.

    ОтветитьУдалить
  7. Стоит Elementary os Loki после установки проприетарного драйвера появилась такая беда, после пробуждения ПК из спящего режима курсор начинает двигаться рывками, мышка беспроводная, если пользоваться тачпадом вместо мышки то работает нормально, проблема точно не в мышке т.к. после удаления проприетарного драйвера все работает нормально. Может это тоже своего рода тиринг? Есть смысл пробовать? Видео - Nvidia gforce g102m

    ОтветитьУдалить
    Ответы
    1. Скорее всего нет. Хотя ничего не мешает выполнить одну из команд из начала статьи. В случае неудачи перезагрузитесь и все. WM Loky умеет в композитинг.

      Удалить
  8. В NVIDIA X Server Settings есть настройка Force Composition Pipeline и Force Full Composition Pipeline. Просто ставите галочки на против этих настроек, применяете их и сохраняете конфигурацию. https://goo.gl/WAF4Xm

    ОтветитьУдалить
    Ответы
    1. Sergey, спасибо! Помогла твоя подсказка насчет настроек Nvidia X Server,а то раньше в vlc плеере фильмы дергались, аж бесило))) Стоит Linux Mint Xfce 17.3

      Удалить
    2. Анатолий, я рад, что смог помочь тебе. ;)

      Удалить
  9. На старом компе был небольшой тиринг.Там 14.04.Ничё не стал создавать и править.Кинул данную команду в автозапуск и нормально работает.Как вариант.

    ОтветитьУдалить
  10. Использовал опцию
    Option "metamodes" "HDMI-0: 1920x1080_60 +0+0, DVI-D-0: 1920x1080_60 +0+0 { ForceFullCompositionPipeline = On }"

    Синхронизация работает только на телике. Пробовал так:
    Option "metamodes" "HDMI-0: 1920x1080_60 +0+0 { ForceFullCompositionPipeline = On }, DVI-D-0: 1920x1080_60 +0+0 { ForceFullCompositionPipeline = On }"

    Работает только на мониторе.
    Как сделать синхронизацию и на мониторе и на телике?

    ОтветитьУдалить
    Ответы
    1. Я однодисплейные профили юзаю в основном. Т.е. крыса стоит на компе с одним монитором, Циннамон - на ноуте, который при подключении к телеку работает без своего дисплея, используя телек как единственный и основной. В моем случае этот переключатель (нвидиевский, который в Вашем случае выбирал первый в списке девайс и на нем "отключал" тиринг) работает на одно устройство всегда - на один активный дисплей. Кстати, зачем ForceFullComposition? Возможно, достаточно будет ForceComposition.

      Удалить