Почему видео разрывает такую ​​проблему в Linux?


101

Я использую много вариантов Linux (в основном производных от Debian) уже более десяти лет. Одна проблема, которую я не видел, решена удовлетворительно, это проблема горизонтального разрыва или неправильной реализации Vsync.

Я говорю это потому, что использую 5 разных дистрибутивов на 4 разных компьютерах с различными мониторами и видеокартами Nvidia / AMD / ATI / Intel; каждый раз была проблема с разрывом видео даже с небольшим движением.

Это большая проблема, особенно если учесть, что даже Windows XP не имеет этих проблем на современном оборудовании. Если кто-то собирается использовать Linux для чего-либо, зачем им хотеть обнаруживать постоянные дефекты при выполнении чего-либо не-CLI?

Я предполагаю, что или немногие разработчики знают об этой проблеме или заботятся достаточно, чтобы решить ее. Я пробовал почти каждый композитор, и обычно лучшее, что они могут сделать, это минимизировать проблему, но не устранить ее. Разве это не должно быть так просто, как синхронизация с частотой обновления монитора? Есть ли какая-то политика в сообществе OSS, которая мешает кому-либо делать код, исправляющий это?

Каждый раз, когда я в прошлом обращался за помощью по этому вопросу, он либо рассматривается как крайний случай (в который мне трудно поверить, учитывая количество раз, которое я повторил проблему), либо я получаю потенциальные решения, которые максимально уменьшить разрыв.


2
Вы не упоминаете, какой DE вы используете. KDE был хорош со слезами в течение года или около того.
Sparhawk

1
Как можно легко воспроизвести проблему? В компьютере Debian / Ubuntu / Mint?
Xen2050

50
Кажется, этот XKCD очень хорошо подходит здесь ...
Восстановите Монику

Мой опыт с разрывом был совершенно другим. Я очень рад играть и смотреть фильмы на Linux. Steam действительно сделал Linux жизнеспособной платформой для отличных игр. В последнее время я играю в «Ведьмака 2» и «Принцип Талоса», и за 50 часов игры я не видел никаких разрывов. Это с картой Nvidia с проприетарными драйверами на Arch. Я согласен с Xen2050, что этот вопрос был бы более полезным, если бы для ваших сборок были даны точные спецификации. Я не отрицаю, что есть проблема, у меня просто был очень хороший опыт.
Лабиринт

Компоновка Nvidia решила проблему для меня, когда я использовал Nvidia еще в 2007 году. Хотя не в полноэкранном режиме, потому что полноэкранные окна выключают композитор, это предполагает, что вы собираетесь запустить игру OpenGL, я думаю. С Intel вы пробовали установить в разделе «Устройство» параметр «TearFree» «true» в X? Это удваивает использование видео RAM, но я думаю, что это будет работать.
Zan Lynx

Ответы:


92

Это все из-за того, что X-сервер устарел, плохо подходит для современного графического оборудования, и в основном вся прямая связь с видеокартой осуществляется как расширение («патч») поверх древнего раздутого ядра. X-сервер не предоставляет встроенных средств синхронизации между пользователем, отображающим окно, и экраном, отображающим окно, поэтому содержимое изменяется в середине воспроизведения. Это одна из известных проблем X-сервера (у него много, вся модель того, что сервер делает и устарела - обработка событий в подокнах, метаданные об окнах, графические примитивы для прямого рисования ...). Наборы инструментов виджета в основном хотят затушевать все это, но разрыв все еще остается проблемой, потому что нет механизма, чтобы справиться с этим. Дополнительные проблемы возникают, когда у вас есть несколько карт, которые требуют разных драйверов,

Wayland, который без особого энтузиазма пытается заменить X, поддерживает педантичную синхронизацию vsync в своем ядре и рекламируется, чтобы каждый кадр был абсолютно идеальным.

Если вы быстро включите Google «Wayland Video Learing», вы найдете больше информации обо всем.


38
+1потому что «Х - это проблема, взгляни на Вейланда». Смертельно серьезно, это правильный ответ.
HalosGhost

2
@HalosGhost евангелизация Wayland на ходу :) все еще нет поддержки сетевых сеансов?
Кагали-сан

3
@ kagali-san Я не говорил, что Вейленд идеален (это не так). Но это определенно лучше, чем X. :)
HalosGhost

8
@ kagali-san: У Weston был объединен бэкэнд RDP всего год назад, если вы находите, что это как-то относится к вопросу о разрыве видео.
Гравитация

3
@orion: и благодаря вам эта страница стала # 1 результатом для wayland video tearing: P
Tobia Tesan

16

Разрыв экрана появляется в основном по двум причинам: драйверов, которых еще нет, и отсутствия vsync с некоторыми оконными менеджерами.

Что касается драйверов, то как бесплатные, так и проприетарные драйверы поддерживают беспроигрышную компоновку (nvidia и amd оба). Имейте в виду, что, например, включение рабочего стола без катализаторов в катализаторе ( fglrx) может привести к падению кадра и зависанию, поэтому по умолчанию оно обычно отключено. Что касается открытого драйвера, vsync должен быть включен по умолчанию. Таким образом, проблема с разрывом экрана может быть решена с помощью различных драйверов и их настройки.

Что касается оконных менеджеров, то известно, что Openbox, Awesome и другие легковесные wms не поддерживают слезоточивость. XFCE (точнее, xfwm) исправил это в последних выпусках, 4.11 / 12 теперь имеет Vsync. Основные среды рабочего стола также не имеют проблем с разрывом, включая GNOME, KDE, Unity и Cinnamon.

Если вы по-прежнему сталкиваетесь с разрывом экрана, попробуйте другой менеджер композитинга, например Compton или Kwin. Kwin является оконным менеджером для KDE, и у меня есть опыт использования kwin в XFCE, когда он не поддерживает vsync и работает очень хорошо.

Таким образом, решение здесь заключается в эксперименте, что сломано в одной комбинации драйвер / wm может работать в другой. Я верю, что ситуация скоро улучшится, так как драйверы с открытым исходным кодом становятся более продвинутыми, и переключение на Wayland может избавить от старых проблем с Xorg.


5
На самом деле, нет. KDE (с Kwin или другим композитором) до сих пор чертовски рвется с NVidia или Intel.
Иван

1
Openbox и т. Д. Работают без разрывов - вам просто нужно запустить отдельный композитор, например, compton работает прекрасно.
wingedsubmariner

1
@wingedsubmariner, когда вы, ребята, обращаетесь к openbox, вы также имеете в виду fluxbox?
Nass

Кроме того, чрезвычайно полезно, чтобы вы заметили, каково состояние WM в различных оконных средах.
Nass

@nass Абсолютно. Оконный менеджер никогда не является ограничивающим фактором.
wingedsubmariner

14

Если вы используете драйвер nvidia> = 365.20, попробуйте включить опцию «Force Full Composition Pipeline» в nvidia-settings.

введите описание изображения здесь


nVidia Quadro на Lenovo W520, Fedora 25 и это сработало :)
Джертер

4
Также, если у вас нет такой опции, нажмите «Расширенные настройки» в нижней части окна, и она появится. почему этот "конвейер полного состава" не включен по умолчанию? ..
Rast

1
@Rast Потому что раньше у него были проблемы с производительностью.
Руслан

Кстати, похоже, что, по крайней мере, драйверы Intel также имеют TearFreeопцию, которую вы можете поместить в соответствующий Deviceраздел. Я только что попробовал, и это дает результаты, очень похожие на полный состав конвейера nvidia.
Руслан

Кажется, я не могу сохранить настройки при перезагрузке. Я попытался создать файл ~ / .xinitrc и поместить в него «nvidia-settings - load-config-only &. / Etc / X11 / xinit / xinitrc», но это не похоже на работу
FragmentalStew

9

У меня был сильный разрыв здесь и теперь это решено.

Прочитав это ( замечательное объяснение ) о том, как работает сервер Xorg, я понял, что сервер X рисует обновления окна непосредственно на карту памяти в любое случайное время, если вы не используете менеджер окон с включенным композитингом.

Когда композитинг включен, оконный менеджер объединяет все изменения из разных буферов памяти окон, создает результирующее изображение для всего экрана и выдает его на карту памяти за один снимок.

В большинстве современных дистрибутивов есть менеджер окон композитинга. KWin для KDE, Mutter для Gnome, Muffin для Cinnamon, Marco для Mate, xfwm для XFCE и т. Д. Однако композитинг может быть отключен для экономии ресурсов.

В моем случае композитинг был отключен в KDE4. После включения слезы ушли. РЕДАКТИРОВАТЬ : Мне также нужно было изменить в опциях KWin стратегию VSync с « Автоматически» на « Повторное использование содержимого экрана» , чтобы избавиться от разрывов, как описано в этом специальном отчете об ошибках kwin .

Варианты драйвера могут быть также фактором. В моем случае параметры по умолчанию работают нормально. Arch Wiki имеет отличную документацию по опциям для различных видеокарт, таких как карты Intel или NVIDIA .

Чтобы проверить, включена ли опция в вашей текущей конфигурации xorg, вы можете проверить журнал. Например, чтобы проверить, включен ли DRI:

cat /var/log/Xorg.0.log | grep DRI

1
В XFCE (в Xubuntu 16.04) компоновка включена по умолчанию, а синхронизация с вертикальным пробелом - нет . Используйте xfwm4-tweaks-settingsкоманду, чтобы показать приложение твикера, и на вкладке Compositor вы можете найти вышеуказанную опцию. Его включение имело огромное значение, и его можно проверить здесь: vsynctester.com/index.html (включить / выключить эту функцию во время отображения анимации). Он не идеален, хотя есть некоторые пропущенные кадры, но гораздо лучше, чем когда он выключен.
karatedog

1

Решение здесь: Linux Mint 17.3 MATE теперь поставляется с Compton .

Просто зайдите в Desktop Settings-> Windows-> Window Managerи выберите Metacity + Compton. Вот и все.

У меня есть видеокарта AMD, и она работает из коробки для драйвера с открытым исходным кодом.

Для проприетарного драйвера AMD, когда видео HTML5 развернуто на весь экран, вы можете увидеть синий цвет, который заполнит весь экран. Чтобы это исправить, создайте и chmod +xскрипт ниже:

#!/bin/bash
killall compton 2> /dev/null
compton -b --unredir-if-possible

Запускайте его всякий раз, когда вы перезапускаете систему, но не пытайтесь добавить его Startup Applications- по какой-то причине он может прервать запуск.


0

В Peppermint Linux перейдите в «Настройки»> «Центр управления Peppermint», выберите «Эффекты рабочего стола» и включите «Включить эффекты рабочего стола» и «Синхронизировать рисунок с вертикальным пробелом».


0

Я использую Linux Mint XFCE, и эта проблема довольно долго меня расстраивала. Я нашел решение для своего ноутбука с интегрированной графической картой Intel, и это решило проблему . Для моего рабочего стола с картой NVIDIA этот трюк не может работать. Но я только что нашел виновника.

Я сразу почувствовал прирост производительности, когда отключил компоновку окон. Вот как вы можете это сделать:

Перейдите во Все настройки / Настройки менеджера окон / Композитор и отключите все это.

Имейте в виду, что это специфичный для дистрибутива мой Mint с XFCE, и я понятия не имею, как найти похожую вещь в других дистрибутивах.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.