NVIDIA-PRIME: Não é possível mudar para Intel

10

Sempre que mudo do meu gpu (gtx 1060) para o meu igpu (Intel 530), não consigo inicializar. A tela de carregamento está bloqueada com a seguinte mensagem:

[Falha] Falha ao iniciar o NVIDIA Persistence Daemon. Consulte 'systemctl status nvidia-persistenced.service' para obter detalhes.

No entanto, eu posso inicializar quando voltar para a Nvidia gpu e mudar para minha igpu sem reiniciar o trabalho temporariamente. Estou usando o Kubuntu 16.10 e apenas a tela do meu laptop interno. Essa é a saída quando eu alterno para o meu igpu:

sudo prime-select intel
Info: the current GL alternatives in use are: ['nvidia-378', 'nvidia-378']
Info: the current EGL alternatives in use are: ['nvidia-378', 'nvidia-378']
Info: selecting nvidia-378-prime for the intel profile
update-alternatives: using /usr/lib/nvidia-378-prime/ld.so.conf to provide /etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf (x86_64-linux-gnu_gl_conf) in manual mode
update-alternatives: using /usr/lib/nvidia-378-prime/ld.so.conf to provide /etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf (x86_64-linux-gnu_egl_conf) in manual mode
update-alternatives: using /usr/lib/nvidia-378-prime/alt_ld.so.conf to provide /etc/ld.so.conf.d/i386-linux-gnu_GL.conf (i386-linux-gnu_gl_conf) in manual mode
update-alternatives: using /usr/lib/nvidia-378-prime/alt_ld.so.conf to provide /etc/ld.so.conf.d/i386-linux-gnu_EGL.conf (i386-linux-gnu_egl_conf) in manual mode

sudo prime-select nvidia
Info: the current GL alternatives in use are: ['nvidia-378-prime', 'nvidia-378-prime']
Info: the current EGL alternatives in use are: ['nvidia-378-prime', 'nvidia-378-prime']
Info: selecting nvidia-378 for the nvidia profile
update-alternatives: using /usr/lib/nvidia-378/ld.so.conf to provide /etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf (x86_64-linux-gnu_gl_conf) in manual mode
update-alternatives: using /usr/lib/nvidia-378/ld.so.conf to provide /etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf (x86_64-linux-gnu_egl_conf) in manual mode
update-alternatives: using /usr/lib/nvidia-378/alt_ld.so.conf to provide /etc/ld.so.conf.d/i386-linux-gnu_GL.conf (i386-linux-gnu_gl_conf) in manual mode
update-alternatives: using /usr/lib/nvidia-378/alt_ld.so.conf to provide /etc/ld.so.conf.d/i386-linux-gnu_EGL.conf (i386-linux-gnu_egl_conf) in manual mode

Resultado de lspci -k | grep -EA2 'VGA | 3D'

00:02.0 VGA compatible controller: Intel Corporation HD Graphics 530 (rev 06)
        DeviceName:  Onboard IGD
        Subsystem: CLEVO/KAPOK Computer HD Graphics 530
--
01:00.0 VGA compatible controller: NVIDIA Corporation GP106M [GeForce GTX 1060] (rev a1)
        Subsystem: CLEVO/KAPOK Computer Device 6a03
        Kernel driver in use: nvidia

Tentei resolver esse problema sozinho por mais de uma semana e não tenho idéia do que fazer. Tudo o que tentei falhou.

Podes ajudar-me, por favor?

ATUALIZAÇÃO 5.2.2017:

Eu testei novamente hoje e percebi que a mudança para a intel gpu não funciona de jeito nenhum com 375 e 378. Fazer logoff congela a tela. Então, por que funcionou uma vez? Se eu instalar todos os drivers novamente após excluir os antigos e depois usar a intel prime-select (sem reinicializar!), O prime-select não atualizará os perfis principais -> Ele seleciona um dos perfis antigos que não são da nvidia (mesa profiles em vez da nvidia) e funciona. Mas assim que eu mudo para um perfil da nvidia ou reinicializo, os perfis principais são atualizados e não funcionam mais. Então eu acho que há algo errado com as alternativas EGl para a intel gpu? Desculpe por qualquer inconveniente.

ATUALIZAÇÃO 12.2.2017:

Ontem, modifiquei o software nvidia-prime e corrigi o erro. Em breve publicarei (provavelmente na próxima semana) minha versão modificada e colarei um link aqui, mas ainda encontro um problema: quando desligo o PC após executar sudo prime-select intel:

