Existe-t-il une différence entre le comportement de gksu foo
et gksudo foo
?
Peuvent-ils être utilisés de manière interchangeable?
Les deux fichiers pointent au même endroit:
$ ls -l /usr/bin/gksudo
lrwxrwxrwx 1 root root 4 2010-09-27 18:23 /usr/bin/gksudo -> gksu
... gksudo
est lié symboliquement à gksu
. Mais cela ne signifie pas qu'ils fassent les mêmes choses, loin de là.
Les applications peuvent détecter la commande utilisée pour l'exécuter. Il s'agit généralement de argv[0]
dans les langages de style C ou de $0
dans les scripts de shell de type Bourne. L'application peut regarder cela et dans ce cas, en fait, cela change son fonctionnement. La première indication en est dans la page man gksu
:
gksu is a frontend to su and gksudo is a frontend to sudo.
Si vous recherchez apt-get source gksu
dans la source ( run_mode
), vous verrez comment il détecte ceci:
{ /* support gksu_sudo_run */
gchar *myname = g_path_get_basename (argv[0]);
if (!strcmp(myname, "gksudo"))
run_mode = SUDO_MODE;
g_free (myname);
}
Vous pouvez remplacer cela par les arguments --su-mode
/ -w
et --sudo-mode
/ -S
(vous pouvez donc exécuter des commandes équivalentes sans avoir besoin du lien symbolique gksudo
... Mais c'est à vous de voir.
Si vous voulez savoir en quoi ces "modes" diffèrent vraiment, échappez-vous un peu à gksu
. Vous devez le suivre dans libgksu
. C’est la bibliothèque qui vérifie les autorisations avant de passer au système.
Si aucun mode n'est spécifié (par exemple, vous appelez gksu
sans arguments) au moment où il atteint libgksu
, il vérifie Gconf (comme le souligne Stefano) et s’il ne peut toujours pas décider, le mode su
sera sélectionné par défaut.
Dans Ubuntu (!), il n'y a pas de différence.
gksu
devrait normalement se connecter à l'utilisateur racine et exécuter une application sur cette session. Cependant, sous Ubuntu, le mode "sudo" est utilisé par défaut, ce qui équivaut à exécuter gksudo
. En effet, sur ubuntu, vous ne pouvez pas vous connecter en tant que root par défaut.
gksudo
est l'équivalent graphique de sudo
(et comme le souligne Oli, il ne s'agit que d'un lien symbolique vers gksu)
À partir de l'entrée gconf de gksu:
Enoutre,surladifférenceentresudoetgksudo:
Youshouldneverusenormalsudotostartgraphicalapplicationsasroot.Youshouldusegksudo(kdesudoonKubuntu)torunsuchprograms.gksudosetsHOME=~root,andcopies.Xauthoritytoatmpdirectory.Thispreventsfilesinyourhomedirectorybecomingownedbyroot.(AFAICT,thisisallthat'sspecialabouttheenvironmentofthestartedprocesswithgksudovs.sudo).
—(fromthecommunity documentation via Chris Wilson)
Je sais que c'est un ancien fil de discussion, mais j'ai été a été invité à vous informer d'une différence subtile mais essentielle entre gksu
et gksudo
.
Bien que je me sois longuement penché sur la question, je ne trouve nulle part une différence documentée, qui existe pourtant. Je n'ai pas non plus découvert pourquoi il y a une différence. J'ai trouvé cela à la dure lorsque j'ai accidentellement supprimé certains fichiers système précisément à cause de cette différence (discuté dans un fil de discussion des forums Ubuntu ) - J'utilisais gksu
, mais depuis lors, je me suis assuré de toujours utiliser gksudo
.
Pour résumer, essayez ceci.
touch abc
touch abc.tmp
touch abctmp
Exécutez les six commandes suivantes. Les cinq premiers donnent le même résultat (attendu) (c'est-à-dire que abc.tmp
), tandis que le sixième inclut un fichier supplémentaire ( abctmp
) qu'il ne devrait pas obtenir.
find . -regextype posix-egrep -regex '.*\.tmp' -print
sudo find . -regextype posix-egrep -regex '.*\.tmp' -print
gksudo -- find . -regextype posix-egrep -regex '.*\.tmp' -print
gksudo --su-mode -- find . -regextype posix-egrep -regex '.*\.tmp' -print
gksu --sudo-mode -- find . -regextype posix-egrep -regex '.*\.tmp' -print
gksu -- find . -regextype posix-egrep -regex '.*\.tmp' -print
Imaginez les problèmes lorsque vous remplacez -print
par -delete
dans la commande find
(c'est exactement ce qui m'est arrivé, ce qui a entraîné la suppression de certains fichiers système).
Alors, veuillez utiliser gksudo
au lieu de gksu
.