NVIDIA-PRIME: no se puede cambiar a Intel

10

Cada vez que cambio de mi gpu (gtx 1060) a mi igpu (Intel 530), no puedo arrancar. La pantalla de carga está atascada con el siguiente mensaje:

[Fallido] Error al iniciar NVIDIA Persistence Daemon. Consulte 'systemctl status nvidia-persistenced.service' para más detalles.

Sin embargo, puedo arrancar cuando vuelvo a la CPU Nvidia y cambiar a mi igpu sin reiniciar funciona temporalmente. Estoy usando Kubuntu 16.10 y solo la pantalla interna de mi computadora portátil. Esa es la salida cuando cambio a mi 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

Traté de resolver este problema por mi cuenta durante más de una semana y no tengo idea de qué hacer. Todo lo que probé falló.

¿Me podría ayudar?

ACTUALIZACIÓN 5.2.2017:

Lo probé nuevamente hoy y me di cuenta de que cambiar a la CPU Intel no funciona en absoluto con 375 y 378. Cerrar sesión congela la pantalla. Entonces, ¿por qué funcionó una vez? Si vuelvo a instalar todos los controladores después de eliminar los anteriores y luego uso prime-select intel (¡sin reiniciar!), Prime-select no actualiza los perfiles prime -> Selecciona uno de los perfiles antiguos que no son nvidia (perfiles mesa en lugar de nvidia) y funciona. Pero tan pronto como cambio a un perfil de nvidia o reinicio, los perfiles principales se actualizan y ya no funciona. Entonces, ¿supongo que hay algo mal con las alternativas EGl para la CPU Intel? Perdón por cualquier inconveniente.

ACTUALIZACIÓN 12.2.2017:

Ayer modifiqué el software nvidia-prime y solucioné el error. Pronto publicaré (probablemente la próxima semana) mi versión modificada y pegaré un enlace aquí, pero aún encuentro un problema: cuando apago mi PC después de ejecutar sudo prime-select intel:

ksmserver se bloquea (estoy usando Kubuntu, probablemente no sea un problema con Ubuntu)

-> la PC no puede apagarse por completo y se restauran las antiguas alternativas de actualización (incorrectas) para la GPU Intel

-> No puedo arrancar.

Sin embargo, si ejecuto sudo prime-select inteldespués del apagado en modo de recuperación, todo funciona bien y puedo usar la GPU Intel.

ACTUALIZACIÓN 17.2.2017:

Publiqué mi solución y todavía estoy tratando de solucionar el error en los repositorios oficiales. Sin embargo, este es probablemente un error en las alternativas de actualización, por lo que a continuación tengo que publicar un informe de error allí.

Mientras tanto, ¡disfruta de mi solución! Espero que funcione para ti tambien. Si hay alguna pregunta, por favor deje un comentario.

ACTUALIZACIÓN 26.2.2017

Como señaló @whizzzkid, la tarjeta gráfica nvidia aún permanece activa después de aplicar mi parche. Sin embargo, hoy pude resolver este problema. Probablemente actualizaré mi respuesta para incluir mi segundo parche la próxima semana. Aquí hay algunas pruebas que ejecuté:

Nvidia: 43-45 W

Intel (nvidia encendido): 29-31W

Intel (nvidia apagado): 15-17W

C11235
fuente
Edite su pregunta y agregue la salida del lspci -k | grep -EA2 'VGA|3D' comando de terminal.
Pilot6
Oh, veo que el 10xx no tiene mal final, incluso si son móviles.
Pilot6
Probablemente nvidia-primetodavía no los soporta.
Piloto6
Bueno, lo interesante es que funciona mientras no reinicie. Puedo usar el igpu si me desconecto y me conecto nuevamente. Pero tan pronto como reinicio ya no funciona. Y la GPU Nvidia funciona, y es compatible con el controlador.
C11235
1
Usé Powertop para monitorear el uso de energía. Solo muestra el consumo de energía si usa la batería como fuente de energía. Eche un vistazo a esta pregunta o esa página de manual para obtener más información.
C11235

Respuestas:

3

Aquí está mi solución / solución para el error:

Si desea utilizar abejorro en lugar de nvidia-prime, eche un vistazo a la respuesta proporcionada por @whizzzkid a continuación.

Probado con Kubuntu 16.10 de 64 bits con KDE Plasma Version.7.5 y KDE Frameworks Versión 5.26.0. Los siguientes pasos me funcionan. Espero que funcionen para usted también, pero no puedo garantizarlo y no asumir ninguna responsabilidad si no lo hacen. Pero me alegra ayudarte si dejas un comentario.

En mi caso, el problema era que la alternativa de actualización / usr / lib / nvidia-XYZ-prime / no funcionaba en absoluto. Se supone que redirige las llamadas al controlador intel-mesa, pero por alguna razón no lo hizo. Entonces, ¿es probablemente después de todo un error en las alternativas de actualización? Todavía no he encontrado un lugar para informar un error para las alternativas de actualización. Por favor comente si puede ayudarme.

Básicamente modifiqué un poco nvidia-prime para cambiar las alternativas de actualización directamente al controlador intel-mesa en lugar de / usr / lib / nvidia-XYZ-prime /.

Importante:

Antes de aplicar cualquiera de estos pasos, asegúrese de saber cómo acceder al modo de recuperación en su PC. Si no puede iniciar más debido a esta guía, aún puede deshacer los cambios en el modo de recuperación con los comandos de la última sección de esta guía. Consulte este sitio web sobre cómo acceder al modo de recuperación para obtener más información.

Si utiliza un sistema operativo de 32 bits , debe omitir todos los comandos que contienen x86_64 en el Paso 4 y en la sección Cómo deshacer todas estas modificaciones .


Paso 1:

Instale mi parche utilizando un método fácil proporcionado por @whizzzkid en su respuesta a continuación:

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

Paso 2:

Aplique mi segundo parche para reducir el consumo de energía en modo Intel:

Comprueba qué versión de nvidia-driver tienes. Por ejemplo con el siguiente 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)

En este caso, nvidia-XYZ es nvidia-378. Vea este hilo de Stackoverflow .

Cree un archivo bash que contenga los siguientes contenidos denominados, por ejemplo, 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 

Cree un segundo archivo bash que contenga los siguientes contenidos llamados, por ejemplo, poweron.sh y reemplace XYZ con su número de versión del controlador nvidia.

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

En el modo Intel, debe ejecutar el primer script después de iniciar sesión con sudo y el segundo antes de cerrar sesión con sudo (de lo contrario, su computadora portátil probablemente se bloqueará, como en mi caso). Solo los ejecuto con sudo bash FILENAME.

Hasta ahora no pude iniciar automáticamente estos scripts como root al iniciar sesión y antes de cerrar sesión. Sin embargo, podría ser posible con el advenedizo, como señaló @Fiximan . Podría actualizar esta respuesta nuevamente en algún momento en el futuro si logro hacerlo.


(probablemente) Errores específicos de KDE Plasma:

Todavía hay un error que no pude corregir en KDE Plasma: cada vez que cambio de Nvidia a Intel después de iniciar la PC en modo nvidia, ksmserver se bloquea y la PC queda inutilizable, tengo que apagarla presionando el botón de encendido durante unos 5-10 segundos. Esto a veces da como resultado que las alternativas de actualización se cambien a nvidia-prime en lugar de intel-mesa, lo que conduce a una pantalla negra al inicio .

Si se ve afectado por el error ksmserver, contribuya al informe oficial de errores en bugs.kde.org .

Sin embargo, el problema de que la PC no se apaga se puede evitar seleccionando siempre el modo Intel antes del apagado , incluso cuando se usa el modo nvidia. Si hace esto, todo funciona como debería en primer lugar y no tiene que apagar su PC presionando prolongadamente el botón de encendido, excepto después de aplicar esta guía en modo nvidia.

Una solución simple para el error black-screen-upon-startup es eliminar por completo las alternativas de actualización que no funcionan:

Paso 1:

