[SCRIPT] NVIDIA-switch [EN COURS]

Applications, problèmes de configuration réseau
aminnairi
archer de cavalerie
Messages : 187
Inscription : lun. 10 août 2015, 13:50
Localisation : France

[SCRIPT] NVIDIA-switch [EN COURS]

Message par aminnairi »

Bonjour à tous !

J'aimerais réaliser un script qui me permettra d'automatiser le passage d'Intel vers NVIDIA. Pour ne pas expliquer tout, j'ai choisi NVIDIA comme renderer sans passer par Optimus. J'aimerais en fait pouvoir passer de Intel à NVIDIA et vice versa.

Pour le moment, je commence par la script de nvidia vers intel (je verrais le reste plus tard et pourquoi pas les deux en un).

J'ai commencé par créer une application dans /usr/bin/nti dans lequel j'ai ajouté ceci :

Code : Tout sélectionner

#!/bin/sh

systemctl stop lxdm ; mv /etc/X11/xorg.conf.d/00-nvidia-optimus.conf ~/.00-nvidia-optimus.conf ; pacman -S --noconfirm lib32-mesa-libgl mesa-libgl ; systemctl restart lxdm
Problème N°1 : je ne sais pas comment faire un script qui démarre d'un terminal ouvert depuis mon affichage graphique, qui continue quand celui-ci s'est arrêté et qui termine en relançant l'affichage graphique.

Problème N°2 : j'ai essayé la commande

Code : Tout sélectionner

pacman -S --noconfirm lib32-mesa-libgl mesa-libgl
mais l'argument --noconfirm semble ne pas fonctionner. Et je n'arrive pas à trouver un équivalent à sudo apt-get install -y blabla. Le souci c'est qu'en fait mes librairies nvidia vont être remplacée par les librairies mesa, du coup il faudrait que je trouve un moyen de répondre o (oui) dans le script.

:merci:
Dernière modification par aminnairi le mar. 13 oct. 2015, 21:26, modifié 4 fois.
Arch Linux x86_64 UEFI
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17632
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [SCRIPT] NVIDIA-switch

Message par benjarobin »

Le mieux à faire c'est de faire un service systemd, bien plus propre, et qui résout ton problème numéro 1.
Quand le service est "lancé" tu utilises nvidia, et quand le service est arrêté tu utilises intel.

Pour le problème numéro 2, je ne sais pas si pacman est une bonne solution (quoi que), car la base peut être verrouillé.
Les paquets *nvidia-libgl / *mesa-libgl ne contient que des liens symboliques vers les bonnes librairies. Pourquoi ne pas faire un paquet fournissant ces liens symboliques et ton script s'occupe de les gérer... Le problème d'une telle solution c'est qu'il faut maintenir les liens...
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
aminnairi
archer de cavalerie
Messages : 187
Inscription : lun. 10 août 2015, 13:50
Localisation : France

Re: [SCRIPT] NVIDIA-switch

Message par aminnairi »

Oui c'est une bonne idée le systemd. Je vais voir ça.

Pour ce qui est des liens symboliques j'y ait bien pensé... En solution de dernier recours car comme tu l'a dit il faudra que je les maintiennent. Bon j'vais pas faire le difficile et puis y'a un début à tout. :lol:

Merci beaucoup pour ta réponse !
Arch Linux x86_64 UEFI
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17632
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [SCRIPT] NVIDIA-switch [RÉSOLU]

Message par benjarobin »

J'avais oublié, ce ne serait pas plus simple de ne pas installer ces paquets et de faire comme bumblebee et de jouer sur les variables d'environnement ? Car techniquement c'est comme cela que bumblebee fait la bascule des lib libgl entre mesa et nvidia

Après analyse tu as 2 chose à définir
  • ModulePath du xorg.conf, associé au switch -modulepath de Xorg, pour faire ceci. C'est lié à l'option XorgModulePath de bumblebee.
    En gros pour nvidia cela demanderait juste de définir ModulePath à /usr/lib/nvidia/xorg/,/usr/lib/xorg/modules
  • La variable d'environnement LD_LIBRARY_PATH. C'est lié à l'option LibraryPath=/usr/lib/nvidia:/usr/lib32/nvidia de bumblebee.
    La variable LD_LIBRARY_PATH pourrait être définit via /etc/environment
Donc en résumé, fait un premier test, garde installé mesa-libgl, et modifie ta conf d'Xorg pour rajouter ModulePath, et faire un export de LD_LIBRARY_PATH modifié.

