Como os gráficos do OpenGL podem ser exibidos remotamente usando o VNC?

24

Estou tentando executar um programa que usa o OpenGL para renderizar um modelo em uma viewport através do VNC sem êxito.

A mensagem de erro que recebo é - Xlib: extensão "GLX" ausente no visor ": 1.0".

Entendi que o VNC pode ser configurado para renderizar todos os gráficos remotamente e enviar uma captura de tela compactada do buffer de exibição para o cliente local. Isso parece negar a necessidade de extensões GLX no cliente local. O VNC pode ser configurado dessa maneira e você pode descrever brevemente como?

Hospedeiro remoto:

vncserver no RHEL 5

Cliente local:

UltraVNC no Windows XP

Jared Brown
fonte
O programa OpenGL funcionará localmente no console RH # L5? Funcionará remotamente via X-Windows? Caso contrário, não funcionará no VNC.
precisa saber é
2
Por que este é um Wiki da comunidade?
Chris S
Pensei que, se fosse um wiki da comunidade, as pessoas pudessem editar a pergunta para torná-la mais relevante para o arquivamento.
Jared Brown

Respostas:

17

Você pode querer consultar o Virtual GL

Citação: "VirtualGL é um pacote de código aberto que oferece a qualquer software de exibição remota Unix ou Linux a capacidade de executar aplicativos OpenGL com aceleração total do hardware 3D"

totaam
fonte
14

Estou usando o x11vnc para obter acesso remoto a qualquer coisa que o monitor esteja exibindo. O x11vnc conversa com o servidor X11 local e copia o buffer de quadros do servidor para o cliente via vnc. Como o servidor X11 local processa tudo com a aceleração por hardware, eu recebo OpenGL por VNC acelerado por hardware, mesmo com todos os efeitos interessantes da área de trabalho. É assim que inicio o x11vnc:

x11vnc -rfbauth ~/.vnc/passwd  -display :0 -forever -bg -repeat -nowf -o ~/.vnc/x11vnc.log

Eu acho que quase qualquer visualizador vnc funciona, mas eu recomendaria turbovnc ou tigervnc. Tentei o VirtualGL primeiro e funciona bem, mas não para toda a área de trabalho, apenas para aplicativos OpenGL individuais.

É até possível alterar a resolução no monitor / vnc usando xrandr. Por exemplo:

xrandr -q (to see available modes and outputs)
xrandr --output DVI-I-0 --mode "1024x768" (change mode on DVI output)

(É possível adicionar novas resoluções se os modos disponíveis não forem suficientes, mas isso estiver fora do escopo aqui.)

Então agora eu tenho uma sessão VNC totalmente acelerada e redimensionável em hardware OpenGL.

Henrik
fonte
1
Tentei essa abordagem com o xfce4 e o liquidificador em uma máquina Tesla K80 GCE ... funcionou perfeitamente. O Gnome-shell ainda não era exibido corretamente por algum motivo, como sempre. askubuntu.com/questions/229989/...
Raio Foss
1

Desative o driver especial de gancho de vídeo usado pelo UltraVNC ou use o TightVNC.

Como o driver UltraVNC é usado para melhorar o desempenho, ele descarta qualquer tipo de processamento de vídeo feito na placa de vídeo, como o OpenGL.

O driver de vídeo que o UltraVNC instala isso por padrão, faz com que ele não exiba gráficos OpenGL. Observe que desabilitar o driver diminuirá drasticamente o desempenho. Observe também que a exibição de itens renderizados no desempenho do OpenGL sofrerá nas duas extremidades, pois a máquina cliente agora tem muito mais trabalho a fazer e a largura de banda necessária é muito maior. Não espere nada acima de 4 segundos por quadro (não 4 qps, mais como 0,25 qps)

IceMage
fonte
Quando você diz desativar o gancho de vídeo no UltraVNC, está se referindo ao cliente local? O vncserver em execução no host remoto não precisaria ser configurado?
Jared Brown
Não, quero dizer o cliente local. O UltraVNC inclui um driver de vídeo instalado com ele. A menos que você diga explicitamente o contrário, o driver de vídeo tentará processar todo o vídeo no lado do cliente para que possa compactá-lo e transmiti-lo para uso na rede. Às vezes, é possível especificar no visualizador que você não deseja usar esse recurso, mas o UltraVNC (pelo menos costumava) tende a ignorar isso.
IceMage 25/08/10
Além disso, remoto e local dependem da sua perspectiva. Quando digo local, quero dizer realmente o Host (o computador que está ouvindo novas conexões) e Remoto, o computador que está fazendo a conexão. Corrigirei isso para postagens futuras.
IceMage 25/08/10
OK - Acho que estou usando a linguagem oposta. Quando instalei o visualizador UltraVNC, não acredito que ele tenha um driver de vídeo instalado. O servidor UltraVNC que conheço, mas não o estou usando. Estou usando o vncserver em uma máquina RHEL5 como host.
Jared Brown
Portanto, minha verdadeira pergunta é: como configurar o vncserver para não enviar comandos GLX, mas enviar simplesmente uma tela compactada do buffer de exibição para o visualizador UltraVNC?
Jared Brown