Как избавиться от разрывов в Linux
Обновлено: 21.11.2024
Разрыв экрана в Linux может стать серьезной проблемой для оконных менеджеров без компоновки.
Даже многие оконные менеджеры компоновки могут отображать разрывы при перетаскивании окон.
Похоже, много технического жаргона, поэтому, чтобы упростить вопрос, давайте обсудим основы.
Часто вы можете заметить, что часть видео/графики/окна оторвана от основной части. Это сбой, связанный с рендерингом видео или графики, когда входное видео не синхронизировано с частотой обновления дисплея. Это называется разрывом экрана, и на ЖК-дисплеях разрыв экрана по горизонтали очень заметен.
Разрыв экрана происходит в основном при воспроизведении видео и перетаскивании/перемещении или развертывании/сворачивании окна.
По сути, оконные менеджеры, такие как kwin, Mutter, XFWM, Compiz, с возможностью экранной буферизации. У них есть такие функции, как тень окна, 3D-анимация, прозрачные окна, сглаживание, размытие фона и многое другое.
Они намного привлекательнее, чем простые оконные менеджеры. Подробнее читайте здесь.
Исправить разрыв экрана в Linux с помощью оконных менеджеров
Это довольно просто, если вы используете KWin, Mutter, Muffin или любой другой оконный менеджер композитинга, в любом месте настроек должна быть возможность включить вертикальную синхронизацию.
Если вы используете KDE или минимальный KWin, воспользуйтесь приведенной ниже инструкцией.
- Откройте приложение "Системные настройки".
- Перейдите к параметру "Отображение и монитор" в разделе "Оборудование".
- Затем для параметра "Предотвращение разрывов" установите значение "Полноэкранное перерисовывание". картинка
В XFWM также есть возможность включить вертикальную синхронизацию для предотвращения разрывов, что никогда не работает!
Вы также можете использовать диспетчер компоновки, например compton или xcompmgr, с оконным менеджером Openbox или XFWM. Но есть еще одна небольшая настройка, позволяющая предотвратить эффективный разрыв экрана Linux на графике Intel.
Предотвращение разрывов экрана в Linux с конфигурацией X11
Можно свести к минимуму разрывы экрана, немного изменив конфигурацию X11. Однако этот параметр может работать не всегда, особенно со встроенной графикой процессора Intel Atom или Celeron.
Сначала создайте новый каталог конфигурации X11, mkdir -p /etc/X11/xorg.conf.d/ , если он еще не существует.
Создайте там файл конфигурации 20-intel.conf с вашим любимым текстовым редактором в качестве пользователя root. судо нано /etc/X11/xorg.conf.d/20-intel.conf
Поместите туда приведенную ниже конфигурацию, сохраните файл и выйдите из тестового редактора.
Наконец перезапустите сеанс X11, выйдя из системы и войдя снова, или просто перезагрузите компьютер.
Однако вам может потребоваться добавить несколько других дополнительных параметров, таких как параметр «AccelMethod» «uxa» или параметр «TripleBuffer» «true» в файле 20-intel.conf.
Проверено с графикой Intel HD3000 2-го поколения и HD5500 5-го поколения, обе работают без этих опций.
Заключение и мысли
Итак, это все об устранении разрывов экрана в Linux с графикой Intel, надеюсь, это вам помогло.
Включение вертикальной синхронизации снижает производительность тестов графики, поэтому в следующий раз я поэкспериментирую с TripleBuffer, полностью отключу вертикальную синхронизацию и сравним разницу.
Если у вас есть вопросы или предложения, просто оставьте комментарий. Также не забудьте поделиться, если вы нашли это руководство достойным публикации.
Обновлено: 19 марта 2021 г.
Теперь не язвите. Название этой статьи не означает, что вы исправите разрывы изображения с помощью графики Intel, но, скорее, если у вас есть компьютер с графикой Intel и вы используете Linux, вы, возможно, столкнулись с разрывами видео, обычно это горизонтальные линии в верхней трети изображения. кадр видео. Обычно это происходит на рабочих столах Gnome, Xfce или MATE, в меньшей степени на Plasma, независимо от основного выбора дистрибутива. Консистенция ftw.
Во всяком случае, я уже много раз сталкивался с этой проблемой, но в последнее время она, кажется, стала возникать несколько чаще. Итак, давайте проведем небольшое руководство, которое, мы надеемся, исправит все ваши проблемы или, по крайней мере, позволит вам наслаждаться плавным и четким воспроизведением видео. После меня.
Графика Intel
Прежде чем решить проблему, нам нужно ее понять. В разделе «Решение» ниже я буду писать всякую техноболтовню, и если вы просто слепо скопируете, вы решите проблему, но вы не будете знать, почему. Итак, начнем с обзора графического стека Intel. Это относится к переходному драйверу под названием «intel», который охватывает широкий спектр различных наборов микросхем.
Разрыв видео обычно происходит из-за несоответствия вашего дисплея и драйвера, поэтому вы видите обновление кадров.Вы можете создавать собственные конфигурации Xorg, которые переопределяют поведение по умолчанию, чтобы вы могли использовать определенные функции в графическом стеке, которые не включены (или отключены) по умолчанию.
Теперь все перечисленное в связанном обзоре может каким-то образом повлиять на рендеринг видео, и исследовательская работа здесь ни в коем случае не является тривиальной. После долгих прочтений (и некоторых догадок) я сузил список до одного потенциального главного виновника. Итак, давайте посмотрим, что дает.
- Опция "TearFree" "boolean" — отключение или включение обновлений TearFree. Эта опция заставляет X выполнять весь рендеринг в резервный буфер перед обновлением фактического отображения... Эта опция отключена по умолчанию, но вы можете включить ее. Это означает, что используется больше видеопамяти, но вы также должны добиться более плавного воспроизведения.
Хорошо, теперь, когда мы знаем потенциальную настройку, мы можем ее реализовать. Действительно, чтобы решить эту проблему, мы создадим файл конфигурации Xorg, который переопределит значения по умолчанию.
Решение
Нам нужно создать собственный файл конфигурации:
sudo mkdir -p /etc/X11/xorg.conf.d
sudo touch /etc/X11/xorg.conf.d/20-intel.conf
Откройте этот файл в текстовом редакторе (с помощью sudo или от имени пользователя root) и добавьте следующий текст:
Раздел «Устройство»
Идентификатор «Intel Graphics»
Драйвер «XXXX»
Опция «TearFree» «true»
EndSection
Замените XXXX на правильное имя драйвера для вашего конкретного оборудования. Вы можете использовать общую информацию или точную версию драйвера. Например, на одном из моих ноутбуков драйвер i915, поэтому раздел выглядит следующим образом:
Раздел «Устройство»
Идентификатор «Intel Graphics»
Драйвер «i915»
Опция «TearFree» «true»
EndSection
Есть много способов проверить, какой драйвер используется в вашей системе:
sudo lspci -k | grep -EA3 'VGA|3D|Дисплей'
grep "LoadModule" /var/log/Xorg.0.log
Кроме того, вы также можете проверить с помощью команды inxi:
Между системами могут быть некоторые различия, так как некоторые дистрибутивы Linux хранят журналы в каталоге /var, а другие — в каталоге /run. Более того, команда inxi может быть недоступна или не установлена. Команда lspci является наиболее безопасной и должна работать на любой системе.
После идентификации драйвера запишите имя драйвера в файл 20-intel.conf, сохраните файл и перезапустите сеанс. Вы можете перезагрузиться или просто выйти из системы, а затем войти снова. Теперь у вас должно быть плавное воспроизведение видео без разрывов.
Альтернативные исправления
Возможно, что только одна добавленная выше строка Option не работает. Так что, возможно, вам нужно быть немного более строгим. Вот два дополнительных параметра, которые можно включить в файл 20-intel.conf:
- Опция «AccelMethod» «string» — выберите метод ускорения. Есть парочка. Этот параметр определяет метод аппаратного ускорения. UXA (Unified Acceleration Architecture) — более старый, но более зрелый бэкэнд. SNA (Новое ускорение SandyBridge) — это новый метод, который заменяет UXA и используется по умолчанию. Если у вас есть разрывы видео, вы можете вернуться к старой серверной части, так как она обеспечивает более широкую общую совместимость.
- Опция "DRI" "string" – отключение или включение поддержки DRI . Обычно это не должно быть проблемой, и ваша система должна использовать OpenGL ES 3. Однако, если у вас есть разрыв видео, вы можете установить для этого параметра значение «3».
Тогда файл конфигурации становится:
Раздел «Устройство»
Идентификатор «Intel Graphics»
Драйвер «XXXX»
Опция «TearFree» «true»
Опция «AccelMod» «uxa»
Опция "DRI" "3"
EndSection
Заключение
Добавить . Я тестировал первый 20-intel.conf в Ubuntu MATE, Xubuntu и Fedora, в нескольких редакциях этих дистрибутивов. В большинстве случаев достаточно варианта TearFree. Одна из версий дистрибутива также требовала метода ускорения. Наконец, только в одном случае автономная опция DRI (без двух других) решила проблему разрыва. Я рекомендую, учитывая, что существует довольно много видеокарт, попробовать любую комбинацию из этих трех вариантов. Это немного похоже на колдовство, и, возможно, так оно и есть.
По крайней мере, это колдовство с хорошими результатами. В идеале вам никогда не придется сталкиваться с разрывами в ваших видео. Но рабочий стол Linux имеет несколько кардинальных проблем, и подход, ориентированный на пользователя и продукт, является самой большой из них, поэтому ошибки будут появляться и исчезать, а затем возвращаться, и вы будете иметь неустойчивое, случайное их проявление в разных дистрибутивах. версий и аппаратных платформ. В любом случае, попробуйте, посмотрите, что даст, и, надеюсь, вы сможете смотреть видео с плавным и чистым воспроизведением. Увидимся.
Привет, я новичок в Linux, и пока он мне нравится. Однако есть одна проблема, которую я никак не могу решить: разрывы экрана.
Я чаще всего это замечаю, когда смотрю видео на YouTube в Firefox.Я попытался посмотреть, не конфликтует ли это с браузером, поэтому я попробовал браузер Pale Moon (единственный другой браузер, в котором нет экстремального разрыва экрана с большими случайными геометрическими фигурами повсюду), и происходит обычный разрыв экрана. на Pale Moon при просмотре видео на YouTube, а также при прокрутке страниц вверх и вниз.
Я испробовал несколько средств, таких как отключение аппаратного ускорения в Firefox, отключение vblank_mode для xfwm4 в редакторе настроек и переключение на проприетарный драйвер (он автоматически использовал версию драйвера для Linux и говорил, что нет дополнительные драйверы доступны на вкладке «Дополнительные драйверы» раздела «Программное обеспечение и обновления»).
Вот информация о моем рабочем столе:
Модель: HP p6203w
ОС: Linux Lite - Ubuntu 20.04.3 LTS, ядро 5.4.0-89-generic (x86_64)
Поставщик: Nouveau < br />Видеокарта: NVIDIA GeForce 6150SE nForce 430 (старая, я знаю, лол)
f33dm3bits
Золотой участник
"Все сначала сложно, а потом легко"
"Ничто стоящее не бывает легким"
Джеймз_RG1003
Новый участник
Да, конвейер принудительной полной композиции был одной из первых вещей, которые я попробовал, когда впервые установил Linux, и мой рабочий стол зависал всякий раз, когда я смотрел видео в проигрывателе VLC. Похоже, это решило эту конкретную проблему.
Алексей
Известный участник
Если он не сломан, не чините его. Если не можешь починить, не ломай. Вы пожинаете то, что настроили.
Джеймз_RG1003
Новый участник
Алексей
Известный участник
Ваша карта Nvidia настолько устарела, что для нее нет драйвера для Linux?
Драйверы Unix | NVIDIA
Если он не сломан, не чините его. Если не можешь починить, не ломай. Вы пожинаете то, что настроили.
Алексей
Известный участник
Вы можете попробовать запустить Debian 9 Stretch и установить драйвер nvidia-legacy-304xx.
Debian 9 поддерживается только до июня 2022 года, так что вы выиграете немного времени.
Вот статья:
Если он не сломан, не чините его. Если не можешь починить, не ломай. Вы пожинаете то, что настроили.
Джеймз_RG1003
Новый участник
Вы можете попробовать запустить Debian 9 Stretch и установить драйвер nvidia-legacy-304xx.
Debian 9 поддерживается только до июня 2022 года, так что вы выиграете немного времени.
Вот статья:
Я думал, что использую Linux Lite, лол. Это то, что было написано на этикетке, когда я загрузил ОС. Я попробую другие ваши предложения.
rado84
Известный участник
Разрывы изображения — старая проблема видеокарт nvidia. Какое-то время было решение, но недавно оно было сломано, хотя IDK, если nvidia сломала его, или Mozilla, или оба одновременно. Тем не менее, если вы хотите попробовать, запустите
нажмите «Конфигурация отображения X-сервера», затем нажмите кнопку «Дополнительно», а затем установите оба флажка с именами «Принудительно использовать конвейер композиции» и «Принудительно использовать конвейер полной композиции». Сохраните настройки в файл, затем перезагрузитесь. Это должно исправить разрыв экрана.
ОДНАКО. Как я уже сказал, недавно эта функция была нарушена, и если вы используете GNOME или рабочий стол на основе Gnome (например, Cinnamon, который я использую), включение этих двух параметров приводит к отключению перелистывания, что, в свою очередь, вызывает проблемы с родными играми - разрывы в игре, некорректно работающая VSync или вообще не работающая (последнее в случае с ETS2).
Итак, если вы не играете ни в какие игры, эти два варианта nvidia должны вам подойти. Ну, это не будет на 100%, потому что несколько лет назад Mozilla напортачила со своей собственной опцией (опция Firefox + опции nvidia, используемые для устранения разрывов на 100%) для предотвращения разрывов экрана в Linux, но, по крайней мере, вы этого не увидите. часто.
Arch Linux Cinnamon; ядро i7-4770; Palit GTX 1660 Ti 6 ГБ, 32 ГБ DDR3-1600.
Моя группа в Telegram о Linux
Разрыв экрана может быть проблемой в GNU/Linux при использовании некоторых комбинаций графических драйверов и оконных менеджеров, таких как xfwm4 из Xfce 4.12. К счастью, это легко исправить, добавив небольшой фрагмент в файл конфигурации Xorg.
Создайте один из следующих файлов конфигурации в /etc/X11/xorg.conf.d/ (создайте эту папку, если она не существует, в Ubuntu по умолчанию такой папки нет, но она ищет ее и читает файлы в это) с помощью TearFree в разделе "Устройство", чтобы избежать разрывов экрана.
Содержание
Почему Xorg по умолчанию использует разрыв экрана [ редактировать ]
Представьте, что параметр Xorg TearFree был перевернут и назван как-то вроде HorribleSceenTearing . По сути, это то, что делают драйверы графического процессора, когда по умолчанию для TearFree установлено значение false. Так зачем им это делать?
" Параметр "TearFree" не включен по умолчанию, поскольку он имеет недостатки (более высокое потребление памяти графическим процессором, снижение производительности для ненаправленных полноэкранных приложений); кроме того, его можно включить во время выполнения с помощью xrandr.
Возможно, попробуйте облаять дерево вашего DE за то, что он не раскрывает настройки для этого.
Не любите слезы? Используйте Вейланд! "
iGPU Intel [ изменить ]
Некоторым редким процессорам Intel дополнительно потребуется "AccelMethod" "uxa" . Обычно это не так, но это то, что вам нужно добавить, если приведенная выше конфигурация не полностью устраняет разрывы экрана на графических процессорах Intel:
Не используйте «AccelMethod» «uxa», если он вам действительно не нужен. Это может иметь место, если ваше оборудование очень старое. Это не тот случай, если он новый.
Графические процессоры AMD [ изменить ]
Если вы используете не старый графический процессор AMD, вы используете драйвер "amdgpu", и вам нужно следующее:
Если вы используете довольно старую видеокарту AMD, то вы используете драйвер "radeon", а не "amdgpu", и вместо этого вам потребуется:
Если вы не уверены, какой драйвер используете, вы можете проверить журнал X с помощью grep:
драйверы grep /var/log/Xorg.0.log
Это создаст строку, например:
или, если вы используете Intel (i)GPU:
Настройка TearFree с помощью xrandr [ изменить ]
Вы можете изменить TearFree в X с помощью xrandr с помощью:
xrandr --verbose покажет статус TearFree на подключенных дисплеях, а xrandr --verbose|grep TearFree просто перечислит настройки TearFree.
Опция --output обязательна, и вы не можете использовать все . Вы также не можете указать несколько дисплеев с помощью xrandr --output DisplayPort-0 --output DisplayPort-1 --output DisplayPort-2 --set TearFree, поскольку это применяет его только к последнему --output .
Одним из возможных «решений» является запрос xrandr, какие дисплеи оказались подключенными, и использование цикла для применения (или отключения) TearFree с помощью одной команды для каждого дисплея:
Читайте также: