Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/04/2012, à 19:08

Christophe C

[résolu] gksudo dans un script

si je fais un

sudo ln -s /home/chris/Documents/Scripts/lxde-wallpaper.desktop /usr/share/applications/lxde-wallpaper.desktop

dans un terminal, ça marche.

Si je fais

gksudo ln -s /home/chris/Documents/Scripts/lxde-wallpaper.desktop /usr/share/applications/lxde-wallpaper.desktop

dans un script (pour renseigner le mot de passe), le mot de passe est bien demandé, mais ln ne s'exécute pas derrière. Et comme c'est une opération sur un répertoire système, j'ai évidement besoin d'être en mode sudo pour créer le fichier .desktop

Je souhaite que le script ne se déroule pas dans un terminal, bien sur, sinon pas de problème.

Dernière modification par Christophe C (Le 24/04/2012, à 10:19)


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

Hors ligne

#2 Le 20/04/2012, à 19:18

Hizoka

Re : [résolu] gksudo dans un script

ca pose soucis si tout le script est lancé en sudo ?

car tu peux faire une verif en debut du script pour verifier si tu es en root ou user, si tu es en user, on lance gksudo script...

Sinon, ca passerait mieux avec un

gksudo bash -c 'ln -s /home/chris/Documents/Scripts/lxde-wallpaper.desktop /usr/share/applications/lxde-wallpaper.desktop'

peut etre.


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#3 Le 20/04/2012, à 21:46

Christophe C

Re : [résolu] gksudo dans un script

Merci.

gksudo bash -c 'ln -s /home/chris/Documents/Scripts/lxde-wallpaper.desktop /usr/share/applications/lxde-wallpaper.desktop'

ne marche pas.

Lancer le script en gksudo marche, bien sur, mais cela ne m'arrange pas. La solution ci-dessus me conviendrait mieux, si c'était ossible de la rendre fonctionnelle.


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

Hors ligne

#4 Le 20/04/2012, à 22:04

pingouinux

Re : [résolu] gksudo dans un script

Ne serait-ce pas parce que le lien existe déjà ? Il faudrait essayer avec ln -sf ....
Je viens d'essayer en mettant sudo blkid ou gksudo blkid dans un script, et ça marche.

Hors ligne

#5 Le 20/04/2012, à 22:08

metalux

Re : [résolu] gksudo dans un script

Bonjour Christophe C,
J'ai été confronté au même questionnement dernièrement pour un script  (d'ailleurs le script peut t'intéresser, nous avions eu une discussion à ce sujet il y a quelque temps) et je suis passé par zenity --password. Celà te conviendrait-il?

zenity --password | sudo -S -s
sudo ln -s /home/chris/Documents/Scripts/lxde-wallpaper.desktop /usr/share/applications/lxde-wallpaper.desktop

