[SCRIPT] NVIDIA-switch [EN COURS]
-
- archer de cavalerie
- Messages : 187
- Inscription : lun. 10 août 2015, 13:50
- Localisation : France
Re: [SCRIPT] NVIDIA-switch
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
Re: [SCRIPT] NVIDIA-switch
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 ?aminnairi a écrit :Il faudrait pouvoir élever ses privilèges au sein du script.
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
-
- archer de cavalerie
- Messages : 187
- Inscription : lun. 10 août 2015, 13:50
- Localisation : France
Re: [SCRIPT] NVIDIA-switch
Oui c'est ce que je me suis posé comme question. Du coup ça fonctionne avec un sudo.papajoke a écrit :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 ?aminnairi a écrit :Il faudrait pouvoir élever ses privilèges au sein du script.
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 le lances à partir de ton DE ? tu peux ainsi le lancer via gksu
Ça fonctionne très bien. Rajouté en début de script et testé sans 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
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.
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
-
- archer de cavalerie
- Messages : 187
- Inscription : lun. 10 août 2015, 13:50
- Localisation : France
Re: [SCRIPT] NVIDIA-switch
Code : Tout sélectionner
echo | sudo tee 'LD_LIBRARY_PATH=/usr/lib/nvidia:/usr/lib32/nvidia' >> /etc/environment
Code : Tout sélectionner
echo 'LD_LIBRARY_PATH=/usr/lib/nvidia:/usr/lib32/nvidia' >> /etc/environment
Et même gksu ne fonctionne pas... Est-ce qu'il y a un moyen de l'éditer quand même ce fameux fichier ?

7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
Re: [SCRIPT] NVIDIA-switch
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"
non c'est que j'avais mis en commentaire le restartEt 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

-
- archer de cavalerie
- Messages : 187
- Inscription : lun. 10 août 2015, 13:50
- Localisation : France
Re: [SCRIPT] NVIDIA-switch
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
Code : Tout sélectionner
erreur : impossible de déplacer le fichier blabla : n'existe pas.
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
Re: [SCRIPT] NVIDIA-switch

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
}
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
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.
-
- archer de cavalerie
- Messages : 187
- Inscription : lun. 10 août 2015, 13:50
- Localisation : France
Re: [SCRIPT] NVIDIA-switch
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

7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
Re: [SCRIPT] NVIDIA-switch
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
Code : Tout sélectionner
[ -f "/home/amin/.00-nvidia-optimus.conf ] || { echo "'00-nvidia-optimus.conf' non trouvé ?"; exit; }
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 !
??????? mais non puisque tu lances déjà ce script avec sudo(ou autre), toutes les commandes dans le script ont déjà les droits administrateuraminnairi a écrit :EDIT : trouvé comment envoyer un echo avoir droit admin parCode : Tout sélectionner
echo 'LD_LIBRARY_PATH=[...]' | sudo tee -a /etc/environment
echo "chaine" >> /etc/environment doit fonctionner

-
- archer de cavalerie
- Messages : 187
- Inscription : lun. 10 août 2015, 13:50
- Localisation : France
Re: [SCRIPT] NVIDIA-switch

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

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
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
-
- archer de cavalerie
- Messages : 187
- Inscription : lun. 10 août 2015, 13:50
- Localisation : France
Re: [SCRIPT] NVIDIA-switch
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
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.
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
-
- archer de cavalerie
- Messages : 187
- Inscription : lun. 10 août 2015, 13:50
- Localisation : France
Re: [SCRIPT] NVIDIA-switch


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
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
Re: [SCRIPT] NVIDIA-switch
oops je suis completement perdu ... et j'ai rien compris a tes testsaminnairi 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.

Code : Tout sélectionner
package=$(pacman -Qs mesa-libgl > /dev/null)
if [ "$package" == "mesa-libgl" ]
if [ "$package" == "lib32-mesa-libgl" ]
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)...
il serait plus simple d'utiliser :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
~/.config/00-nvidia-optimus.conf
- benjarobin
- Maître du Kyudo
- Messages : 17632
- Inscription : sam. 30 mai 2009, 15:48
- Localisation : Lyon
Re: [SCRIPT] NVIDIA-switch [RÉSOLU]
Code : Tout sélectionner
if pacman -Qq nvidia-libgl &>/dev/null ; then
echo "paquet présent"
fi
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...
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
-
- archer de cavalerie
- Messages : 187
- Inscription : lun. 10 août 2015, 13:50
- Localisation : France
Re: [SCRIPT] NVIDIA-switch [RÉSOLU]

7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
-
- archer de cavalerie
- Messages : 187
- Inscription : lun. 10 août 2015, 13:50
- Localisation : France
Re: [SCRIPT] NVIDIA-switch [EN COURS]
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

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...
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
- benjarobin
- Maître du Kyudo
- Messages : 17632
- Inscription : sam. 30 mai 2009, 15:48
- Localisation : Lyon
Re: [SCRIPT] NVIDIA-switch [EN COURS]
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...
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
-
- archer de cavalerie
- Messages : 187
- Inscription : lun. 10 août 2015, 13:50
- Localisation : France
Re: [SCRIPT] NVIDIA-switch [EN COURS]
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

7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
- benjarobin
- Maître du Kyudo
- Messages : 17632
- Inscription : sam. 30 mai 2009, 15:48
- Localisation : Lyon
Re: [SCRIPT] NVIDIA-switch [EN COURS]
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
-
- archer de cavalerie
- Messages : 187
- Inscription : lun. 10 août 2015, 13:50
- Localisation : France
Re: [SCRIPT] NVIDIA-switch [EN COURS]

7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM