Préférences logiciel => $VARIABLE Le sujet est résolu

Demande d'aide : c'est ici.
Répondre
Avatar de l’utilisateur
dezix
Membre hyper actif
Membre hyper actif
Messages : 3548
Inscription : 04 juin 2016, 14:50
Status : Hors-ligne

Bonjour,

Il est temps que je comprennes un grand principe de l'informatique !


Comment fixer (permanent) une variable pour une application ?

Voici un exemple concret :


gPodder est un client pour le podcasting.

par défaut le répertoire de téléchargement est : /home/<user>/gPodder/Downloads


La doc du logiciel indique que l'on peut jouer sur une (ou les deux) des deux variables d'environnement :

GPODDER_HOME

Les paramètres et les fichiers de la base de données sont toujours stockés dans $GPODDER_HOME
Les téléchargements seront enregistrés dans le dossier Downloads à l'intérieur du nouveau dossier "home" ainsi défini.


GPODDER_DOWNLOAD_DIR

Les téléchargements seront enregistrés directement dans le dossier que vous aurez spécifié
(qui ne doit pas nécessairement se trouver dans le dossier "home")


J'ai testé et je comprends que la commande :

$ export GPODDER_HOME=/home/toto/Documents/gpod && gpodder

fonctionne pour lancer l'application avec son "home" déplacé vers : /home/toto/Documents/gpod

Mais mis à part,
la création d'un lanceur dans : ~/.local/share/applications
ou d'un script (ce qui revient au même)
utilisant la commande précitée, (ça ne me parait pas très satisfaisant)

je ne vois pas comment cela peut-être géré plus globalement :
  • soit dans la session utilisateur
  • soit même sur le système entier pour tous les utilisateurs

Merci pour vos lumières.
**Simple Utilisateur** -- Debian stable - XFCE
Avatar de l’utilisateur
dezix
Membre hyper actif
Membre hyper actif
Messages : 3548
Inscription : 04 juin 2016, 14:50
Status : Hors-ligne

j'avance un peu, disons que je débroussaille.

Point positif :

~/.bashrc

Je viens d'apprendre que ce fichier est exécuté quand on ouvre un terminal X dans la session graphique. :blush:
J'ai donc pu vérifier qu'en ajoutant :

export GPODDER_HOME="/home/toto/Documents/gpod"

à la fin de ~/.bashrc

que dans un émulateur de terminal (p.ex : xfce4-terminal), lxterminal, etc...)
j'ai :

Code : Tout sélectionner

$ echo "$GPODDER_HOME"
/home/toto/Documents/gpod

et donc :

$ gpodder

ouvre bien le client de podcasting avec "home" = /home/toto/Documents/gpod


Autres points :

Pour ce que j'ai lu,

la même ligne :

export GPODDER_HOME="/home/toto/Documents/gpod"

dans : ~/.profile

aurait le même effet dans une console tty (avec login : toto ie pour cet utilisateur → /home/toto/.profile )
sauf que c'est en mode texte donc à tester avec une autre application ....


J'ai aussi trouvé mention de : ~/.pam_environment
pour lequel c'est plus flou (pas certain que ce soit utilisé par debian)


Avec cela j'ai donc des indices,
mais toujours pas de solution pour la session graphique.
**Simple Utilisateur** -- Debian stable - XFCE
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 5865
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : En ligne

Dezix,
attention à ne pas confondre les variables d'environnement (valable partout dans le systeme) , et les variables du shell (valable pour le shell en question et ses descendants)Et pour les variables globales persistantes, i l me semble que c'est dans /etc/environment.d
Avatar de l’utilisateur
dezix
Membre hyper actif
Membre hyper actif
Messages : 3548
Inscription : 04 juin 2016, 14:50
Status : Hors-ligne

Salut Pirate,

oui, mais dans mon exemple,
je fais comment ?

Dans une session utilisateur graphique "ordinaire" $GPODDER_HOME n'est pas attribué