EDIT: demande confirmation, j'ai le doute qu'on reste en sudo (voir remarque d'Hizoka).

Dernière modification par metalux (Le 21/04/2012, à 00:14)

Hors ligne

#6 Le 20/04/2012, à 22:41

Hizoka

Re : [résolu] gksudo dans un script

metalux => c'est quoi ces options ? -S et -s ?
et une fois le mot de passe rentré, tu restes en sudo ?


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#7 Le 20/04/2012, à 23:27

metalux

Re : [résolu] gksudo dans un script

Bonsoir Hizoka,
Bon je ne suis pas sûr à 100% (je débute et tu le sais bien wink ) mais si j'ai bien lu le man (bien traduit peut-être pas)  l'option -S  sert à lire le mot de passe à partir de l'entrée standard (donc donné par zenity --password) et -s le transmet à la commande suivante.

Hizoka a écrit :

et une fois le mot de passe rentré, tu restes en sudo ?

Je précède par sudo -K avant ces commandes. Désolé, j'avais fais des essais et ça fonctionnait correctement mais là je viens de réessayer et le mot de passe n'est pas requis pour les sudo suivant hmm , comprends pas sad . Comment savoir si je reste sudo?

Dernière modification par metalux (Le 20/04/2012, à 23:41)

Hors ligne

#8 Le 20/04/2012, à 23:52

metalux

Re : [résolu] gksudo dans un script

Je viens d'essayer le script suivant:

#!/bin/bash
sudo -K
zenity --password | sudo -S -s
sudo touch /a
touch /b
touch /c

Seul le fichier a est crée, je ne reste donc pas sudo, sinon b et c serait crée,n'est-ce pas? Excuses moi Christophe C de polluer ton post, je pensais avoir la réponse et maintenant je doute, à revoir à tête reposée.
Edit: Je n'ai pas pris le temps de reposer ma tête et voici les résultats de mes essais:

#!/bin/bash
zenity --password | sudo -S -s
sudo touch /a
sudo -k
sudo touch /b
sudo touch /c

Le fichier a se crée mais pas b et c. sudo -k annule le temps accordé à sudo et le mot de passe est à nouveau requis au sudo suivant. La commande que je t'ai donné doit donc être fonctionnelle. Attends que Hizoka confirme mes essais, la fatigue me faisant peut-être dire des erreurs.

Dernière modification par metalux (Le 21/04/2012, à 00:10)

Hors ligne

#9 Le 21/04/2012, à 00:25

Hizoka

Re : [résolu] gksudo dans un script

en effet il faut le -k apres pour arreter.


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#10 Le 21/04/2012, à 10:45

Christophe C

Re : [résolu] gksudo dans un script

Bonjour, et merci à tous les 2 pour votre aide. Malheureusement, cela ne marche pas. Voici mon script de test :

#!/bin/bash

zenity --password | sudo -S -s
sudo ln -s /home/chris/Documents/Scripts/lxde-wallpaper/lxde-wallpaper.desktop /usr/share/applications/lxde-wallpaper.desktop

Le fichier destination n'existe pas,
si je copie la ligne sudo ln -s ... dans un terminal, ça marche. Donc je valide bien son écriture
le script me demande bien mon mot de passe (via la ligne zenity)

Mais si chaque ligne fonctionne, l'ajout des 2 ne donne rien. Apparemment le mot de passe n'est pas transféré à ln.

D'ailleurs si je fais un

#!/bin/bash

zenity --password | sudo -S -s
ln -s /home/chris/Documents/Scripts/lxde-wallpaper/lxde-wallpaper.desktop /home/chris/lxde-wallpaper.desktop

ça marche. Le zenity ne sert alors à rien (pas répertoire système), mais cela me permet de tester que le script n'a pas un autre problème. Et dès que le mot de passe demandé n'a pas à être transféré, il n'y a plus de problème.

D'ailleurs, si je met un sudo sur mon script N°2 (ce qui ne sert à rien, mais permet de tester le transfert de mot de passe), cela ne marche plus :

#!/bin/bash

zenity --password | sudo -S -s
sudo ln -s /home/chris/Documents/Scripts/lxde-wallpaper/lxde-wallpaper.desktop /home/chris/lxde-wallpaper.desktop

A tout hasard, j'ai refais ces tests avec cp, cela ne marche pas mieux.

Maintenant, une précision, je suis sous lubuntu 12.04. On ne peut exclure un bug, même si j'ai du mal à y croire (zenity, c'est indépendant de la version d'ubuntu, je pense).

Dernière modification par Christophe C (Le 21/04/2012, à 11:09)


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

Hors ligne

#11 Le 21/04/2012, à 12:16

Postmortem

Re : [résolu] gksudo dans un script

Salut,
Je viens d'essayer comme ceci et ça fonctionne :

#!/bin/bash
sudo -k
sudo -S -s <<< "$(zenity --password)"
sudo touch /a
sudo touch /c
sudo -k

Je ne sais pas si ton souci vient de là mais, j'ai rajouté un sudo -k dès le début. Sinon, admettons qu'on ait fait un sudo juste avant de lancer le script, la commande sudo -S -s <<< "$(zenity --password)" n'attendrait pas de mot de passe et donc, sudo essaierait d'exécuter une commande qui correspondrait au mot de passe rentré dans la boite zenity.
Enfin, c'est ce que j'ai cru comprendre qu'il se passait !


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#12 Le 21/04/2012, à 13:35

Christophe C

Re : [résolu] gksudo dans un script

Non, le script suivant ne marche pas (mais il me demande bien mon mot de passe) :

#!/bin/bash
sudo -k
sudo -S -s <<< "$(zenity --password)"
sudo ln -s /home/chris/Documents/Scripts/lxde-wallpaper/lxde-wallpaper.desktop /usr/share/applications/lxde-wallpaper.desktop

En enlevant sudo -k : aucune différence.

Par contre, si je copie la dernière ligne dans un terminal, aucun problème. Ca me rend fou, ce truc.

Dernière modification par Christophe C (Le 21/04/2012, à 13:38)


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

Hors ligne

#13 Le 21/04/2012, à 13:56

Postmortem

Re : [résolu] gksudo dans un script

Petite précision (corrigez moi si je dis des conneries !)

metalux a écrit :

Bon je ne suis pas sûr à 100% (je débute et tu le sais bien wink ) mais si j'ai bien lu le man (bien traduit peut-être pas)  l'option -S  sert à lire le mot de passe à partir de l'entrée standard (donc donné par zenity --password) et -s le transmet à la commande suivante.

Ce n'est pas tout à fait ça.
Pour le -S, ça permet bien de lire depuis l'entrée standard.
Par contre, pour le -s, ça permet, en quelque sorte, d'ouvrir une session root. Et dans cette session, les commandes n'ont donc plus besoin d'être précédées par sudo.
Exemple, directement dans un terminal :

toto@mon-pc:~$ touch /a /b
touch: impossible de faire un touch «/a»: Permission non accordée
touch: impossible de faire un touch «/b»: Permission non accordée
toto@mon-pc:~$
toto@mon-pc:~$ sudo -s
[sudo] password for toto: 
root@mon-pc:~#
root@mon-pc:~# touch /a /b
root@mon-pc:~#
root@mon-pc:~# ls -l /a /b
-rw-r--r-- 1 root root 0 2012-04-21 13:36 /a
-rw-r--r-- 1 root root 0 2012-04-21 13:36 /b
root@mon-pc:~#

Dans le script, les commandes tapées suite à sudo -S -s, ne sont pas exécutée dans la session root ainsi ouverte, c'est pourquoi elles ont encore besoin de sudo. Elles sont exécutées dans la "session du script".
Ce sudo -S -s permet juste de faire rentrer le mot de passe une première fois, et donc, les prochaines commandes sudo n'en ont pas besoin durant un certain temps. On pourrait aussi bien mettre un truc du genre sudo -S echo toto (en fait, le -s permet d'éviter de mettre une commande)
Il faut savoir que ce laps de temps durant lequel on a plus besoin de retaper le mot de passe peut être mis à 0, et donc, le mot de passe sera demandé à chaque commande utilisant sudo.

