ทำไมวิดีโอถึงฉีกปัญหาดังกล่าวใน Linux?


101

ฉันใช้หลายรุ่นของ Linux (ส่วนใหญ่เป็นตราสารอนุพันธ์ Debian) มานานกว่าทศวรรษแล้ว ปัญหาหนึ่งที่ฉันไม่ได้เห็นการแก้ไขเป็นที่น่าพอใจคือปัญหาของการฉีกขาดแนวนอนหรือ Vsync ไม่ถูกนำไปใช้อย่างถูกต้อง

ฉันพูดแบบนี้เพราะฉันใช้ distros ที่แตกต่างกัน 5 แบบบนคอมพิวเตอร์ 4 เครื่องที่มีจอภาพหลายตัวและการ์ดกราฟิก Nvidia / AMD / ATI / Intel ทุกครั้งที่มีปัญหากับวิดีโอที่ฉีกขาดด้วยการเคลื่อนไหวเพียงเล็กน้อย

นี่เป็นปัญหาใหญ่โดยเฉพาะอย่างยิ่งตั้งแต่ Windows XP ไม่มีปัญหาเหล่านี้ในฮาร์ดแวร์ที่ทันสมัย ถ้าใครจะใช้ลีนุกซ์เพื่ออะไร, ทำไมพวกเขาถึงต้องการข้อบกพร่องอย่างต่อเนื่องที่จะปรากฏขึ้นเมื่อทำอะไรที่ไม่ใช่ CLI?

ฉันเดาว่าผู้พัฒนาบางคนรู้เกี่ยวกับปัญหานี้หรือสนใจที่จะแก้ไข ฉันได้ลองนักแต่งเพลงทุกคนที่นั่นแล้วและโดยปกติแล้วสิ่งที่ดีที่สุดที่พวกเขาทำได้คือลดปัญหา แต่ไม่ได้กำจัดมัน มันไม่ควรจะง่ายเหมือนการซิงโครไนซ์กับอัตราการรีเฟรชของจอภาพ? มีการเมืองบ้างไหมในชุมชน OSS ที่ป้องกันไม่ให้ใครทำโค้ดที่แก้ไขสิ่งนี้

ทุกครั้งที่ฉันขอความช่วยเหลือเกี่ยวกับปัญหานี้ในอดีตมันอาจได้รับการปฏิบัติเหมือนเป็นคดีขอบ (ซึ่งฉันคิดว่ายากที่จะเชื่อว่าจะได้รับจำนวนครั้งที่ฉันทำซ้ำปัญหา) หรือได้รับวิธีแก้ปัญหาที่อาจเกิดขึ้น มากที่สุดลดการฉีกขาด


2
คุณไม่ได้พูดถึง DE ที่คุณใช้ KDE ได้ดีกับการฉีกขาดเป็นเวลาหนึ่งปีแล้ว
Sparhawk

1
หนึ่งสามารถทำซ้ำปัญหาได้อย่างไร ในคอมพิวเตอร์ Debian / Ubuntu / Mint?
Xen2050

50
XKCDนี้น่าจะพอดีกับที่นี่ ...
Angew

ประสบการณ์การฉีกขาดของฉันแตกต่างไปจากเดิมอย่างสิ้นเชิง ฉันมีความสุขมากกับการเล่นเกมและดูภาพยนตร์บน Linux Steam ได้ทำให้ Linux เป็นแพลตฟอร์มที่ใช้งานได้จริงสำหรับเกมที่ยอดเยี่ยม ฉันได้เล่น Witcher 2 และ Talos Principle เมื่อเร็ว ๆ นี้และฉันไม่ได้เห็นการฉีกขาดในการเล่นเกม 50 ชั่วโมง นี่คือการ์ด Nvidia ที่มีไดรเวอร์ที่เป็นกรรมสิทธิ์ของ Arch ฉันเห็นด้วยกับ Xen2050 ว่าคำถามนี้จะมีประโยชน์มากกว่าหากมีการระบุรายละเอียดที่แน่นอนสำหรับงานสร้างของคุณ ฉันไม่ได้ปฏิเสธว่ามีปัญหาฉันเพิ่งมีประสบการณ์ที่ดีมาก
เขาวงกต