Donc ma question (que j'ai peut-être mal posée) :

comment avoir dans la session graphique l'équivalent de :
dezix a écrit : 19 avr. 2020, 20:10 export GPODDER_HOME="/home/toto/Documents/gpod"

à la fin de ~/.bashrc
(dans un émulateur de terminal ... ça marche)
Alors comment avoir le même résultat directement en mode graphique ?

Dans le cas précis, j'ai testé avec succès 2 contournements :
  • un lien => c'est le plus simple (on oublie les VARIABLEs) mais ça ne marche que parce qu'il s'agit d'un chemin
  • un lanceur perso vers un script [ export + application ]


Mais ça reste du bricolage,
alors j'aimerais bien savoir/comprendre la solution "académique" valable quelque soit la situation :003:



D'autre part, j'ai testé ta piste en créant :

/home/toto/.config/environment.d/60-gpodder.conf

avec cette ligne de code uniquement :

GPODDER_HOME=/home/toto/Documents/gpodder


J'ai fermé/ouvert la session puis rebooté,
cela ne fonctionne pas.
on reste sur le chemin par défaut
.... c'est peut-être un bug de l'appli ???
... mais je doute plus de moi que d'un bug


Il faut dire que :

$ man environment.d

est -- sauf vot' respect -- clair... comme du jus de chique! CHEF!
Example
Example 1. Setup environment to allow access to a program installed in
/opt/foo

/etc/environment.d/60-foo.conf:

FOO_DEBUG=force-software-gl,log-verbose
PATH=/opt/foo/bin:$PATH
LD_LIBRARY_PATH=/opt/foo/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
XDG_DATA_DIRS=/opt/foo/share:${XDG_DATA_DIRS:-/usr/local/share/:/usr/share/}

J'ai pas trop pigé l'exemple! CHEF!
**Simple Utilisateur** -- Debian stable - XFCE
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 5865
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : En ligne

Apre la manip et le reboot, que contient la variable en question ? (teste avec echo et le $ devant le nom)
je parlais de /etc/environment.d pour que ce soit vu par tout le monde.
et essaie d'encadrer le nom du chemein avec des " ou ', je ne sais jamais lequel est recommandé.
Avatar de l’utilisateur
dezix
Membre hyper actif
Membre hyper actif
Messages : 3548
Inscription : 04 juin 2016, 14:50
Status : Hors-ligne

Q? le chiffre xx en préfixe aux fichiers xx-mon_fichier.conf indique une priorité ?
**Simple Utilisateur** -- Debian stable - XFCE
Avatar de l’utilisateur
dezix
Membre hyper actif
Membre hyper actif
Messages : 3548
Inscription : 04 juin 2016, 14:50
Status : Hors-ligne

j'ai testé toutes les combinaisons avec/sans guillemets simples/doubles dans /etc/environment.d et/ou ~/.config/environment.d

cela ne fonctionne dans aucun des cas :((

Il doit y avoir une connerie qui bloque ... mais où ?
**Simple Utilisateur** -- Debian stable - XFCE
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 5865
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : En ligne

tu n'as pas dit ce que donnait echo $GPODDER_HOME
L'exemple donné dans le man rajoute des valeurs à des variables existantes
Avatar de l’utilisateur
dezix
Membre hyper actif
Membre hyper actif
Messages : 3548
Inscription : 04 juin 2016, 14:50
Status : Hors-ligne

echo renvoie toujours une ligne vide
**Simple Utilisateur** -- Debian stable - XFCE
MicP
Modérateur
Modérateur
Messages : 896
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

Bonjour

J'ajoute la ligne suivante à la fin du fichier /etc/security/pam_env.conf

Code : Tout sélectionner

maVar  DEFAULT=valVarTest


et, après m'être déconnecté/reconnecté à ma session graphique :

Code : Tout sélectionner

michel@debT450:~$ echo $maVar
valVarTest
michel@debT450:~$ 

michel@debT450:~$ su -
Mot de passe : 
root@debT450:~# 

root@debT450:~# echo $maVar
valVarTest
root@debT450:~# 
Pour faire le ménage, je supprime la ligne ajoutée dans /etc/security/pam_env.conf
et je poursuis mes test …

=======
J'ajoute la ligne suivante à la fin du fichier /etc/environment

Code : Tout sélectionner

maVar="Autre variable"


et, après m'être déconnecté/reconnecté à ma session graphique :

Code : Tout sélectionner

michel@debT450:~$ echo $maVar
Autre variable
michel@debT450:~$ 

michel@debT450:~$ su -
Mot de passe : 
root@debT450:~# 

root@debT450:~# echo $maVar
Autre variable
root@debT450:~# 

=======
Il ya beaucoup d'autres possibilités à lister
mais il me faudrait savoir quel est Environnement de Bureau tu utilises
et si tu veux que cette variable soit créée de façon globale pour tous les comptes utilisateurs
ou bien pour un seul compte utilisateur.
Avatar de l’utilisateur
dezix
Membre hyper actif
Membre hyper actif
Messages : 3548
Inscription : 04 juin 2016, 14:50
Status : Hors-ligne

@MicP

Bonjour et merci pour ton aide,

J'ai testé tout ce que tu as décrit,
tout fonctionne SAUF ce que j'attendais :shok:
MicP a écrit : 21 avr. 2020, 21:15 michel@debT450:~$ echo $maVar
Autre variable
C'est à dire la variable pour l'utilisateur.


J'ai finalement trouvé une SOLUTION dans :


Il s'agit de créer/éditer : ~/.xsessionrc
en y mettant :

Code : Tout sélectionner

export VARIABLE_1=valeur1
export VARIABLE_2="valeur2 composée"

Cela est suffisant pour l'utilisateur de cette session uniquement.
Donc ça fonctionne avec :$ sudo ...
mais pas en root après : su -


MicP a écrit : 21 avr. 2020, 21:15 Il ya beaucoup d'autres possibilités à lister
mais il me faudrait savoir quel est Environnement de Bureau tu utilises
et si tu veux que cette variable soit créée de façon globale pour tous les comptes utilisateurs
ou bien pour un seul compte utilisateur.

Les tests ont été faits sur une VM openbox/LXDE
mais en général j'utilise XFCE pour mes installations.

Je ne veux préjuger de rien,
mais il semblerait que la solution passant pas ~/.xsessionrc soit indépendante de l'environnement
(peut-être pas pour Gnome qui possède un fichier ~/.gnomerc ou d'autres ... KDE ???)

En tout cas elle est simple et ne nécessite pas de droits d'admin,
le seul truc => Ne Pas Oublier : export
**Simple Utilisateur** -- Debian stable - XFCE
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 5865
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : En ligne

~/.xsessionrc est liée au gestionnaire graphique (xorg par exemple), et est donc une couche en dessous du gestionnaire des fenêtres, lui meme en dessous du gestionnaire de bureau.
Avatar de l’utilisateur
dezix
Membre hyper actif
Membre hyper actif
Messages : 3548
Inscription : 04 juin 2016, 14:50
Status : Hors-ligne

piratebab a écrit : 22 avr. 2020, 08:47 ~/.xsessionrc est liée au gestionnaire graphique (xorg par exemple), et est donc une couche en dessous du gestionnaire des fenêtres, lui meme en dessous du gestionnaire de bureau.
Cela signifie-t-il que la config du gestionnaire graphique est surchargée par la config du WM elle-même surchargée par celle du Bureau ?

==================

Maintenant que j'ai une solution "individuelle" pour chaque utilisateur,
j'en voudrais une par défaut pour tous les utilisateurs
qui devrait selon toute logique pouvoir être surchargée par les utilisateurs via leur ~/.xsessionrc

Je continue à chercher et je reviens ...
**Simple Utilisateur** -- Debian stable - XFCE
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 5865
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : En ligne

Le ~/.xsessionrc est lancé par l'utilisateur (par gdm par exemple)
Le seul fichier que je connaisse qui soit global systeme est le /etc/environnement comme l'a testé MidP
MicP
Modérateur
Modérateur
Messages : 896
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

dezix a écrit :J'ai testé tout ce que tu as décrit,

tout fonctionne SAUF ce que j'attendais :shok:
MicP a écrit :
michel@debT450:~$ echo $maVar
Autre variable
C'est à dire la variable pour l'utilisateur.
Je ne comprends pas du tout ce que veux dire "… la variable pour l'utilisateur …"

=======
Donc ça fonctionne avec :$ sudo ...
mais pas en root après : su -
Quand tu utilises la commande su -
c'est pour passer sous le compte root en utilisant les variables d'environnement indispensables à l'utilisation des commandes d'administration que seront lancées depuis le compte root
donc c'est logique que les variables d'environnement du compte utilisateur qui a lancé la commande su - ne soient plus prises en compte.

=======
Dans le fichier /etc/security/pam_env.conf
tu peux aussi utiliser les variables d'environnement du compte utilisateur qui a ouvert sa session

Pour illustrer cette fonctionnalité, ajoute la ligne suivante à la fin du fichier /etc/security/pam_env.conf :

Code : Tout sélectionner

maVar  DEFAULT="\$HOME -> ${HOME}   \${USER} -> ${USER}"

puis, après avoir fermé et ré-ouvert ta session :

Code : Tout sélectionner

michel@debT450:~$ echo $maVar
${HOME} -> /home/michel ${USER} -> michel
michel@debT450:~$ 
Avatar de l’utilisateur
dezix
Membre hyper actif
Membre hyper actif
Messages : 3548
Inscription : 04 juin 2016, 14:50
Status : Hors-ligne

MicP a écrit : 22 avr. 2020, 09:51 Je ne comprends pas du tout ce que veux dire "… la variable pour l'utilisateur …"
pour :
MicP a écrit : 21 avr. 2020, 21:15 J'ajoute la ligne suivante à la fin du fichier /etc/environment

Code : Tout sélectionner

maVar="Autre variable"


et, après m'être déconnecté/reconnecté à ma session graphique :

Code : Tout sélectionner

michel@debT450:~$ echo $maVar
Autre variable
michel@debT450:~$

michel@debT450:~$ su -
Mot de passe :
root@debT450:~#

root@debT450:~# echo $maVar
Autre variable
root@debT450:~#
et bien $ echo $maVar renvoyait une ligne vide au lieu de : Autre variable comme dans ton exemple.


Pour le coup de sudo et su

Je le (re)précisais pour les futurs éventuels lecteurs.

===================================

J'ai refais les tests sur mon installation principale XFCE/testing
=> tout fonctionne comme prévu ;-))

Donc un grand merci à vous 2 pour votre patience.

=====================================

Résumé pour les visiteurs du futur


VARIABLE D'ENVIRONNEMENT spécifique à une application

A. SYSTÈME

/etc/environment

Ce fichier permet de fournir des variables valables sur le système complet.

C'est à dire :
  • pour tous les utilisateurs y compris root
  • dans les consoles tty
  • dans un émulateur de terminal X
  • dans une session graphique utilisateur (applications graphiques)

B. SESSION UTILISATEUR

Il est possible pour un utilisateur (simple) de définir des variables pour son usage personnel
ou de surcharger des variables définies globalement pour le système.

Pour cela l'utilisateur dispose de 3 "registres" ou niveaux distincts :
  • la session graphique via le fichier : ~/.xsessionrc
  • l'émulateur de terminal X via le fichier : ~/.bashrc
  • la console ttyn [Ctrl+Alt+Fn] via le fichier : ~/.profile

PS: Si j'ai écrit une connerie ... corrigez-moi :079: :082:
**Simple Utilisateur** -- Debian stable - XFCE
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 5865
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : En ligne

pour que le fichier environement soit pris en compte, je pense qu'une simple déconnexion de l'utilisateur ne suffit pas. Il doit étre charger au démarrage uniquement. Il doit etre possible de forcer un chargement à chaud, mais je ne sais pas faire.
Avatar de l’utilisateur
dezix
Membre hyper actif
Membre hyper actif
Messages : 3548
Inscription : 04 juin 2016, 14:50
Status : Hors-ligne

piratebab a écrit : 22 avr. 2020, 13:55 pour que le fichier environement soit pris en compte, je pense qu'une simple déconnexion de l'utilisateur ne suffit pas. Il doit être chargé au démarrage uniquement. Il doit être possible de forcer un chargement à chaud, mais je ne sais pas faire.
J'ai vérifié,
la simple déconnexion est suffisante pour la prise en compte de /etc/environment
au moins sur mon installation testing "de base".
**Simple Utilisateur** -- Debian stable - XFCE
Avatar de l’utilisateur
vv222
Membre actif
Membre actif
Messages : 852
Inscription : 18 avr. 2016, 20:14
Contact :
Status : Hors-ligne

MicP a écrit : 22 avr. 2020, 09:51 Dans le fichier /etc/security/pam_env.conf
tu peux aussi utiliser les variables d'environnement du compte utilisateur qui a ouvert sa session
Merci pour le partage, c’est une fonctionnalité que je ne connaissais pas mais qui va probablement m’être utile :icon_e_wink:
Répondre