Puede acceder a su PC nuevamente después de ingresar al modo de recuperación, seleccionar el shell del comando root y ejecutar los siguientes 2 comandos:

mount -o remount,rw /
prime-select nvidia

Paso 2:

Ejecute los siguientes 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

Cómo deshacer todas estas modificaciones

Simplemente ejecute los siguientes 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
fuente
1
Mira mi respuesta a continuación.
whizzzkid
Hola hombre, muchas gracias por esto! Cuando ejecuto su script de apagado, mi com simplemente se cuelga (antes de cerrar sesión). ¿Hay otra solución?
Wboy
Desafortunadamente, no conozco ninguna otra solución. Esto funciona en mi caso. Su problema también ocurre en mi caso, como escribí, pero solo la primera vez. Como escribí, debe volver a Intel antes de cerrar sesión. Entonces este error no ocurrirá. (Al menos en mi caso).
C11235
Hola @ C11235 Gracias por la solución. Me gustaría preguntarle algo: la primera vez que instalo el controlador de nvidia por defecto se establece en nvidia. Entonces, ¿cuándo debo ejecutar el script? y ¿Qué quiere decir iniciar sesión como root?
Glats
Desafortunadamente, esta parte de mi respuesta fue un poco vaga. Quise decir que inicie sesión y luego ejecute el script como root (por ejemplo, con sudo). Debe ejecutar el script cuando acaba de iniciar sesión y ya ha cambiado al modo Intel. Esto desactiva completamente la GPU nvidia temporalmente. El segundo debe ejecutarse antes de cerrar sesión en modo Intel.
C11235
2

el parche de @ C11235 funciona, ahora puedo cambiar entre nvidia e intel, pero esto no reduce el consumo de energía. : - / lo que significa que ambos todavía se están ejecutando.

Por cierto, esta es una manera más fácil de hacer esto.

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
fuente
¡Gracias! Desafortunadamente, tienes razón, mira mi pregunta actualizada. ¿Le importa si actualizo mi respuesta para incluir su método de instalación más fácil?
C11235
@ C11235 oh si claro. Pude resolver todo esto: gist.github.com/whizzzkid/37c0d365f1c7aa555885d102ec61c048 Estoy ejecutando 5.8W en inactivo en este momento.
whizzzkid 03 de
¡OK eso es genial! Revisé sus instrucciones y la causa del bajo consumo de energía es la misma que en mi caso. Escribí un script que usa bbswitch para deshabilitar la GPU nvidia si el modo de inteligencia principal se seleccionaba. En mi caso, esto es más conveniente, ya que tengo un monitor externo y uso casi exclusivamente el modo nvidia, por eso quería usar nvidia-prime en lugar de abejorro. Además, se supone que el rendimiento cuando se usa nvidia-prime es mejor que cuando se usa abejorro.
C11235
2

Solución para no arrancar después de cambiar a la tarjeta de video Intel:
agregue los parámetros de arranque del kernel:

acpi_osi=! acpi_osi="Windows 2009"

La razón de este problema: error # 156341 en el núcleo
Fuente de la solución: enlace

algunos más detallados, pueden ser más fáciles 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
fuente
En su forma actual, su respuesta no es tan buena como podría ser. ¿Podría revisar Cómo escribir una buena respuesta y considerar ampliar su respuesta
J. Starnes
esto realmente funcionó para mí, pero la respuesta podría mejorarse.
Sugeriré
1

Posible problema con la segunda solución: último comando de las indicaciones de script "poweroff"

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

Aparentemente, cuando reinicio en modo Intel (cambiar el modo no entra en vigor hasta que reinicie, no sé si esto es normal), el módulo bbswitch ni siquiera se carga. Por lo tanto, no hay un archivo bbswitch y no hay forma de apagar la GPU nvidia.

Estoy usando:

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

Solución para este problema:

Edite el archivo / etc / modules (con privilegios de root) y agregue la línea

    bbswitch

Ahora bbswitch está operativo incluso cuando inicio en modo Intel, y la segunda solución de C11235 funciona bien.

Hugo
fuente