ด้วย Nvidia compositing แก้ไขปัญหาให้ฉันเมื่อฉันเคยใช้ Nvidia ย้อนกลับไปเมื่อปี 2550 ไม่ใช่ในแบบเต็มหน้าจอ แต่เนื่องจากหน้าต่างแบบเต็มหน้าจอปิดตัวแต่งเพลง ด้วย Intel คุณได้ลองตั้งค่ามาตรา "อุปกรณ์" ตัวเลือก "TearFree" "true" ใน X หรือไม่? มันใช้วิดีโอ RAM เป็นสองเท่า แต่ฉันคิดว่ามันจะใช้งานได้
Zan Lynx

คำตอบ:


92

ทั้งหมดนี้เกิดจากข้อเท็จจริงที่ว่าเซิร์ฟเวอร์ X ล้าสมัยเหมาะสำหรับฮาร์ดแวร์กราฟิกในปัจจุบันและโดยพื้นฐานแล้วการสื่อสารโดยตรงทั้งหมดของการ์ดวิดีโอนั้นเป็นส่วนเสริม ("แพทช์") บนแกนกลางป่องโบราณ เซิร์ฟเวอร์ X ไม่มีวิธีการซิงโครไนซ์ระหว่างผู้ใช้ที่แสดงผลหน้าต่างและหน้าจอที่แสดงหน้าต่างดังนั้นเนื้อหาจะเปลี่ยนไปในระหว่างการเรนเดอร์ นี่เป็นหนึ่งในปัญหาที่รู้จักกันดีของเซิร์ฟเวอร์ X (มีหลายรุ่นทั้งที่เซิร์ฟเวอร์ทำและล้าสมัย - การจัดการเหตุการณ์ในหน้าต่างย่อย, ข้อมูลเมตาเกี่ยวกับ windows, กราฟิกดั้งเดิมสำหรับการวาดโดยตรง ... ) ชุดเครื่องมือวิดเจ็ตส่วนใหญ่ต้องการที่จะปัดเศษทั้งหมดนี้ แต่การฉีกขาดยังคงเป็นปัญหาเพราะไม่มีกลไกในการจัดการ ปัญหาเพิ่มเติมเกิดขึ้นเมื่อคุณมีการ์ดหลายใบที่ต้องใช้ไดรเวอร์ที่แตกต่างกัน

Wayland ซึ่งค่อนข้างจะพยายามเปลี่ยน X โดยไม่ได้ตั้งใจนั้นสนับสนุนการซิงโครไนซ์ vsync แบบอวดดีในแกนกลางของมันและโฆษณาเพื่อให้ทุกเฟรมสมบูรณ์แบบ

หากคุณอย่างรวดเร็ว google "วิดีโอ Wayland ฉีกขาด" คุณจะพบข้อมูลเพิ่มเติมเกี่ยวกับทุกสิ่ง


38
+1สำหรับ“ X คือปัญหาลองดูที่ Wayland” ตายแล้วมันเป็นคำตอบที่ถูกต้อง
HalosGhost

2
@HalosGhost การประกาศทาง Wayland ในขณะเดินทาง :) ยังไม่มีการรองรับเครือข่าย
kagali-san

3
@ kagali-san ฉันไม่ได้บอกว่า Wayland นั้นสมบูรณ์แบบ (ไม่ใช่) แต่มันดีกว่า X แน่นอน :)
HalosGhost

8
@ kagali-san: Weston ได้รวมแบ็คเอนด์ RDP ไว้เมื่อปีที่แล้วหากคุณพบว่ามีความเกี่ยวข้องกับคำถามเกี่ยวกับการฉีกวิดีโอ
grawity

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
Ivan

1
Openbox และอื่น ๆ ใช้งานได้อย่างไม่ฉีกขาด - คุณเพียงแค่เรียกใช้ตัวแต่งเพลงแยกต่างหากเช่นคอมพ์ทำงานได้อย่างยอดเยี่ยม
wingedsubmariner

1
@wingedsubmariner เมื่อคุณอ้างถึง openbox คุณหมายถึง fluxbox ด้วยหรือเปล่า
nass