Du coup, je sais pas si cette façon de faire est très propre. En effet, si une commande dure un certain temps, la commande suivante avec sudo redemandera le mot de passe.

Edit :
J'avais pas vu ton dernier message Christophe C !
Peux tu nous donner les messages d'erreur qui s'affichent ?
Rajoute set -vx juste en-dessous de #!/bin/bash avant d'exécuter, ça sera plus verbeux !

Dernière modification par Postmortem (Le 21/04/2012, à 13:59)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#14 Le 21/04/2012, à 17:50

Christophe C

Re : [résolu] gksudo dans un script

Bon, on progresse (ou pas!!).

J'ai un multiboot avec pas mal de versions d'ubuntu. Le script marche nickel dans ma 10.10. Il me marche pas dans ma xubuntu 11.10, ni dans ma lubuntu 12.04.

Un pb de version de zenity, peut-être ? ou du bash ?

Sinon, concernant le mode verbose, il faudrait renvoyer cela vers un fichier texte, parce que quand je lance dans un terminal, le script fonctionne (dans xfce 11.10, en tout cas). Donc ça ne mène à rien.
Tu sais comment envoyer les messages dans un fichier toto.txt, sans passer par le terminal ?

edit : vu que ça marche dans un terminal, je peut éventuellement ajouter une ligne xterm -e "echo | sudo ln -s /home/chris/lxde-wallpaper/lxde-wallpaper.desktop /usr/share/applications/lxde-wallpaper.desktop", mais c'est crade. Quand je laisse le zenity au-dessus, il me demande le mot de passe pour zenity, et comme il ne passe manifestement rien derrière, il me le redemande pour le xterm -e "echo | sudo ln -s /home/.... La ligne zenity peut-être supprimée.

