Registrare video 4K a 60 fps su Linux è sempre stato un piccolo incubo per chi usa schede di acquisizione USB di fascia alta. Sulla carta tutto dovrebbe filare liscio: l’hardware rispetta lo standard UVC (USB Video Class), i driver necessari sono già dentro il kernel e in teoria il riconoscimento dovrebbe avvenire in automatico, senza dover installare nulla. Nella pratica però le cose vanno diversamente. Risoluzioni che spariscono, modalità video che non compaiono, funzionalità riconosciute solo a metà. Un fastidio che per anni ha accompagnato streamer, creatori di contenuti e sviluppatori abituati a lavorare su sistemi Linux.
A cambiare le carte in tavola è stata una vicenda legata alla Elgato 4K X, che racconta bene quanto possa essere efficace il modo in cui viene sviluppato il kernel del pinguino. Un bug piccolo, quasi insignificante a guardarlo, nascosto nella fase iniziale di enumerazione USB, impediva alla scheda di girare alla velocità massima. La correzione è arrivata direttamente nel ramo principale e oggi consente di acquisire video 4K a 60 fps senza driver proprietari, software extra o patch artigianali. La modifica è entrata in Linux 6.19 e poi è stata portata anche nei rami stabili più diffusi.
Un problema che spuntava solo a 10 Gbps
La Elgato 4K X sfrutta una connessione USB 3.2 Gen 2 da 10 Gbps e arriva fino a 4K144 tramite HDMI 2.1. Un dispositivo che, almeno teoricamente, dovrebbe andare a braccetto con il driver uvcvideo. Eppure il comportamento osservato dagli utenti era strano: collegandola a una porta SuperSpeed Plus, la scheda iniziava la negoziazione a 10 Gbps ma dopo pochi secondi si scollegava. Poi si ripresentava a 5 Gbps, stavolta con un identificativo hardware diverso.
Risultato pratico? Il sistema vedeva la scheda, OBS Studio la riconosceva, ma le opzioni video si fermavano a 4K a 30 fps. Le modalità a 60 fps sparivano e basta. Secondo Johannes Brüderl, autore della patch, il problema non stava nella cattura video vera e propria: il dispositivo non riusciva a completare l’identificazione iniziale quando lavorava alla velocità massima prevista dal controller USB.
C’è poi un dettaglio curioso. La Elgato 4K X espone due Product ID diversi a seconda della velocità negoziata. A 10 Gbps appare con Vendor ID 0fd9 e Product ID 009b. Se invece qualcosa rompe la procedura e la costringe a tornare a 5 Gbps, l’identificativo diventa 009c. Un indizio prezioso, perché bastava guardare quel valore per capire se la scheda stesse lavorando bene o fosse già finita in modalità ridotta.
La causa nascosta nel BOS Descriptor
Analizzando i log del kernel saltava fuori sempre lo stesso copione: negoziazione iniziale corretta, richiesta di alcuni descrittori, timeout, riconnessione a velocità più bassa. Il colpevole era un componente poco noto della specifica USB, il Binary Object Store, abbreviato in BOS. Si tratta di un descrittore che raccoglie le informazioni avanzate del dispositivo: supporto SuperSpeed, funzionalità SuperSpeed Plus, gestione energetica e via dicendo. Linux lo richiede molto presto nella fase di enumerazione, e proprio lì la scheda Elgato, operando a 10 Gbps, smetteva di rispondere.
Verrebbe da chiedersi perché su Windows tutto funzionava. La risposta non ha nulla a che vedere con una maggiore compatibilità hardware: semplicemente il sistema Microsoft segue una sequenza di enumerazione diversa e non innesca la condizione che manda in blocco il firmware della scheda. Quale passaggio preciso eviti il problema, però, nessuno l’ha ancora individuato.
Come risolvere il problema?
Per risolvere su Linux, Brüderl ha introdotto il flag USBQUIRKNO_BOS, che permette di saltare del tutto la richiesta del BOS descriptor per dispositivi specifici. Quando il kernel riconosce la Elgato 4K X con Product ID 009b, evita la richiesta incriminata e prosegue tranquillo con l’enumerazione. La scheda resta a 10 Gbps, mantiene l’identificativo giusto e rende disponibili tutte le modalità, comprese le acquisizioni 3840×2160 a 60 fps. Poche righe di codice, impatto enorme.
E non è un caso isolato. Diversi produttori usano controller video derivati dalla stessa base hardware, così dopo la pubblicazione della correzione altri sviluppatori hanno aggiunto nuovi modelli nella tabella delle quirk del kernel. Tra questi ASUS TUF 4K PRO, AverMedia Live Gamer Ultra 2.1, UGREEN 35871 ed ezcap401, tutti con gli stessi sintomi.
Quali distribuzioni includono la modifica?
Le distribuzioni con kernel 6.19 o successivi includono già la modifica, che è stata portata anche sui rami stabili 6.1, 6.6, 6.12 e 6.18. Per verificare basta osservare il dispositivo tramite sysfs: la presenza del valore 0x20000 nel file delle quirk indica che il flag è applicato. Un altro controllo si fa con lsusb -t: se il dispositivo compare a 10000M e usa il driver uvcvideo, il collegamento SuperSpeed Plus è attivo e OBS mostra tutte le modalità 4K senza limiti.