Rodando Jogos Steam no Linux com nVidia Optimus

Se você tem um computador com Linux (Ubuntu e assemelhados) e placa de vídeo nVidia Optimus alternando com vídeo Intel e está tentando rodar o Steam e os jogos não abrem, ao experimentar rodar o Steam via linha de comando (rodando o comando steam num terminal) você observa mensagens de erro do tipo

malloc: unknown:0: assertion botched

free: called with unallocated block argument

last command: (null)

Aborting...Aborted (core dumped)

ou

Game removed: AppID 400 "Portal", ProcID 18446

então você precisa rodar os programas (ou todo o steam) com a variável LD_PRELOAD com o seguinte comando num terminal:

LD_PRELOAD="libpthread.so.0 libGL.so.1" __GL_THREADED_OPTIMIZATIONS=1 optirun steam

Alternativamente, é possível editar os ícones de atalhos no desktop, mudando o campo "aplicativo" para, por exemplo:

LD_PRELOAD="libpthread.so.0 libGL.so.1" __GL_THREADED_OPTIMIZATIONS=1 optirun steam steam://rungameid/400

Isto vai lançar o jogo. Para tanto, use o próprio Steam para criar um atalho diretamente para um determinado jogo, depois clique no atalho com o botão direito, dê propriedades e altere o comando a ser executado adicionando o LD_PRELOAD com os parâmetros, de forma semelhante à acima. A vantagem é poder rodar somente os jogos mais pesados usando a GPU nVIdia.

O nVidia Optimus permite rodar aplicações menos pesadas na GPU Intel e chavear para a GPU nVidia quando há necessidade, economizando energia (especialmente útil em notebooks).