Basicamente, o que eu quero fazer é permitir a maioria dos aplicativos gráficos de buffer de quadros padrão (pelo menos, qualquer um que suporte saber qual dispositivo / dev / fb * deve usar ou pode deduzir que no buffer de quadros o VT do qual eles lançam está usando ) para operar em um monitor específico em um sistema com vários monitores. Na verdade, isso é trivial com o fbcon assumindo que você possui um sistema com várias placas gráficas ... Mas eu quero fazê-lo funcionar com placas com zaphod, o que não é possível no momento (pelo menos até três dias de pesquisa podem dizer) eu) sem código personalizado. Quero dizer, pode ser possível para placas nvidia, eu não saberia, mas a radeondrmfb definitivamente cria apenas um buffer de quadro linux para toda a placa, com os três monitores mostrando a mesma saída.
Portanto, a solução teórica que cheguei é a seguinte: uso um código semelhante ao encontrado aqui: http://betteros.org/tut/graphics1.php#dumb poliu um monte, já que esse é apenas um código de demonstração para mostrar a você como usar kms / drm de maneira semelhante a um buffer de quadro e criar um buffer correspondente a cada conector que seja reportado como ativo e conectado, com base nas dimensões da tela de cada um (possivelmente o dobro do tamanho, para permitir o buffer duplo do y-pan) e registre-se no kernel como um driver de dispositivo, criando um descritor de arquivo / dev / fb {n} para cada buffer.
Em seguida, implemente um código que permita que o aplicativo do driver se apresente ao kernel como se fosse um dispositivo buffer de quadro (efetivamente é neste momento, e eu suspeito que seja assim que o radeondrmfb opera, mas não analisei completamente o radeon_fb.c a fonte do kernel ainda, então estou supondo), enquanto implementava todas as funções padrão esperadas do framebuffer do linux por meio de kms / drm.
Nesse ponto, o kernel padrão do grub / syslinux arg fbcon = map: deve funcionar para colocar consoles framebuffer para números VT específicos em consoles específicos (por exemplo, se meu driver conseguir alocar / dev / fb1, / dev / fb2 e / dev / fb3, então fbcon = map: 123 deve fazer com que tty1 apareça no monitor associado a / dev / fb1, tty2 em / dev / fb2 e assim por diante). Nesse ponto, o lançamento da maioria dos aplicativos framebuffer bem escritos como o fbi deve iniciá-los anexados ao framebuffer na qual a instância fbcon que os chamou está.
Não há garantias e é provável que aplicativos com buffer de quadros mal escritos capturem / dev / fb0 e arruinem o seu dia (e eu suspeito que qualquer coisa usando o directfb fará com que coisas horríveis e horríveis ocorram), mas em teoria isso deve me dar a capacidade de visualizar 3 ttys simultaneamente sem X ou opere três aplicativos gráficos de buffer de quadros simultaneamente, nos meus três monitores, todos passando pelo meu único cartão de três cabeças.
Agora estou totalmente fora do meu alcance aqui, e estou mergulhando profundamente, efetivamente escrevendo um driver de dispositivo aqui ... Portanto, qualquer pessoa com experiência com esse tipo de coisa é capaz de me dizer se minha hipótese é sólida e / ou me dá alguns conselhos? Além de: "Você é louco, basta usar o X!" claro.
fonte