นอกจากนี้ยังมีประโยชน์อย่างมากที่คุณจะทราบสถานะ WM ในสภาพแวดล้อมหน้าต่างที่แตกต่างกัน
nass

@nass อย่างแน่นอน ตัวจัดการหน้าต่างไม่เคยเป็นปัจจัย จำกัด
wingedsubmariner

14

หากคุณกำลังใช้ไดรเวอร์ NVIDIA> = 365.20 แล้วลองเปิดใช้งาน "บังคับองค์ประกอบทางท่อเต็ม" nvidia-settingsตัวเลือกใน

ป้อนคำอธิบายรูปภาพที่นี่


nVidia Quadro บน Lenovo W520, Fedora 25 และนี่ทำงาน :)
Jerther

4
หากคุณไม่มีตัวเลือกให้คลิก "การตั้งค่าขั้นสูง" ที่ด้านล่างของหน้าต่างและจะปรากฏขึ้น ทำไมค่าเริ่มต้น "การจัดวางองค์ประกอบแบบเต็ม" ไม่ได้เปิดใช้งานเป็นค่าเริ่มต้น ..
Rast

1
@Rast เพราะมันเคยมีปัญหาเรื่องประสิทธิภาพ
Ruslan

BTW ปรากฏว่าอย่างน้อยไดรเวอร์ Intel ยังมีTearFreeตัวเลือกที่คุณสามารถใส่ลงไปในDeviceส่วนที่เกี่ยวข้อง ฉันเพิ่งลองและมันก็ให้ผลคล้ายกับท่อส่งน้ำ Composition เต็มรูปแบบของ nvidia
Ruslan

ฉันดูเหมือนจะไม่ได้รับการตั้งค่าให้บันทึกในการรีบูตฉันพยายามสร้างไฟล์ ~ / .xinitrc และวาง "nvidia-settings --load-config-only &. / etc / X11 / xinit / xinitrc" ในนั้น แต่นั่น ดูเหมือนจะไม่ทำงาน
FragmentalStew

9

ฉันมีแรงฉีกขาดที่นี่และตอนนี้ก็แก้ไขได้

หลังจากอ่านสิ่งนี้ ( คำอธิบายที่ยอดเยี่ยม ) เกี่ยวกับการทำงานของเซิร์ฟเวอร์ Xorg ฉันรู้ว่าเซิร์ฟเวอร์ X ใช้สีหน้าต่างปรับปรุงโดยตรงกับการ์ดหน่วยความจำ ณ เวลาใด ๆ แบบสุ่มเว้นแต่ว่าคุณจะใช้ตัวจัดการหน้าต่างที่เปิดใช้งานการผสม

เมื่อเปิดใช้งานการจัดเรียงตัวจัดการหน้าต่างจะรวบรวมการเปลี่ยนแปลงทั้งหมดจากบัฟเฟอร์หน่วยความจำหน้าต่างที่แตกต่างกันสร้างภาพผลลัพธ์สำหรับทั้งหน้าจอและถ่ายโอนไปยังการ์ดแสดงผลในช็อตเดียว

การแจกแจงที่ทันสมัยส่วนใหญ่มีตัวจัดการหน้าต่างแบบผสม KWin สำหรับ KDE, Mutter สำหรับ Gnome, Muffin สำหรับ Cinnamon, Marco for Mate, xfwm สำหรับ XFCE, ฯลฯ อย่างไรก็ตามการเรียงแบบอาจปิดการใช้งานเพื่อประหยัดทรัพยากร

ในคอมโพสิตกรณีของฉันถูกปิดใช้งานใน KDE4 เมื่อเปิดใช้งานน้ำตาก็หายไป แก้ไข : ผมยังจำเป็นต้องมีการเปลี่ยนแปลงเกี่ยวกับตัวเลือก KWin กลยุทธ์ VSync จากอัตโนมัติที่จะนำมาใช้ใหม่เนื้อหาบนหน้าจอเพื่อให้ได้รับการกำจัดของการฉีกขาดเช่นเดียวกับที่ได้อธิบายไว้ในนี้KWin รายงานข้อผิดพลาดที่เฉพาะเจาะจง