O ksmserver falha (estou usando o Kubuntu, provavelmente não é um problema com o Ubuntu)

-> o PC não pode desligar completamente e as alternativas de atualização antigas (incorretas) para a GPU Intel são restauradas

-> Não consigo inicializar.

No entanto, se eu executar sudo prime-select intelapós o desligamento no modo de recuperação, tudo funcionará bem e eu posso usar a GPU Intel.

ATUALIZAÇÃO 17.2.2017:

Postei minha solução alternativa e ainda estou tentando corrigir o bug nos repositórios oficiais. No entanto, este é provavelmente um bug nas alternativas de atualização, então, a seguir, tenho que postar um relatório de bug lá.

Enquanto isso, aproveite minha solução alternativa! Eu espero que funcione para você também. Se houver alguma dúvida, por favor deixe um comentário.

ATUALIZAÇÃO 26.2.2017

Como o @whizzzkid apontou, a placa de vídeo da nvidia ainda permanece ativa após a aplicação do meu patch. No entanto, hoje consegui resolver esse problema. Provavelmente atualizarei minha resposta para incluir meu segundo patch na próxima semana. Aqui estão alguns testes que eu executei:

Nvidia: 43-45W

Intel (nvidia ligada): 29-31W

Intel (nvidia desligada): 15-17W

C11235
fonte
Edite sua pergunta e adicione a saída do lspci -k | grep -EA2 'VGA|3D' comando terminal.
precisa saber é o seguinte
Ah, vejo que os 10xx não têm mno final, mesmo que sejam móveis.
precisa saber é o seguinte
Provavelmente nvidia-primeainda não suporta isso.
precisa saber é o seguinte
Bem, o interessante é que funciona desde que eu não reinicie. Eu posso usar o igpu se eu sair e entrar novamente. Mas assim que eu reiniciar, ele não funcionará mais. E a Nvidia gpu funciona e é suportada pelo driver.
C11235
1
Eu usei o Powertop para monitorar o uso de energia. Ele mostra apenas o consumo de energia se você usar a bateria como fonte de energia. Dê uma olhada nesta pergunta ou na página de manual para obter mais informações.
C11235

Respostas:

3

Aqui está minha correção / solução alternativa para o bug:

Se você quiser usar o zangão em vez do nvidia-prime, dê uma olhada na resposta fornecida por @whizzzkid abaixo.

Testado com o Kubuntu 16.10 de 64 bits usando o KDE Plasma Versão.7.5 e o KDE Frameworks Versão 5.26.0. Os seguintes passos funcionam para mim. Espero que eles funcionem para você também, mas não posso garantir isso e não assumo responsabilidade se não o fizerem. Mas fico feliz em ajudá-lo se você deixar um comentário.

No meu caso, o problema era que a alternativa de atualização / usr / lib / nvidia-XYZ-prime / não funcionou. Ele deveria redirecionar as chamadas para o driver intel-mesa, mas por algum motivo isso não aconteceu. Então é provavelmente um bug nas alternativas de atualização? Ainda não encontrei um lugar para relatar um bug para as alternativas de atualização. Por favor, comente se você pode me ajudar.

Eu basicamente modifiquei um pouco a nvidia-prime para mudar as alternativas de atualização diretamente para o driver intel-mesa em vez de / usr / lib / nvidia-XYZ-prime /.

Importante:

Antes de aplicar qualquer uma dessas etapas, verifique como acessar o modo de recuperação no seu PC. Se você não conseguir mais inicializar devido a este guia, ainda poderá desfazer as alterações no modo de recuperação com os comandos na última seção deste guia. Consulte este site sobre como acessar o modo de recuperação para obter mais informações.

Se você usar um sistema operacional de 32 bits , precisará excluir todos os comandos que contêm x86_64 na Etapa 4 e na seção Como desfazer todas essas modificações .


Passo 1:

Instale meu patch usando um método fácil fornecido por @whizzzkid em sua resposta abaixo:

cd /usr/bin
sudo mv prime-select prime-select.bkup
sudo wget https://raw.githubusercontent.com/C11235/nvidia-prime-bugfix/master/prime-select
sudo chmod 755 prime-select

Passo 2:

Aplique meu segundo patch para reduzir o consumo de energia no modo intel:

Verifique qual versão do driver nvidia você possui. Por exemplo, com o seguinte comando:

$ cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module  378.13  Tue Feb  7 20:10:06 PST 2017
GCC version:  gcc version 6.2.0 20161005 (Ubuntu 6.2.0-5ubuntu12)

Nesse caso, a nvidia-XYZ é a nvidia-378. Veja este thread Stackoverflow .

Crie um arquivo bash contendo o seguinte conteúdo nomeado, por exemplo, poweroff.sh

#!/bin/bash
line=$(</etc/prime-discrete)
if [ "$line" == "off" ] 
   then
   rmmod nvidia-drm
   rmmod nvidia-modeset
   rmmod nvidia
   bash -c 'echo OFF > /proc/acpi/bbswitch'
fi 

Crie um segundo arquivo bash contendo o seguinte conteúdo nomeado, por exemplo, poweron.sh e substitua XYZ pelo número da versão do driver da nvidia.

#!/bin/bash
modprobe nvidia-XYZ
modprobe nvidia-XYZ-modeset
modprobe nvidia-XYZ-drm
modprobe nvidia-XYZ-uvm
echo ON > /proc/acpi/bbswitch

No modo Intel, é necessário executar o primeiro script após o login com o sudo e o segundo antes do logout com o sudo (caso contrário, seu laptop provavelmente trava, como no meu caso). Eu apenas os executo com sudo bash FILENAME.

Até agora, não consegui iniciar automaticamente automaticamente esses scripts como root no login e antes do logout. No entanto, pode ser possível com o iniciante, como o @Fiximan apontou. Talvez eu atualize esta resposta novamente em algum momento no futuro, se conseguir fazê-lo.


(provavelmente) Erros específicos do plasma do KDE:

Ainda existe um bug que não consegui consertar no KDE Plasma: Sempre que mudo da Nvidia para a Intel depois que iniciei o PC no modo nvidia, o ksmserver trava e o PC fica inutilizável, preciso desativá-lo pressionando o botão liga / desliga por cerca de 5 a 10 segundos. Às vezes, isso resulta na alteração das alternativas de atualização para nvidia-prime em vez de intel-mesa, o que leva a uma tela preta na inicialização .

Se você foi afetado pelo bug do ksmserver, contribua para o relatório oficial de bug em bugs.kde.org .

No entanto, o problema de que o PC não será desligado pode ser evitado sempre selecionando o modo intel antes do desligamento , mesmo quando você usa o modo nvidia. Se você fizer isso, tudo funcionará como deveria em primeiro lugar e você não precisará desligar o PC pressionando longamente o botão liga / desliga, exceto após aplicar este guia no modo nvidia.

Uma solução simples para o erro de tela preta na inicialização é remover completamente as alternativas de atualização que não estão funcionando completamente:

Passo 1:

Você pode acessar seu PC novamente depois de entrar no modo de recuperação, selecionar shell de comando root e executar os 2 comandos a seguir:

mount -o remount,rw /
prime-select nvidia

Passo 2:

Execute os seguintes comandos:

sudo update-alternatives --remove i386-linux-gnu_gl_conf /usr/lib/nvidia-XYZ-prime/alt_ld.so.conf
sudo update-alternatives --remove i386-linux-gnu_egl_conf /usr/lib/nvidia-XYZ-prime/alt_ld.so.conf
sudo update-alternatives --remove x86_64-linux-gnu_gl_conf /usr/lib/nvidia-XYZ-prime/ld.so.conf
sudo update-alternatives --remove x86_64-linux-gnu_egl_conf /usr/lib/nvidia-XYZ-prime/ld.so.conf

Como desfazer todas essas modificações

Basta executar os seguintes comandos:

sudo rm /usr/bin/prime-select
sudo mv /home/YOUR-USERNAME/prime-select.backup /usr/bin/prime-select
sudo update-alternatives --install /etc/ld.so.conf.d/i386-linux-gnu_GL.conf i386-linux-gnu_gl_conf /usr/lib/nvidia-XYZ-prime/alt_ld.so.conf 8603
sudo update-alternatives --install /etc/ld.so.conf.d/i386-linux-gnu_EGL.conf i386-linux-gnu_egl_conf /usr/lib/nvidia-XYZ-prime/alt_ld.so.conf 8603
sudo update-alternatives --install /etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf x86_64-linux-gnu_gl_conf /usr/lib/nvidia-XYZ-prime/ld.so.conf 8603
sudo update-alternatives --install /etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf x86_64-linux-gnu_egl_conf /usr/lib/nvidia-XYZ-prime/ld.so.conf 8603
C11235
fonte
1
Verifique minha resposta abaixo.
whizzzkid
Ei cara, muito obrigado por isso! Quando executo seu script de desligamento, meu com apenas trava (antes do logout). Existe outra correção?
Wboy
Infelizmente, não conheço outra solução. Isso funciona no meu caso. Seu problema também ocorre no meu caso, como escrevi, mas apenas na primeira vez. Como escrevi, você precisa voltar para a Intel antes de sair. Então este erro não ocorrerá. (Ao menos em meu caso).
C11235
Olá @ C11235 Obrigado pela correção. Gostaria de lhe perguntar uma coisa: A primeira vez que instalo o driver da nvidia por padrão é definida na nvidia. Então, quando devo executar o script? e O que você quer dizer com login como root?
Glats
Infelizmente, essa parte da minha resposta foi um pouco vaga. Eu quis dizer que você faz login e depois executa o script como root (por exemplo, com sudo). Você deve executar o script quando estiver logado e já estiver no modo intel. Isso desativa completamente a GPU nvidia temporariamente. O segundo deve ser executado antes do logout no modo intel.
C11235
2

o patch do @ C11235 funciona, agora eu posso alternar entre nvidia e intel, mas isso não reduz o consumo de energia. : - / o que significa que ambos ainda estão em execução.

BTW, esta é uma maneira mais fácil de fazer isso.

cd /usr/bin
sudo mv prime-select prime-select.bkup
sudo wget https://raw.githubusercontent.com/C11235/nvidia-prime-bugfix/master/prime-select
sudo chmod 755 prime-select
whizzzkid
fonte
Obrigado! Infelizmente, você está certo, veja minha pergunta atualizada. Você se importa se eu atualizar minha resposta para incluir seu método de instalação mais fácil?
C11235
@ C11235 oh sim, com certeza. Consegui descobrir tudo isso: gist.github.com/whizzzkid/37c0d365f1c7aa555885d102ec61c048 Estou executando 5.8W no modo ocioso agora.
precisa saber é
Ok, isso é ótimo! Verifiquei suas instruções e a causa do menor consumo de energia é a mesma que no meu caso. Eu escrevi um script que usa o bbswitch para desativar a nvidia GPU se o modo intel for selecionado. No meu caso, isso é mais conveniente, já que tenho um monitor externo e quase exclusivamente uso o modo nvidia, é por isso que eu queria usar o nvidia-prime em vez do zangão. Além disso, o desempenho ao usar a nvidia-prime deve ser melhor do que ao usar o zangão.
C11235 03/03
2

Solução para não inicializar após mudar para a placa de vídeo intel:
Adicione parâmetros de inicialização do kernel:

acpi_osi=! acpi_osi="Windows 2009"

A razão deste problema: bug # 156341 no kernel
Solução fonte: link

mais detalhados, pode ser que seja mais fácil de entender:

sudo echo -e "GRUB_CMDLINE_LINUX_DEFAULT='acpi_osi=! acpi_osi='Windows 2009''"  | sudo tee -a /etc/default/grub
sudo update-grub
Maxim Akristiniy
fonte
Em sua forma atual, sua resposta não é tão boa quanto poderia ser. Você poderia rever Como escrever uma boa resposta e considerar expandir sua resposta
J. Starnes
isso realmente funcionou para mim, mas a resposta poderia ser melhorada. Vou sugerir a melhoria
Vladyslav Matviienko
1

Possível problema com a segunda correção: último comando dos prompts de script "poweroff"

    bash: /proc/acpi/bbswitch: No such file or directory

Aparentemente, quando eu reinicio no modo Intel (alterar o modo não entra em vigor até eu reiniciar, não sei se isso é normal), o módulo bbswitch nem é carregado. Portanto, não há arquivo bbswitch e não há como desativar a GPU nvidia.

Estou a usar:

  • Computador portátil MSI (GL72 7RDX)
  • GPU integrada: Intel® HD Graphics 630 (Kaby Lake GT2)
  • GPU separada: Geforce GTX 1050
  • Sistema operacional: Ubuntu 16.04 lts

Solução para este problema:

Edite o arquivo / etc / modules (com privilégios de root) e adicione a linha

    bbswitch

Agora o bbswitch está operacional mesmo quando eu inicializo no modo intel, e a segunda correção do C11235 funciona muito bem.

Hugo
fonte