Perché il video sta strappando un simile problema in Linux?


101

Ho usato molte varianti di Linux (principalmente derivati ​​Debian) da oltre un decennio. Un problema che non ho visto risolto in modo soddisfacente è il problema della lacerazione orizzontale, o Vsync non viene correttamente implementato.

Lo dico perché utilizzo 5 distro diverse su 4 computer diversi con vari monitor e schede grafiche Nvidia / AMD / ATI / Intel; ogni volta, c'è stato un problema con lo strappo del video con persino un leggero movimento.

Questo è un grosso problema, soprattutto perché anche Windows XP non ha questi problemi sull'hardware moderno. Se qualcuno userà Linux per qualcosa, perché dovrebbe voler mostrare difetti costanti quando si fa qualcosa di non CLI?

Immagino che o pochi sviluppatori conoscano questo problema o si preoccupino abbastanza per risolverlo. Ho provato praticamente tutti i compositori là fuori, e di solito il meglio che possono fare è minimizzare il problema ma non eliminarlo. Non dovrebbe essere semplice come sincronizzare con la frequenza di aggiornamento del monitor? C'è qualche politica all'interno della comunità OSS che impedisce a chiunque di commettere codice per risolvere questo problema?

Ogni volta che ho chiesto aiuto su questo problema in passato, o viene trattato come un caso limite (che trovo difficile credere che sia dato il numero di volte in cui ho replicato il problema) o ottengo potenziali soluzioni che minimizzare al massimo lo strappo.


2
Non dici quale DE usi. KDE ha funzionato bene con lo strappo per circa un anno.
Sparhawk,

1
Come si può facilmente replicare il problema? In un computer Debian / Ubuntu / Mint?
Xen2050,

50
Questo XKCD sembra adattarsi così bene qui ...
Angew,

La mia esperienza con lo strappo è stata completamente diversa. Sono molto contento di giocare e guardare film su Linux. Steam ha davvero reso Linux una piattaforma praticabile per grandi giochi. Ultimamente ho giocato a Witcher 2 e Talos Principle e non ho visto lacrimare in circa 50 ore di gioco. Questo è con una scheda Nvidia con driver proprietari su Arch. Concordo con Xen2050 che questa domanda sarebbe più utile se fossero fornite specifiche esatte per le tue build. Non sto negando che ci sia un problema, ho appena avuto un'ottima esperienza.
labirinto

Con il compositing di Nvidia ho risolto il problema per me, quando usavo Nvidia nel 2007. Non a schermo intero però perché le finestre a schermo intero disattivano il compositore, si presume che tu abbia intenzione di eseguire un gioco OpenGL penso. Con Intel, hai provato a impostare la sezione "Dispositivo" Opzione "TearFree" "true" in X? Raddoppia l'utilizzo della RAM video ma penso che funzionerà.
Zan Lynx,

Risposte:


92

Tutto ciò è dovuto al fatto che il server X è obsoleto, inadatto all'hardware grafico di oggi e fondamentalmente tutta la comunicazione diretta con la scheda video viene eseguita come estensione ("patch") sull'antico nucleo gonfio. Il server X non fornisce alcun mezzo incorporato di sincronizzazione tra il rendering della finestra da parte dell'utente e lo schermo che visualizza una finestra, quindi il contenuto cambia nel mezzo del rendering. Questo è uno dei problemi ben noti del server X (ne ha molti, l'intero modello di ciò che il server fa ed è obsoleto: gestione degli eventi in sottofinestre, metadati su Windows, primitive grafiche per il disegno diretto ...). I toolkit di widget vogliono principalmente sorvolare su tutto questo, ma lo strappo è ancora un problema perché non esiste un meccanismo per gestirlo. Ulteriori problemi sorgono quando si hanno più schede che richiedono driver diversi,

Wayland, che cerca in qualche modo in modo poco entusiasta di sostituire X, supporta una sincronizzazione vsync pedante nel suo nucleo, e viene pubblicizzato per avere ogni frame esattamente perfetto.

