Variable PATH et run-dialog

Bonsoir à toutes et tous,

Je cherche à pourvoir lancer mes commandes personnelles situées dans $HOME/bin/, dossier lui même ajouter à la variable [mono]PATH[/mono] via le fichier [mono].bashrc[/mono], depuis la boite de dialogue ‘Lancer une application’ (accessible par défaut sur la plupart des environnements de bureaux par le raccourci ALT+F2). J’utilise Mate, et cette fenêtre peut directement se lancer par la commande [mono]mate-panel --run-dialog[/mono].
Hors mes commandes personnelles ne sont pas listées, comme si la variable [mono]PATH[/mono] restait inchangée en dehors de l’utilisation dans un shell.

Il me faudrait une piste, où chercher. Ça permettrait aussi de créer des aliases, ce qui serait bien pratique !

Merci à tous.

Tombé là dessus:
bugs.launchpad.net/ubuntu/+sour … bug/753781

Lui il tente d’ajuster le $PATH dans le fichier .profile (et non .bashrc)

Souvent ce type de lanceur ne liste que les applications pour lesquelles un fichier .desktop existe sous une des arborescences suivantes :
[mono]/usr/share/applications[/mono]
[mono]/usr/local/share/applications[/mono]
[mono]~/.local/share/applications[/mono]

C’est le comportement que j’ai noté avec d’autres environnements de bureau, je ne peux rien confirmer dans le cas de MATE que je n’ai pas encore eu l’occasion de tester.


Après lecture du rapport de bug proposé par Zbf, il me semble bien que j’ai visé à côté du problème :wink:

[quote=“Zbf”]Tombé là dessus:
bugs.launchpad.net/ubuntu/+sour … bug/753781

Lui il tente d’ajuster le $PATH dans le fichier .profile (et non .bashrc)[/quote]
Pour le coup, le fichier [mono].profile[/mono] ne se lance pas à chaque exécution de shell, mais seulement pour les shells de login. Tandis que le fichier [mono].bashrc[/mono] se lance à chaque exécution de shell (en fonction de l’utilisateur évidemment).

[quote=“vv222”]Souvent ce type de lanceur ne liste que les applications pour lesquelles un fichier .desktop existe sous une des arborescences suivantes :
[mono]/usr/share/applications[/mono]
[mono]/usr/local/share/applications[/mono]
[mono]~/.local/share/applications[/mono]

C’est le comportement que j’ai noté avec d’autres environnements de bureau, je ne peux rien confirmer dans le cas de MATE que je n’ai pas encore eu l’occasion de tester.


Après lecture du rapport de bug proposé par Zbf, il me semble bien que j’ai visé à côté du problème :wink:[/quote]
Non non, je pense que tu as visé juste !
Si on s’en fie à se lien http://git.mate-desktop.org/mate-panel/tree/mate-panel/panel-run-dialog.c?id=24ac184b8026e9628f8589938399c703101b6276, on peut voir à la ligne 323 que la recherche dans le path utilise la fonction g_find_program_in_path(). Ça doit être elle qui décide où chercher, et qui visiblement ignore ma variable [mono]PATH[/mono].

Je glâne quelques infos sur cette fonction, et je mets à jour le post.

Merci à vous deux.

Le code source de la fonction g_find_program_in_path() est visible ici : https://git.gnome.org/browse/glib/tree/glib/gutils.c (ligne 306)
D’après ce que je lis, c’est la fonction g_getenv() qui nous intéresse en fait, disponible dans le fichier [mono]genviron.c[/mono] : https://git.gnome.org/browse/glib/tree/glib/genviron.c (lignes 221 à 245)
Et finalement, g_getenv() appelle getenv() disponible dans [mono]stdlib.h[/mono].

