[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

Re: [SCRIPT] NVIDIA-switch

Message par aminnairi »

Je pense savoir pourquoi rien n'est changé après la fermeture du display manager : quand j'ai essayé de tester chaque ligne à la main, pour le sed j'ai un résultat qui me dit que je n'ai pas la permission nécessaire (il faut être root pour envoyer un sed sur /etc/environment). Il faudrait pouvoir élever ses privilèges au sein du script.
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 »

aminnairi a écrit :Il faudrait pouvoir élever ses privilèges au sein du script.
a l'intérieur du script ? a part yaourt, ce n'est pas une façon classique de faire; pourquoi de pas l'appeler directement avec les bons droits ?
tu le lances à partir de ton DE ? tu peux ainsi le lancer via gksu

tu doit le restreindre en lui donnant des droits : chown root:root switch.sh
et insérer un code de contrôle au début du type :

Code : Tout sélectionner

if [[ $EUID -ne 0 ]]; then
        echo "Erreur, ce script demande des droits administrateurs"
        exit 1
fi
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 »

papajoke a écrit :
aminnairi a écrit :Il faudrait pouvoir élever ses privilèges au sein du script.
a l'intérieur du script ? a part yaourt, ce n'est pas une façon classique de faire; pourquoi de pas l'appeler directement avec les bons droits ?
Oui c'est ce que je me suis posé comme question. Du coup ça fonctionne avec un sudo.
papajoke a écrit :tu le lances à partir de ton DE ? tu peux ainsi le lancer via gksu
Oui je le lance à partir de mon DE. Je le lance aussi sans DE et à priori ça fonctionne de la même manière. J'ai pas encore essayé avec gksu mais j'imagine que c'est juste une solution plus pratique que le classique sudo.
papajoke a écrit :tu doit le restreindre en lui donnant des droits : chown root:root switch.sh
et insérer un code de contrôle au début du type :

Code : Tout sélectionner

if [[ $EUID -ne 0 ]]; then
        echo "Erreur, ce script demande des droits administrateurs"
        exit 1
fi
Ça fonctionne très bien. Rajouté en début de script et testé sans sudo.

Maintenant il y a deux choses qui ne fonctionnent pas :

J'arrive à passer de NVIDIA à Intel, mais l'inverse n'est pas possible. J'ai regardé le fichier /etc/environment mais le script ne rajouté pas le LD_LIBRARY_PATH=[...] quand je veux utiliser NVIDIA. Il doit y avoir une erreur dans la syntaxe et je vais essayer de voir ce qui cloche.

Et du coup je pense que c'est ça qui empêche le script de continuer vu que le restart DE ne passe pas non plus. Je vais commencer par régler le problème au dessus qui devrait résoudre le redémarrage de l'environnement.
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 »

D'accord alors j'arrive ni à lancer

Code : Tout sélectionner

echo | sudo tee  'LD_LIBRARY_PATH=/usr/lib/nvidia:/usr/lib32/nvidia' >> /etc/environment
Ni à lancer

Code : Tout sélectionner

echo 'LD_LIBRARY_PATH=/usr/lib/nvidia:/usr/lib32/nvidia' >> /etc/environment
Il doit y avoir un moyen de l'éditer
Et même gksu ne fonctionne pas... Est-ce qu'il y a un moyen de l'éditer quand même ce fameux fichier ? :lol:
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 »

normal que cela ne fonctionne pas en ligne de commande mais ca fonctionne en interne dans le script !
si tu désires absolument le tester en ligne de commande, il faut aussi avoir les droits sur le fichier /etc/environment. Pour cela :

Code : Tout sélectionner

sudo sh -c "echo 'LD_LIBRARY_PATH=/usr/lib/nvidia:/usr/lib32/nvidia' >> /etc/environment"
ps: ne pas utiliser cela dans le script !
Et du coup je pense que c'est ça qui empêche le script de continuer vu que le restart DE ne passe pas non plus
non c'est que j'avais mis en commentaire le restart :wink: histoire de voir les retours écran
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 »

Code : Tout sélectionner

#!/bin/bash
#Ce script permet de détecter l'utilisation de l'une ou l'autre carte graphique Intel ou NVIDIA et de passer de l'une à l'autre

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

state=$(grep '^LD_LIBRARY_PATH' /etc/environment)
if [ "$state" == "" ]; then
    echo "Arrêt de l'environnement graphique pour changement de carte graphique"
    systemctl stop diplay-manager
    echo "Environnement graphique arrêté avec succès"
    echo "Libraries Intel trouvées"
    echo "Changement de librairies pour utilisation de la carte graphique NVIDIA"
    sed -i '6 s/#//g' /etc/environment
    echo "Changement de librairies effectué avec succès"
    echo "Changement des paramètres du serveur graphique pour utilisation de la carte graphique NVIDIA"
    mv /home/amin/.00-nvidia-optimus.conf /etc/X11/xorg.conf.d/00-nvidia-optimus.conf
    echo "Changement des paramètres du serveur graphique effectué avec succès"
    echo "Redémarrage de l'environnement graphique en cours"
    systemctl restart display-manager
    echo "Redémarrage de l'environnement graphique effectué avec succès"
else
    echo "Arrêt de l'environnement graphique pour changement de carte graphique"
    systemctl stop diplay-manager
    echo "Environnement graphique arrêté avec succès"
    echo "Lirairies NVIDIA trouvées"
    echo "Changements de librairies pour utilisation de la carte graphique Intel"
    sed -i '6 s/^/#/' /etc/environment
    echo "Changement de librairies effectué avec succès"
    echo "Changement des paramètres du serveur graphique pour utilisation de la carte graphique Intel"
    mv /etc/X11/xorg.conf.d/00-nvidia-optimus.conf /home/amin/.00-nvidia-optimus.conf
    echo "Changement des paramètres du serveur graphique effectué avec succès"
    echo "Redémarrage de l'environnement graphique en cours"
    systemctl restart display-manager
    echo "Redémarrage de l'environnement graphique effectué avec succès"
fi
Voilà le script (remanié mais je me suis beaucoup inspiré de ce que tu as fait) et qui est parfaitement fonctionnel. Maintenant je voulais ajouter un fichier log. Ce que je voudrais faire c'est remplir le fichier log avec tout les echo. Mais également qu'à chaque fois que je relance le script, le fichier soit vierge et remplit de nouveau avec les nouvelles occurences (donc je ne souhaite pas conserver de date et autre, car si ça marche, je n'irai pas voir le fichier). Mais en plus des echo, il faudrait avoir le retour des erreur du style :

Code : Tout sélectionner

erreur : impossible de déplacer le fichier blabla : n'existe pas.
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 »

je t'ai déjà dit ce que je pensais de ton "sed sur la ligne no6" mais nous sommes dans un pays libre :wink:

perso, je préfère utiliser journald.
voici une petite fonction que tu peux ajouter au début du script :

Code : Tout sélectionner

# journalctl -t switchnv : historique de ce script dans journald
ITEMS_IDENTIFIER='switchnv'
function log(){
	local msg=$1
	local niveau=${2:-5}
	printf "%s\n%s\n%s\n%s\n%s" \
		MESSAGE="${msg}"  \
		SYSLOG_IDENTIFIER="${ITEMS_IDENTIFIER}" \
		PRIORITY="${niveau}" \
		CODE_FILE="switch" \
		_EXE="$0" \
	| logger --journald                
}
qui s'utilise comme ceci :

Code : Tout sélectionner

if [ "$state" == "" ]; then
    log "Arrêt de l'environnement graphique pour changement de carte graphique"
    systemctl stop display-manager
    log "Environnement graphique arrêté avec succès"
    [ -f "/fichier/inexistant" ] || log "'/fichier/inexistant' non trouvé ?" 3
    mv toto || log "oops avec ma commande mv" 3
ps: 2ème paramètre à 3 pour le erreurs

et la consultation, tout simplement :

Code : Tout sélectionner

journalctl -t switchnv
----------------------------
ps: dans ton code "systemctl stop diplay-manager" ne risque pas de fonctionner c'est mieux avec display.
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 »

Pour ce qui est de l'echo sur la librairie, j'avais essayé ça marchait bien dans le script mais ça n'écrivait rien du tout dans le fichier /etc/environment. Donc j'ai préféré le sed qui avait l'air de fonctionner. Bien sûr à terme, il va falloir que je trouve une solution car j'aimerais pouvoir partager cette solution sur le wiki Optimus via NVIDIA. Puis dans le même temps j'aurais l'occasion d'en apprendre un peu plus.

Ensuite j'aurais aimé que tu puisse m'expliquer un peu plus en détail la syntaxe de

Code : Tout sélectionner

if [ "$state" == "" ]; then
    log "Arrêt de l'environnement graphique pour changement de carte graphique"
    systemctl stop display-manager
    log "Environnement graphique arrêté avec succès"
    [ -f "/fichier/inexistant" ] || log "'/fichier/inexistant' non trouvé ?" 3
    mv toto || log "oops avec ma commande mv" 3
J'ai peur de ne pas avoir bien compris comment l'utiliser.

:merci:
Dernière modification par aminnairi le dim. 11 oct. 2015, 22:11, modifié 1 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
papajoke
Elfe
Messages : 820
Inscription : sam. 30 août 2014, 19:54

Re: [SCRIPT] NVIDIA-switch

Message par papajoke »

je ne suis pas sur de savoir ce qui te gène ?

il faudrait au départ juste tester la présence des 3 fichiers .conf

Code : Tout sélectionner

if [ ! -f "/fichier/inexistant" ]; then
  log "'/fichier/inexistant' obligatoire non trouvé ?" 3
  exit
fi
tu peux aussi l'écrire :

Code : Tout sélectionner

[ -f "/home/amin/.00-nvidia-optimus.conf ] || { echo "'00-nvidia-optimus.conf' non trouvé ?"; exit; }
|| signifie exécuter uniquement si le retour de la commande précédente est NON valide (&& est le contraire)
utilise les if c'est certainement plus parlant pour toi.
[ -f "nomFichier" ] retourne vrai si le fichier existe
[ ! -f "nomFichier" ] retourne vrai si le fichier n'existe pas

ps: avec la présence de ton fichier "/home/amin/.00-nvidia-optimus.conf" cela me semble difficile de faire une solution générique !
aminnairi a écrit :EDIT : trouvé comment envoyer un echo avoir droit admin par

Code : Tout sélectionner

echo 'LD_LIBRARY_PATH=[...]' | sudo tee -a /etc/environment
??????? mais non puisque tu lances déjà ce script avec sudo(ou autre), toutes les commandes dans le script ont déjà les droits administrateur
echo "chaine" >> /etc/environment doit fonctionner :!:
Dernière modification par papajoke le dim. 11 oct. 2015, 22:22, 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 »

D'accord je comprends mieux. Je ne comprenais pas du tout pour le -f mais c'était tout bête finalement. Et oui, c'est vrai que je fais des scripts depuis pas longtemps et j'ai plus l'habitude d'apprendre avec les if mais c'est cool de donner les deux solutions comme ça si je tombe dessus un jour je penserais à ce que tu m'as donné. :chinois:

En fait, faire une solution générique était le but final mais pour l'instant utiliser mon nom d'utilisateur c'est pour l'aspect pratique, ensuite je pense utiliser le ~/ avec le nom de fichier 00-nvidia-optimus.conf que les lecteurs du sujet sur Optimus auront créé au départ. Je n'avais pas utilisé le ~/ au début parce que je l'utilisais dans le tty2 avec le root pour être sûr d'avoir tout les droit et pas me casser la tête avec les sudo et autres (et également pour comparer avec l'utilisateur). Du coup je remplacerai quelques lignes et ça devrait le faire.

Pour le moment ça n'a pas marché. Mais j'avais besoin d'essayer et de voir par moi-même :lol: Je vais essayer de creuser un peu plus l'internet pour voir si cela est possible...

EDIT 1 : oui par rapport à echo je me suis rectifié tout de suite. Encore un fast thinking de ma part...

EDIT 2 : je n'arrivais pas à modifier le /etc/environment même avec sudo. Un simple chmod a résolu mon souci... :lol
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 »

Voilà ce que j'aimerais rajouter ensuite dans le script.

Code : Tout sélectionner

#!/bin/sh

arch=$(getconf LONG_BIT)
package=$(pacman -Qs mesa-libgl > /dev/null)

if [ "$arch" == "32" ]; then
    [ -d "/usr/lib/mesa" ] || { echo "Librairies Intel introuvables"; exit; }
    echo "Librairies Intel trouvées"
    [ -d "/usr/lib/nvidia" ] || { echo "Librairies NVIDIA introuvables"; exit; }
    echo "Librairies NVIDIA trouvées"
    [ "$package" == "mesa-libgl" ] && { echo "Veuillez installer le paquet mesa-libgl afin de continuer"; exit; }
    echo "Librairie Intel active"
elif [ "$arch" == "64" ]; then
    [ -d "/usr/lib/mesa" ] || { echo "Librairies Intel introuvables"; exit; }
    [ -d "/usr/lib32/mesa" ] || { echo "Librairies Intel pour compatiblité 32 bits introuvables"; exit; }
    echo "Librairies Intel pour architecture 64 bits trouvées"
    [ -d "/usr/lib/nvidia" ] || { echo "Librairies NVIDIA introuvables"; exit; }
    [ -d "/usr/lib32/nvidia" ] || { echo "Librairies NVIDIA pour compatibilté 32 bits introuvables"; exit; }
    echo "Librairies NVIDIA pour architecture 64 bits trouvées"
    [ "$package" == "mesa-libgl" ] && { echo "Veuillez installer le paquet mesa-libgl afin de continuer"; exit; }
    [ "$package" == "lib32-mesa-libgl" ] && { echo "Veuillez installer le paquet lib32-mesa-libgl afin de continuer"; exit; }
    echo "Librairie Intel et dépendances 32 bits actives"
else
    echo "Architecture non supportée..."
fi
J'ai refais un petit script pour cette partie pour pouvoir la tester sans mettre le bazar dans l'autre. Tout fonctionne mais je cherche actuellement une solution pour pouvoir interroger l'installation (ou non) du paquet mesa-libgl qui est ESSENTIEL pour pouvoir faire fonctionner tout le script. : FAIT.

Les librairies NVIDIA sont disponibles mais non installées. Les librairies Intel sont disponibles et installées. Voilà pourquoi je dois également faire une vérification sur le paquet mesa-libgl.
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 »

Je refais un petit résumé de mon script en entier pour ceux qui passeront et qui pourraient être intéressés. Je mettrais à jour le wiki sur le rendu NVIDIA pour proposer cette solution. N'oubliez pas de changer tout les "amin" par votre nom d'utilisateur sinon ça ne marchera pas (rechercher et remplacer sur nano est très pratique pour ça :D). Et merci beaucoup à benjarobin et papajoke sans quoi ça n'aurait jamais pu être possible. :merci:

Code : Tout sélectionner

#!/bin/bash
#Ce script permet de détecter l'utilisation de l'une ou l'autre carte graphique Intel ou NVIDIA et de passer de l'une à l'autre

# journalctl -t switchnv : historique de ce script dans journald
ITEMS_IDENTIFIER='switchnv'
function log(){
   local msg=$1
   local niveau=${2:-5}
   printf "%s\n%s\n%s\n%s\n%s" \
      MESSAGE="${msg}"  \
      SYSLOG_IDENTIFIER="${ITEMS_IDENTIFIER}" \
      PRIORITY="${niveau}" \
      CODE_FILE="switch" \
      _EXE="$0" \
   | logger --journald                
}

if [[ $EUID -ne 0 ]]; then
        log "Erreur, ce script demande des droits administrateurs par l'utilisateur"
        exit 1
fi

arch=$(getconf LONG_BIT)
package=$(pacman -Qs mesa-libgl > /dev/null)

if [ "$arch" == "32" ]; then
    [ -d "/usr/lib/mesa" ] || { log "Librairies Intel introuvables"; exit; }
    log "Librairies Intel trouvées"
    [ -d "/usr/lib/nvidia" ] || { log "Librairies NVIDIA introuvables"; exit; }
    log "Librairies NVIDIA trouvées"
    [ "$package" == "mesa-libgl" ] && { log "Veuillez installer le paquet mesa-libgl afin de continuer"; exit; }
    log "Librairie Intel active"
elif [ "$arch" == "64" ]; then
    [ -d "/usr/lib/mesa" ] || { log "Librairies Intel introuvables"; exit; }
    [ -d "/usr/lib32/mesa" ] || { log "Librairies Intel pour compatiblité 32 bits introuvables"; exit; }
    log "Librairies Intel pour architecture 64 bits trouvées"
    [ -d "/usr/lib/nvidia" ] || { log "Librairies NVIDIA introuvables"; exit; }
    [ -d "/usr/lib32/nvidia" ] || { log "Librairies NVIDIA pour compatibilté 32 bits introuvables"; exit; }
    log "Librairies NVIDIA pour architecture 64 bits trouvées"
    [ "$package" == "mesa-libgl" ] && { log "Veuillez installer le paquet mesa-libgl afin de continuer"; exit; }
    [ "$package" == "lib32-mesa-libgl" ] && { log "Veuillez installer le paquet lib32-mesa-libgl afin de continuer"; exit; }
    log "Librairie Intel et dépendances 32 bits actives"
else
    log "Architecture non supportée..."
fi

state=$(grep '^LD_LIBRARY_PATH' /etc/environment)
if [ "$state" == "" ]; then
    [ -f "/home/amin/.00-nvidia-optimus.conf" ] || { log "/home/amin/.00-nvidia-optimus.conf introuvable."; exit; }
    log "Carte graphique Intel active"
    log "Changement de librairies pour utilisation de la carte graphique NVIDIA"
    echo 'LD_LIBRARY_PATH=/usr/lib/nvidia:/usr/lib32/nvidia' >> /etc/environment
    log "Changement de librairies effectué avec succès"
    log "Changement des paramètres du serveur graphique pour utilisation de la carte graphique NVIDIA"
    mv /home/amin/.00-nvidia-optimus.conf /etc/X11/xorg.conf.d/00-nvidia-optimus.conf
    log "Changement des paramètres du serveur graphique effectué avec succès"
    log "Redémarrage de l'environnement graphique en cours"
    systemctl restart display-manager
    log "Redémarrage de l'environnement graphique et utilisation du rendu NVIDIA effectué avec succès"
else
    [ -f "/etc/X11/xorg.conf.d/00-nvidia-optimus.conf" ] || { log "/etc/X11/xorg.conf.d/00-nvidia-optimus.conf introuvable."; exit; }
    log "Carte graphique NVIDIA active"
    log "Changements de librairies pour utilisation de la carte graphique Intel"
    sed -i '/LD_LIBRARY_PATH/d' /etc/environment
    log "Changement de librairies effectué avec succès"
    log "Changement des paramètres du serveur graphique pour utilisation de la carte graphique Intel"
    mv /etc/X11/xorg.conf.d/00-nvidia-optimus.conf /home/amin/.00-nvidia-optimus.conf
    log "Changement des paramètres du serveur graphique effectué avec succès"
    log "Redémarrage de l'environnement graphique en cours"
    systemctl restart display-manager
    log "Redémarrage de l'environnement graphique et utilisation du rendu Intel effectué avec succès"
fi
Je met le sujet en résolu puisque c'est le script que je cherchais. Bien que je souhaiterais proposer une application avec un systemd et pouvoir la partager via les dépôts AUR mais je ne vois pas l'intérêt (à moins d'une application) d'utiliser le systemd puisque de toute façon c'est du one shot et que j'ai placé le script dans /usr/bin/switch pour pouvoir l'utiliser facilement.
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 »

aminnairi a écrit :Les librairies NVIDIA sont disponibles mais non installées. Les librairies Intel sont disponibles et installées. Voilà pourquoi je dois également faire une vérification sur le paquet mesa-libgl.
oops je suis completement perdu ... et j'ai rien compris a tes tests :!:

Code : Tout sélectionner

package=$(pacman -Qs mesa-libgl > /dev/null)
if [ "$package" == "mesa-libgl" ]
if [ "$package" == "lib32-mesa-libgl" ]
???????? tu as testé ?????


pour tester si un paquet est installé ou non tu as des tests du type :

Code : Tout sélectionner

existe=$(pacman -Qq | grep "mesa-libgl")
if [ "$existe" == "" ] 
existe=$(pacman -Qq | grep -E "^nvidia-.*libgl") # regex à adapter ...
if [ "$existe" == "" ] 
nb=$(pacman -Qq | grep  "mesa-lib" | wc -l)...
aminnairi a écrit :N'oubliez pas de changer tout les "amin" par votre nom d'utilisateur sinon ça ne marchera pas (rechercher et remplacer sur nano est très pratique pour ça
il serait plus simple d'utiliser : ~/.config/00-nvidia-optimus.conf
Arch stable - Kde 6 / fish - btrfs/mbr - Intel Core i3 - 6Go RAM - GeForce 405 video-nouveau
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 »

@papajoke Tes tests sont tout aussi moche que les siens... Par exemple tu peux faire ceci

Code : Tout sélectionner

if pacman -Qq nvidia-libgl &>/dev/null ; then
   echo "paquet présent"
fi
Il faut penser à utiliser le code de retour du programme et non sa sortie...

Sinon, je n'avais pas vraiment donné de suite à mes premiers message car au final utiliser de cette façon LD_LIBRARY_PATH est une assez mauvaise idée. Et je n'ai pas eu le temps de trouver une vrai bonne solution, j'ai pensé à utiliser /etc/ld.so.conf.d/ (ldconfig)...
Mais au final je pense que créer dynamiquement les liens symboliques ce n'est pas si compliqué que cela, mais il faut lancer ldconfig une fois ceci fait...
Bref, on en revient à l'utilisation de ldconfig, ou de pacman...

Oui, je suis en train de vous dire que le script créé est basé sur une mauvaise idée...
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 [RÉSOLU]

Message par aminnairi »

Aucun problème on est là pour partager nos idées et améliorer le script (bon faut vraiment que j'arrête de le passer en résolu à chaque fois :lol:)
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 [EN COURS]

Message par aminnairi »

Alors pour te répondre papajoke oui j'ai testé sur ma machine 32 bits de secours et mon actuel machine et ça à l'air de fonctionner. Après j'imagine que c'est pas parfait comme test.

Et pour ta solution, apparemment les wildcards ne marchent pas très bien sur grep. Parce que les utilisateur peuvent avoir un driver nvidia (lib32-nvidia-libgl nvidia-libgl) ou nvidia-340xx (lib32-nvidia-340xx-libgl nvidia-340xx-libgl) etc... du coup il me fallait une recherche qui soit efficace. Comme l'essentiel est d'avoir mesa installé mais ...nvidia...libgl de présent dans le cache, et que le fichier /usr/lib/nvidia et générique d'un driver à l'autre, je me suis dit qu'une recherche sur ce fichier ne serait pas idiot.

@benjarobin : je m'étais renseigné sur LD_CONFIG ! Mais j'avais rien compris donc ça revenait au même :lol: Je pense que ce que j'ai compris c'est qu'on peut utiliser ldconfig dans le /etc/ld afin de ne pas impacter le system wide alors que dans /etc/environment c'est system wide (j'arrive pas à trouver l'équivalent français et puis ça fait plutôt badass).

Bon pour l'instant le script fonctionne mais ensemble on va l'améliorer (enfin plus vous les experts moi je serais la machine de test héhé). Et puis peut-être un systemd et puis après une application ! Et puis tant qu'on est dans la foulée un OS et un kernel haha non je m'emporte pardon...
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 [EN COURS]

Message par benjarobin »

Oui, sauf qu'il faut que je trouve le temps de faire un truc un minimum propre, et surtout ce qu'il n’embête c'est que je n'ai rien pour tester...
Il manque l'extinction de la carte nvidia au script via bbswitch, mais c'est à ce niveau là que j'ai un peu du mal à suivre...
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 [EN COURS]

Message par aminnairi »

Ben, en fait, pour l'extinction de la carte NVIDIA j'ai pris l'initative de ne pas l'éteindre parce que j'ai lu à droite à gauche des sujet en anglais qui disait que s'il on allume pas la carte NVIDIA à l'arrêt de la machine, bbswitch risque de ne pas fonctionner mais que si l'on compte utiliser Intel au démarrage il faut qu'elle soit allumée avant puis l'éteindre après. Comme de toute façon on est pas dans le cas de bbswitch (où l'on change dynamiquement), et tout les facteurs pris en compte je me suis dit que j'allais ne pas utiliser bbswitch. J'ai eu pleins de soucis en l'utisant (même la version git et dkms) donc du coup j'ai préféré faire l'impasse.

Pour ld.so.conf, je pensais que ça allait être plus difficile que ça. Il suffit de bien configurer le fichier ld.so.conf et de lancer un ldconfig -v. Peut-être que je n'ai pas tout suivi, mais je ne vois pas la différence entre ça et la solution variable d'environnement puisque dans tout les cas le script devra éditer le fichier et lancer une petite commande. Après je suis sûrement à côté de la plaque :lol:
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 [EN COURS]

Message par benjarobin »

La bonne nouvelle, c'est que mon vieux PC portable (voir ma signature) est compatible avec cette solution. Donc j'ai déjà pu faire quelques expérimentations, mais il va me falloir un peu de temps pour pondre quelque chose de "potable"
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 [EN COURS]

Message par aminnairi »

Pas de souci, je surveille le sujet de temps en temps. :)
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