Se vai rapidamente su Google "strappo video di Wayland" troverai maggiori informazioni su tutto.


38
+1per "X è il problema, dai un'occhiata a Wayland." Morto sul serio, è la risposta corretta.
HalosGhost

2
@HalosGhost l'evangelizzazione delle terre in movimento :) ancora nessun supporto per le sessioni di rete?
Kagali-san,

3
@ kagali-san Non ho detto che Wayland fosse perfetto (non lo è). Ma è decisamente meglio di X. :)
HalosGhost

8
@ kagali-san: Weston ha avuto il suo backend RDP unito solo un anno fa, se lo trovi in ​​qualche modo rilevante per una domanda sulla lacerazione dei video.
gravità

3
@orion: e grazie a te questa stessa pagina è ora il risultato n. 1 per wayland video tearing: P
Tobia Tesan

16

La lacerazione dello schermo appare principalmente per due motivi: i driver che non sono ancora presenti e la mancanza di vsync con alcuni gestori di finestre.

Per quanto riguarda i driver, sia i driver liberi che quelli proprietari supportano la composizione a strappo (nvidia e amd entrambi). Tenere presente che, ad esempio, l'abilitazione del desktop privo di lacrime in catalyst ( fglrx) può causare cadute e ritardi di frame, quindi di solito è disabilitato per impostazione predefinita. Per quanto riguarda il driver aperto, vsync dovrebbe essere abilitato per impostazione predefinita. Quindi il problema di lacerazione dello schermo può essere risolto provando driver diversi e configurandoli.

Per quanto riguarda i gestori di finestre, è noto che Openbox, Awesome e altri wms leggeri non supportano lo strappo. XFCE (xfwm, per essere precisi) lo ha risolto nelle ultime versioni, 4.11 / 12 ora hanno Vsync. Anche i principali ambienti desktop non hanno problemi con lo strappo, inclusi GNOME, KDE, Unity e Cinnamon.

Se il problema persiste, l'opzione è provare un altro responsabile della composizione come Compton o Kwin. Kwin è il gestore delle finestre per KDE e ho esperienza nell'uso di kwin in XFCE quando non supportava vsync e funzionava davvero bene.

Quindi la soluzione qui è la sperimentazione, ciò che è rotto in una combinazione di driver / wm può funzionare in un'altra. Credo che la situazione migliorerà presto poiché i driver open source stanno diventando più avanzati e il passaggio a Wayland potrebbe sbarazzarsi di vecchi problemi con Xorg.


5
Non proprio. KDE (con Kwin o altri compositori) continua a piangere a dirotto con NVidia o Intel.
Ivan,

1
Openbox ecc. Funzionano senza lacrime: devi semplicemente eseguire un compositore separato, ad esempio Compton funziona meravigliosamente.
Wingedsubmariner,

1
@wingedsubmariner, quando fate riferimento a openbox, intendete anche fluxbox?
nass

inoltre, estremamente utile notare lo stato di WM in diversi ambienti di finestre.
nass

@ Assolutamente. Il gestore delle finestre non è mai un fattore limitante.
wingedsubmariner,

14

Se stai utilizzando un driver nvidia> = 365.20, prova ad abilitare l'opzione "Forza pipeline a composizione completa" in nvidia-settings.

inserisci qui la descrizione dell'immagine


nVidia Quadro su un Lenovo W520, Fedora 25 e questo ha funzionato :)
Jerther,

4
anche se non hai tale opzione, fai clic su "Impostazioni avanzate" nella parte inferiore della finestra e verrà visualizzato. perché questa "pipeline a composizione completa" non è abilitata per impostazione predefinita? ..
Rast

1
@Rast Perché aveva qualche problema di prestazioni.
Ruslan

A proposito, sembra che almeno i driver Intel abbiano anche TearFreeun'opzione che puoi mettere nella Devicesezione corrispondente . L'ho appena provato e dà risultati molto simili alla pipeline Full Composition di nvidia.
Ruslan,