ตัวเลือกไดรเวอร์ยังสามารถเป็นปัจจัย ในกรณีของฉันตัวเลือกเริ่มต้นใช้งานได้ Arch วิกิพีเดียมีเอกสารที่ดีเกี่ยวกับตัวเลือกสำหรับบัตรการแสดงผลที่แตกต่างกันเช่นการ์ด Intelหรือการ์ด NVIDIA

ในการตรวจสอบว่ามีการเปิดใช้งานตัวเลือกในการกำหนดค่า Xorg ปัจจุบันของคุณหรือไม่คุณสามารถตรวจสอบบันทึกได้ ตัวอย่างเช่นเพื่อตรวจสอบว่าเปิดใช้งาน DRI หรือไม่:

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

1
เมื่อวันที่ XFCE (ใน Xubuntu 16.04) คอมโพสิตเปิดใช้งานโดยค่าเริ่มต้น แต่ซิงค์กับว่างแนวตั้งไม่ได้ ใช้xfwm4-tweaks-settingsคำสั่งเพื่อแสดงแอปพลิเคชัน tweaker และบนแท็บ Compositor คุณสามารถค้นหาตัวเลือกด้านบน การเปิดใช้มีความแตกต่างอย่างมากและสามารถตรวจสอบได้ที่นี่: vsynctester.com/index.html (เปิด / ปิดคุณสมบัติขณะที่แสดงภาพเคลื่อนไหว) มันไม่สมบูรณ์แบบมีบางเฟรมที่พลาด แต่ดีกว่าเมื่อมันถูกปิด
karatedog

1

การแก้ปัญหาคือที่นี่: ลินุกซ์มิ้นท์ 17.3 MATE ตอนนี้มาพร้อมกับคอมป์ตัน

เพียงแค่ไปที่Desktop Settings-> Windows-> และเลือกWindow Manager Metacity + Comptonแค่นั้นแหละ.

ฉันมีการ์ดแสดงผลของเอเอ็มดีและมันไม่ได้ผลสำหรับไดร์เวอร์โอเพ่นซอร์ส

สำหรับไดร์เวอร์ AMD ที่เป็นกรรมสิทธิ์เมื่อวิดีโอ HTML5 ถูกขยายให้เต็มหน้าจอคุณอาจเห็นสีน้ำเงินที่เต็มทั้งหน้าจอ ในการแก้ไขปัญหานี้ให้สร้างและchmod +xสคริปต์ด้านล่าง:

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

เรียกใช้เมื่อใดก็ตามที่คุณรีสตาร์ทระบบ แต่อย่าพยายามเพิ่มเข้าไปStartup Applicationsเพราะอาจทำให้การเริ่มต้นทำงานหยุดชะงักเนื่องจากสาเหตุบางประการ


0

ใน Peppermint Linux ไปที่การตั้งค่า> Peppermint Control Center เลือกเดสก์ท็อปเอฟเฟกต์และเปิดใช้งาน "เปิดใช้งานเอฟเฟ็กต์เดสก์ท็อป" และ "ซิงโครไนซ์ภาพวาด


0

ฉันใช้ Linux Mint XFCE และปัญหานี้ทำให้ฉันผิดหวังอยู่พักหนึ่ง ผมพบวิธีแก้ปัญหาสำหรับแล็ปท็อปของฉันกับ Intel รวมกราฟิกการ์ดและแก้ไขปัญหาการฉีกขาด สำหรับเดสก์ท็อปของฉันกับการ์ด NVIDIA ที่ใช้ไม่ได้ แต่ฉันเพิ่งพบผู้กระทำผิด

ฉันมีประสิทธิภาพเพิ่มขึ้นทันทีเมื่อฉันปิดการใช้งานหน้าต่างคอมโพสิต นี่เป็นวิธีที่คุณสามารถทำได้:

ไปที่การตั้งค่าทั้งหมด / เครื่องมือจัดการหน้าต่าง Tweaks / นักแต่งเพลงและปิดการใช้งานสิ่งนั้น

โปรดทราบว่านี่เป็นแบบเฉพาะ distro และของฉันคือ Mint กับ XFCE และฉันไม่รู้ว่าจะหาสิ่งที่คล้ายกันใน distros อื่นได้อย่างไร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.