Pourquoi mettre le sujet résolu ? On est loin d'une belle solution finie et fonctionnelle :-)
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
aminnairi
archer de cavalerie
Messages : 187
Inscription : lun. 10 août 2015, 13:50
Localisation : France

Re: [SCRIPT] NVIDIA-switch

Message par aminnairi »

Oui tu as raison, je me suis un peu emporté...

Alors en fait je n'ai plus du tout Bumblebee !

Du coup ce que j'ai essayé de faire c'était d'enlever tout simplement les liens qui existaient dans /usr/lib/libGL* (sauf les libGLU) et j'ai essayé de faire ln -sf /usr/lib/nvidia/lib* /usr/lib/ mais ça n'a pas fonctionné.

En regardant ta réponse, ça m'a fait pensé à une variable dans le fichier de configuration de xorg. Est-ce que je peux rajouter ModulePath dans mon /etc/X11/xorg.conf.d/00-nvidia-optimus.conf ?
Arch Linux x86_64 UEFI
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17632
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [SCRIPT] NVIDIA-switch

Message par benjarobin »

je n'ai jamais dis que tu avais besoin de Bumblebee, je me suis juste inspiré de ce qui était fait côté Bumblebee. J'ai fait le parallèle donc mon explication avec Bumblebee, ce dernier à le même problème est doit switcher à la volé entre ces mesa et nvidia
aminnairi a écrit :Du coup ce que j'ai essayé de faire c'était d'enlever tout simplement les liens qui existaient dans /usr/lib/libGL* (sauf les libGLU) et j'ai essayé de faire ln -sf /usr/lib/nvidia/lib* /usr/lib/
Cela fait très scientifique un peu fou, pourquoi tester un peu au hasard... Si tu es curieux de savoir comment sont fait les liens symboliques je te conseil vivement de regarder le PKGBUILD de mesa-libgl / nvidia-libgl
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
aminnairi
archer de cavalerie
Messages : 187
Inscription : lun. 10 août 2015, 13:50
Localisation : France

Re: [SCRIPT] NVIDIA-switch

Message par aminnairi »

D'accord. Alors voilà ce que j'ai fait :

Fichier /etc/X11/xorg.conf.d/00-nvidia-optimus.conf modifié en rajoutant

Code : Tout sélectionner

Section "Files"
    ModulePath "/usr/lib/nvidia/xorg/,/usr/lib/xorg/modules"
EndSection
Ensuite, j'ai ouvert /etc/environnement en rajoutant

Code : Tout sélectionner

LibraryPath=/usr/lib/nvidia:/usr/lib32/nvidia
Puis j'ai fait un export LD_LIBRARY_PATH

Et bien sûr j'ai installé mesa-libgl lib32-mesa-libgl. Maintenant quand je veux faire un glxgears j'obtient :

Code : Tout sélectionner

libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  154 (GLX)
  Minor opcode of failed request:  3 (X_GLXCreateContext)
  Value in failed request:  0x0
  Serial number of failed request:  35
  Current serial number in output stream:  37
Arch Linux x86_64 UEFI
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17632
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [SCRIPT] NVIDIA-switch

Message par benjarobin »

C'est l'idée... tu y es presque :-)
C'est /etc/environment, et non ce que tu as donné, le export est inutile, d'ailleurs je ne sais pas où tu l'as fait. Et la variable se nomme LD_LIBRARY_PATH et non LibraryPath, qui est l'option de Bumblebee. Donc en gros il suffit de faire

Code : Tout sélectionner

echo 'LD_LIBRARY_PATH=/usr/lib/nvidia:/usr/lib32/nvidia' >> /etc/environment
De puis ton environnement graphique, depuis une console, tu dois avoir en sortie de echo $LD_LIBRARY_PATH

Code : Tout sélectionner

/usr/lib/nvidia:/usr/lib32/nvidia
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
aminnairi
archer de cavalerie
Messages : 187
Inscription : lun. 10 août 2015, 13:50
Localisation : France

Re: [SCRIPT] NVIDIA-switch

Message par aminnairi »

J'ai essayé de taper la commande que tu m'a donné avec un échec de permission, j'ai essayé avec echo | sudo tee [...] non plus j'ai été obligé d'utiliser le sudo su et quand je reviens sur l'utilisateur et que je tape echo $LD_LIBRARY_PATH j'obtiens une grande ligne blanche alors que dans mon fichier /etc/environment j'ai bien la ligne qui a été créé. Normal docteur ?
Arch Linux x86_64 UEFI
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17632
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [SCRIPT] NVIDIA-switch

Message par benjarobin »

Il faut relancer ton utilisateur, fermer Xorg et tout relancer. Normalement ce fichier devrait être lu par tout bon gestionnaire de connexion, tu utilises quoi ?
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
aminnairi
archer de cavalerie
Messages : 187
Inscription : lun. 10 août 2015, 13:50
Localisation : France

Re: [SCRIPT] NVIDIA-switch

Message par aminnairi »

LXDE/LXDM et ça marche nickel chrome après un redémarrage (systemctl restart lxdm n'a pas suffit).

Maintenant, il faudrait que je puisse envoyer un # devant LD_LIBRARY_PATH=[...] du fichier /etc/environment pour le cas où je vais switcher sur ma Intel. On peut le faire avec un echo ?
Arch Linux x86_64 UEFI
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17632
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [SCRIPT] NVIDIA-switch

Message par benjarobin »

S'il faut redémarrer pour appliquer la modif ce n'est pas terrible, je vais trouvé un meilleur moyen
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
aminnairi
archer de cavalerie
Messages : 187
Inscription : lun. 10 août 2015, 13:50
Localisation : France

Re: [SCRIPT] NVIDIA-switch

Message par aminnairi »

Non mais je pense que c'était juste histoire d'appliquer la variable. Mais maintenant quand je ferme lxdm et que je bouge mon 00-nvidia-optimus.conf, que je rajoute un # et que je restart lxdm ça fonctionne bien (pour utiliser intel) !
Arch Linux x86_64 UEFI
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
aminnairi
archer de cavalerie
Messages : 187
Inscription : lun. 10 août 2015, 13:50
Localisation : France

Re: [SCRIPT] NVIDIA-switch

Message par aminnairi »

C'est bon j'ai trouvé comment rajouter un # à une ligne en utilisant sed :

sed -i '6 s/^/#/' /etc/environment

et j'utiliserai sed -i '6 s/#//' /etc/environment pour l'enlever quand j'en aurais besoin pour nvidia.
Arch Linux x86_64 UEFI
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
aminnairi
archer de cavalerie
Messages : 187
Inscription : lun. 10 août 2015, 13:50
Localisation : France

Re: [SCRIPT] NVIDIA-switch

Message par aminnairi »

J'avais pensé à utiliser ces deux scripts dans mon systemd du coup puisque c'est la partie finale de notre petit interrupteur magique.

Code : Tout sélectionner

#!/bin/sh
#Ce script fait passer le rendu graphique de la carte graphique dédiée vers la carte graphique intégrée
systemctl stop lxdm
mv /etc/X11/xorg.conf.d/00-nvidia-optimus.conf ~/.00-nvidia-optimus.conf
sed -i ‘6 s/^/#/’ /etc/environment
systemctl restart lxdm

Code : Tout sélectionner

#!/bin/sh
#Ce script fait passer le rendu graphique de la carte graphique intégrée vers la carte graphique dédiée
systemctl stop lxdm
mv ~/.99-nvidia-optimus.conf /etc/X11/xorg.conf.d/00-nvidia-optimus.conf
sed -i ‘6 s/a/#/’ /etc/environment
systemctl restart lxdm
EDIT : oui tu as raison, ça ne marche pas à moins de redémarrer le système. Bon même avec un vieu HDD mon installation est pas mal rapide au redémarrage (merci Arch :love: ) mais sinon ben je laisse le sujet en standby je ferais comme ça pour l'instant.
Arch Linux x86_64 UEFI
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
Avatar de l’utilisateur
papajoke
Elfe
Messages : 820
Inscription : sam. 30 août 2014, 19:54

Re: [SCRIPT] NVIDIA-switch

Message par papajoke »

le format du fichier /etc/environment n'est pas fixe, tu ne peut être sûr d'un numéro de ligne
il vaut mieux faire une recherche sur la clé

Code : Tout sélectionner

sed -i 's/^LD_LIBRARY_PATH/#LD_LIBRARY_PATH/' /etc/environment
sed -i 's/^#LD_LIBRARY_PATH/LD_LIBRARY_PATH/' /etc/environment
Arch stable - Kde 6 / fish - btrfs/mbr - Intel Core i3 - 6Go RAM - GeForce 405 video-nouveau
aminnairi
archer de cavalerie
Messages : 187
Inscription : lun. 10 août 2015, 13:50
Localisation : France

Re: [SCRIPT] NVIDIA-switch

Message par aminnairi »

Merci beaucoup, je vais rectifier mon script dans ce cas là.

Code : Tout sélectionner

#!/bin/bash
#Ce script fait passer le rendu graphique de la carte graphique dédiée vers la carte graphique intégrée
systemctl stop lxdm ; mv /etc/X11/xorg.conf.d/00-nvidia-optimus.conf /home/amin/.00-nvidia-optimus.conf ; sed -i 's/^LD_LIBRARY_PATH/#LD_LIBRARY_PATH/' /etc/environment ; systemctl restart lxdm

Code : Tout sélectionner

#!/bin/sh
#Ce script fait passer le rendu graphique de la carte graphique intégrée vers la carte graphique dédiée
systemctl stop lxdm ; mv /home/amin/.00-nvidia-optimus.conf /etc/X11/xorg.conf.d/00-nvidia-optimus.conf ; sed -i 's/^#LD_LIBRARY_PATH/LD_LIBRARY_PATH/' /etc/environment ; systemctl restart lxdm
Par contre j'arrive pas à tester sous tty2 parce qu'il voit les ' comme des caractères inconnus. Faut également que je cherche comment rajouter une bonne keyboard layout à mes tty.
Arch Linux x86_64 UEFI
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
Avatar de l’utilisateur
papajoke
Elfe
Messages : 820
Inscription : sam. 30 août 2014, 19:54

Re: [SCRIPT] NVIDIA-switch

Message par papajoke »

voici une version (verbeuse) avec un véritable swich automatique :

Code : Tout sélectionner

#!/usr/bin/env bash
#Ce script fait passer le rendu graphique de la carte graphique dédiée vers la carte graphique intégrée
KEYPATH='LD_LIBRARY_PATH'
ENVFILE='/etc/environment'

if [[ $EUID -ne 0 ]]; then
        echo "Erreur, ce script demande des droits administrateurs"
        exit 1
fi

state=$(systemctl show display-manager.service | awk -F'=' '/^LoadState/ {print $2}')
if [ "${state}" == "loaded" ]; then
    DMname=$(systemctl cat display-manager.service | awk -F'=' '/^Description/ {print $2}')
    echo "on stop ${DMname}"
    systemctl stop display-manager
    if [ "$?" -ne 0 ]; then
        echo "impossible de fermer ${DMname} ?"
        exit 1
    fi
fi

isset=$(grep "^${KEYPATH}" ${ENVFILE})
if [ "${isset}" != "" ]; then
    echo "on charge  dédiée"
    sed  -i "/^${KEYPATH}/ d" ${ENVFILE}
    mv /etc/X11/xorg.conf.d/00-nvidia-optimus.conf /home/amin/.00-nvidia-optimus.conf ; 
else
    echo "on charge intégrée"
    echo "${KEYPATH}=/usr/lib/nvidia:/usr/lib32/nvidia" >> ${ENVFILE}
    mv /home/amin/.00-nvidia-optimus.conf /etc/X11/xorg.conf.d/00-nvidia-optimus.conf ;
fi

echo "on redémarre $DMname"    
systemctl restart display-manager
non testé ...
Dernière modification par papajoke le dim. 11 oct. 2015, 14:58, modifié 2 fois.
Arch stable - Kde 6 / fish - btrfs/mbr - Intel Core i3 - 6Go RAM - GeForce 405 video-nouveau
aminnairi
archer de cavalerie
Messages : 187
Inscription : lun. 10 août 2015, 13:50
Localisation : France

Re: [SCRIPT] NVIDIA-switch

Message par aminnairi »

:merci: le script :bravo: je testerais ça et je t'enverrais les feedback...

Après y'a juste une petite coquille Intel = intégrée NVIDIA = dédiée mais c'est pas bien grave ça se corrigera à la version 1.1 8)
Arch Linux x86_64 UEFI
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
aminnairi
archer de cavalerie
Messages : 187
Inscription : lun. 10 août 2015, 13:50
Localisation : France

Re: [SCRIPT] NVIDIA-switch

Message par aminnairi »

Donc pour les feedback :

J'ai essayé de lancer le script avec l'affichage graphique. Le seul résultat c'est l'affichage graphique qui stop. Aucun autre fichier n'a été modifié.

J'ai essayé dans un tty et pareil aucun fichier changé.

Étant donné que mes compétences en script bash sont très limités je pourrais pas en dire plus que ça mais je vais essayer de voir de mon côté.
Arch Linux x86_64 UEFI
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
Répondre