Non riesco a ottenere le impostazioni per salvare sui riavvii Ho provato a creare un file ~ / .xinitrc e inserendo "nvidia-settings --load-config-only &. / Etc / X11 / xinit / xinitrc" ma non sembra funzionare
FragmentalStew

9

Ho avuto una forte lacerazione qui e ora è risolto.

Dopo aver letto questa ( meravigliosa spiegazione ) del funzionamento di un server Xorg, mi sono reso conto che X server dipinge gli aggiornamenti delle finestre direttamente sulla scheda di memoria in qualsiasi momento a meno che non si utilizzi un gestore di finestre abilitato alla composizione.

Quando la composizione è abilitata, il gestore delle finestre mette insieme tutte le modifiche dai diversi buffer di memoria della finestra, crea un'immagine risultante per l'intero schermo e la scarica sulla scheda del display in un colpo solo.

La maggior parte delle distribuzioni moderne ha un window manager di composizione. KWin per KDE, Mutter per Gnome, Muffin per Cinnamon, Marco per Mate, xfwm per XFCE, ecc. Tuttavia la composizione potrebbe essere disabilitata per risparmiare risorse.

Nel mio caso il compositing era disabilitato in KDE4. Una volta abilitato lo strappo è andato via. EDIT : avevo anche bisogno di cambiare le opzioni di KWin della strategia VSync da Automatico a Riutilizzare i contenuti dello schermo al fine di sbarazzarmi degli strappi proprio come spiegato in questo rapporto di bug specifico di Kwin .

Le opzioni del driver possono anche essere un fattore. Nel mio caso le opzioni predefinite funzionano bene. Arch Wiki ha un'ottima documentazione sulle opzioni per diverse schede video come schede Intel o schede NVIDIA .

Per verificare se un'opzione è abilitata nella configurazione xorg corrente, è possibile controllare il registro. Ad esempio, per verificare se DRI è abilitato:

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

1
Su XFCE (in Xubuntu 16.04) la composizione è abilitata per impostazione predefinita, ma la sincronizzazione con il bianco verticale no . Usa il xfwm4-tweaks-settingscomando per mostrare l'applicazione tweaker e nella scheda Compositor puoi trovare l'opzione sopra. L'attivazione ha fatto un'enorme differenza e può essere verificata qui: vsynctester.com/index.html (attiva / disattiva la funzione durante la visualizzazione dell'animazione). Non è perfetto, ci sono alcuni frame persi, ma molto meglio di quando è spento.
Karatedog

1

La soluzione è qui: Linux Mint 17.3 MATE ora viene fornito con Compton .

Vai su Desktop Settings-> Windows-> Window Managere scegli Metacity + Compton. Questo è tutto.

Ho una scheda video AMD e funziona subito per il driver open source.

Per i driver AMD proprietari, quando i video HTML5 sono ingranditi a schermo intero, potresti vedere un colore blu che riempirà l'intero schermo. Per risolvere questo problema, crea e chmod +xlo script seguente:

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

Eseguilo ogni volta che riavvii il sistema, ma non provare ad aggiungerlo Startup Applications- potrebbe interrompere l'avvio per qualche motivo.


0

In Peppermint Linux, vai su Preferenze> Centro di controllo della menta piperita, seleziona Effetti desktop e abilita "Abilita effetti desktop" e "Sincronizza disegno con il bianco verticale".


0

Sto usando Linux Mint XFCE e questo problema mi ha frustrato per un bel po '. Ho scoperto la soluzione per il mio laptop con scheda grafica integrata Intel e ha risolto il problema di lacerazione . Per il mio desktop con scheda NVIDIA quel trucco non può funzionare. Ma ho appena trovato colpevole.

Ho un immediato miglioramento delle prestazioni quando ho disabilitato la composizione delle finestre. Ecco come puoi farlo:

Vai su Tutte le impostazioni / Window Manager Tweaks / Compositor e disabilita l'intera cosa.

Tieni presente che questo è specifico per la distro e il mio è Mint con XFCE e non ho idea di come trovare cose simili su altre distro.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.