[code]#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[], char *envp[]) {
char *p=getenv(“PATH”);
if § {
printf("%s\n",p);
}
else printf(“La variable PATH n’est pas définie !\n”);
return EXIT_SUCCESS;
}
[/code]
Ce code m’affiche ma variable PATH, comme définie dans mon fichier [mono].bashrc[/mono].

Donc je ne comprends plus rien…

On peut lire ceci dans le code de la fonction g_find_program_in_path() :

[code]path = g_getenv (“PATH”);

if (path == NULL)
{
path = “/bin:/usr/bin:.”;
}[/code]

Autrement dit, si g_getenv() échoue, la recherche de l’exécutable se fera dans les dossiers [mono]/bin[/mono], [mono]/usr/bin[/mono] et [mono].[/mono].
Si je lance la fenêtre run-dialog, je peux trouver aircrack-ng qui est seulement présent dans [mono]/usr/local/bin[/mono], donc ça me certifie que g_getenv(), et a fortiori getenv(), ont bien complété la variable [mono]path[/mono].

C’est bien la faute au PATH. Il faut que je trouve un moyen pour que la variable soit initialisée comme je l’entends pour un shell non-interactif (un script).

Je lis, je lis, et je lis encore des tas de solutions. Modidier [mono].bashrc[/mono], [mono].profile[/mono], [mono].bash_profile[/mono]… Mais pour le moment je n’ai pas de solution. Ça devrait venir, et je tiendrai le post à jour.

Ajouter ton dossier personnel dans ton PATH.

Modifier les noms des executables pour qu’il ne soit pas même avec ceux dans /usr/…

Teste.

(Essaye aussi en plus: export PATH
Ça fait du bon boulot.)

Oui oui, tout ça s’est déjà fait. Le hic étant que pour un shell non-interactif, si [mono]PATH[/mono] n’est pas défini alors sa valeur est héritée du processus père (j’espère ne pas dire de bêtise).

Dès que je rentre chez moi je teste autre chose : la fenêtre run-dialog est ouverte sans qu’un nouveau processus soit créé, donc c’est [mono]mate-panel[/mono] qui possède le [mono]PATH[/mono], qui doit lui même découler de son père. De mémoire c’est [mono]init[/mono], mais ça aussi il faudrait que je le vérifie. Si c’est bien le cas, il faudrait configurer le fichier [mono]/root/.bashrc[/mono], et adpater [mono]PATH[/mono] comme je l’entends (au moins pour les shells non-interactifs).

J’espère apporter une bonne réponse dans (environ) 1h !

Ok je pense avoir la solution, sans l’avoir appliquée pour autant. Un peu de lecture ici : https://wiki.debian.org/EnvironmentVariables#Using_graphical_UI
Donc tout dépend de votre gestionnaire de session, et de son/ses fichier/s de configuration. L’exemple fait référence à gdm, qui regarde le fichier [mono]/etc/gdm/Xsession[/mono]. Il faut configurer ce dernier, ce à quoi je m’essaie.

Ok, dernier flood et solution !

Pour gdm et lightdm (peut-être d’autres) :
Le fichier de configuration indique d’utiliser le fichier [mono]/etc/X11/Xsession[/mono] (qui lui même peut faire référence à d’autres fichiers dans [mono]/etc/X11/Xsession.d/[/mono]).
Une configuration pour chaque utilisateur est possible, notamment en créant/modifiant le fichier [mono]$HOME/.xsessionrc[/mono]. Une manière propre de procéder est de rentrer ceci dans son [mono]$HOME/.xsessionrc[/mono] : . $HOME/.profile
Ensuite on édite son fichier [mono]$HOME/.profile[/mono] comme ceci : if [ x$_PROFILE_SET != x_PROFILE_SET ]; then export _PROFILE_SET=_PROFILE_SET export PATH="$PATH:$HOME/bin" fi
Et voilà !

On peut faire afficher le PATH de chaque processus avec la commande strings /proc/`pidof nomduproc`/environ | grep PATH

Donc vos programmes personnels sont accessibles :]