En fait, tout se passe comme si, à compter de la 11.10, ce foutu zenity password ne marchait plus. Il y a une autre façon, de traiter le mot de passe ? (à part le passage par le terminal, qui casse l'interface globale de mon petit soft).

Dernière modification par Christophe C (Le 21/04/2012, à 18:01)


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

Hors ligne

#15 Le 21/04/2012, à 18:29

metalux

Re : [résolu] gksudo dans un script

En fait, tout se passe comme si, à compter de la 11.10, ce foutu zenity password ne marchait plus.

Et zenity avec l'option --entry, est-ce que ça change quelque chose? J'en doute mais bon rien ne vaut un test pour écarter un problème de l'option password.

Hors ligne

#16 Le 21/04/2012, à 18:45

Christophe C

Re : [résolu] gksudo dans un script

Marche pas.

Plus je creuse, plus c'est la fête du slip :

#!/bin/bash
xterm -e "echo | gksudo ln -s /home/chris/Documents/Scripts/lxde-wallpaper/lxde-wallpaper.desktop /usr/share/applications/lxde-wallpaper.desktop"

marche dans la 10.10, xfce 11.10 mais pas lubuntu 12.04

#!/bin/bash
gksudo ln -s /home/chris/Documents/Scripts/lxde-wallpaper/lxde-wallpaper.desktop /usr/share/applications/lxde-wallpaper.desktop

marche dans la 10.10, xfce 11.10 mais pas lubuntu 12.04

#!/bin/bash
xterm -e "echo | sudo ln -s /home/chris/Documents/Scripts/lxde-wallpaper/lxde-wallpaper.desktop /usr/share/applications/lxde-wallpaper.desktop"

marche partout, mais c'est crade.

Ca me semble délirant !!


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

Hors ligne

#17 Le 21/04/2012, à 19:17

Christophe C

Re : [résolu] gksudo dans un script

Bon, je pense avoir compris. j'ai un disque dur "data" commun à mes différents systèmes ubuntu (multiboot).

Mon répertoires avec un mon script de test est physiquement sur une autre partition (montée). Il est bien considéré comme présent sur la partition de travail, mais c'est via un lien symbolique vers la partition "data".
Je travail formellement en local, mais le script fait en fait des accès à une autre partition. Ca n'a jamais posé de problème jusqu'à présent. Grace au lien symbolique vers le répertoire, c'est supposé être transparent.

Ici, si je rapatrie en dur mon script de test, gksudo ln -s ... marche. Sinon, il ne marche pas.

Problème résolu, mais je vais voir s'il n'y a pas lieu d'ouvrir un bug sur launchpad.

Dernière modification par Christophe C (Le 21/04/2012, à 19:25)


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

Hors ligne

#18 Le 21/04/2012, à 19:26

Postmortem

Re : [résolu] gksudo dans un script

Un petite question, pourquoi celà ne t'arrange pas de lancer tout le script avec gksudo ? Parce que c'est ça qui complique tout... Puis comme je te disais, en faisant plusieurs sudo ou gksudo à l'intérieur du script, selon le temps d'exécution des commandes, ça redemandera le mot de passe... Que tu pourras pas redonner!
Puis admettons que le temps ou le mot de passe n'est plus demandé par sudo soit, dans une prochaine version, mis par défaut à 0, ben ton script ne fonctionnera plus.


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#19 Le 21/04/2012, à 23:35

Christophe C

Re : [résolu] gksudo dans un script

Ca ne m'arrange pas parce que je fais un zenity --file-selection --directory, et en root, ça fout la grouille. Il va alors taper par défaut dans les fichiers systèmes, au lieux du répertoire utilisateur.

Ca peut peut-être se contourner, comme problème, mais j'ai essayé de le traiter autrement. Et puis cette histoire de gksudo me rendait fou. J'essayais de comprendre.

Dernière modification par Christophe C (Le 22/04/2012, à 09:55)


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

Hors ligne

#20 Le 22/04/2012, à 09:29

serged

Re : [résolu] gksudo dans un script

Un rapport avec ce problème : http://forum.ubuntu-fr.org/viewtopic.php?id=885711 ?

En gros un :

gksudo gedit fichier

M'ouvre gedit avec non seulement le fichier, mais aussi un fichier vide "Document sans nom 1", mais pas "sudo gedit fichier"


LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne

#21 Le 22/04/2012, à 12:43

metalux

Re : [résolu] gksudo dans un script

@Postmortem

On pourrait aussi bien mettre un truc du genre sudo -S echo toto

merci pour toutes ces précisions, cependant j' ai un peu de mal à comprendre n'ayant pas réussi à mettre une commande en place directement après le -S, j'ai posté il y a peu à ce sujet, si tu pouvais y jeter un œil S.T.P.

Hors ligne

#22 Le 28/04/2012, à 11:58

Postmortem

Re : [résolu] gksudo dans un script

@metalux

toto@mon-pc:~$ ls -l /a
ls: impossible d'accéder à /a: Aucun fichier ou dossier de ce type
toto@mon-pc:~$ 
toto@mon-pc:~$ touch /a
touch: impossible de faire un touch «/a»: Permission non accordée
toto@mon-pc:~$ 
toto@mon-pc:~$ zenity --password | sudo -S touch /a
[sudo] password for toto: toto@mon-pc:~$ 
toto@mon-pc:~$ ls -l /a
-rw-r--r-- 1 root root 0 2012-04-28 11:54 /a
toto@mon-pc:~$

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne