IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> AppleScript + action de dosssier, pour changer les permissions
Options
NABLABLA
posté 25 Jun 2010, 16:39
Message #1


Macbidouilleur de vermeil !
****

Groupe : Membres
Messages : 1 078
Inscrit : 18 Oct 2005
Lieu : 35-Bretagne
Membre no 48 141



Bon, après pas mal de recherches et d'essais, j'ose tenter la question :

J'ai un dossier sur mon bureau que j'ai partagé et qui sert à ce que "mon petit groupe" (3 ou 4 Macs) me passe tout un tas de fichiers et dossiers pour validation.

Chaque fois que quelqu'un y place quelque chose, j'ai seulement un droit en lecture seule, et ça me "bassine" de faire un Pomme+"i" et de changer les autorisations à chaue fois.

Donc j'aimerais une petite action de dossier qui, chaque fois que quelques chose est placé dans ce dossier, en change les permissions (fichiers, dossiers et sous-dossiers) pour que j'ai les droits en lecture ET en écriture ...

Mais rien de ce que j'essaie ne fonctionne ... et j'en ai essayé !

Un p'tit coup de main ? Merci !
Go to the top of the page
 
+Quote Post
Guest_EricaL**_*
posté 26 Jun 2010, 01:26
Message #2





Guests






Bonjour,

Un launchAgent est mieux qu'une action de dossier.

Voici comment faire :
Copie et colle ce texte dans TextEdit.
Code
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>Permissions</string>
        <key>ProgramArguments</key>
        <array>
                <string>/bin/chmod</string>
                <string>-R</string>
                <string>u=rw+X</string>
                <string>/Users/toi/Desktop/dossier sans titre 3</string>
        </array>
    <key>RunAtLoad</key>
    <true/>
        <key>WatchPaths</key>
        <array>
        <string>/Users/toi/Desktop/dossier sans titre 3</string>
        </array>
    <key>onDemand</key>
    <true/>
</dict>
</plist>
Modifie le chemin du dossier au deux endroits, glisse et dépose le dossier dans la fenêtre pour avoir le chemin exact (pas les noms localisés).
Enregistre-le dans le format "unicode texte (utf-8)", avec l'extension ".plist" le nom (n'importe lequel), dans le dossier "Bibliothèque/LaunchAgents/" de ta maison.


Après copie et colle ce code dans l'application "Terminal" pour lancer l'agent :
Code
launchctl load ~/Library/LaunchAgents/
Presse la touche Entrée

Après, il sera automatiquement lancé à l'ouverture de ta session.

Ce message a été modifié par EricaL** - 26 Jun 2010, 01:31.
Go to the top of the page
 
+Quote Post
NABLABLA
posté 26 Jun 2010, 09:39
Message #3


Macbidouilleur de vermeil !
****

Groupe : Membres
Messages : 1 078
Inscrit : 18 Oct 2005
Lieu : 35-Bretagne
Membre no 48 141



Wahou !! un grand merci, je test ça ce WE ...
Go to the top of the page
 
+Quote Post
NABLABLA
posté 28 Jun 2010, 09:30
Message #4


Macbidouilleur de vermeil !
****

Groupe : Membres
Messages : 1 078
Inscrit : 18 Oct 2005
Lieu : 35-Bretagne
Membre no 48 141



Ben ... ça marche pas !

Tous les fichiers/dossiers glissés dans le dossier sur mon bureau, prennent les permissions :

nobody = rw
(inconnu) = r
everyone = r

et c'est tout ... donc impossible pour (moi) d'écraser les fichiers !
Go to the top of the page
 
+Quote Post
Guest_EricaL**_*
posté 28 Jun 2010, 19:47
Message #5





Guests






La commande modifie la lecture et écriture du propriétaire (nobody) des fichiers, ça n'ajoute pas un utilisateur.

Essaie avec ce paramètre "lecture et écriture" pour tout le monde.
Code
ugo=rw+X
à la place de u=rw+X

Après pour que l'agent soit mis à jour :
- Dans le terminal

Code
launchctl unload ~/Library/LaunchAgents/
Presse la touche Entrée

Code
launchctl load ~/Library/LaunchAgents/
Presse la touche Entrée
Go to the top of the page
 
+Quote Post
NABLABLA
posté 29 Jun 2010, 09:44
Message #6


Macbidouilleur de vermeil !
****

Groupe : Membres
Messages : 1 078
Inscrit : 18 Oct 2005
Lieu : 35-Bretagne
Membre no 48 141



Super ! Merci !

Cette fois ça fonctionne "pile poil". Je peux modifier sans les déplacer les fichiers qu'on me transmets ... juste ce que je souhaitais

Go to the top of the page
 
+Quote Post
Salva
posté 15 Oct 2010, 17:19
Message #7


Adepte de Macbidouille
*

Groupe : Membres
Messages : 101
Inscrit : 3 Nov 2003
Lieu : LYON
Membre no 11 261



Alors, là... Un grand grand merci !!! biggrin.gif

Je cherchais une solution a un problème très similaire. Je vais tester la semaine prochaine... enfin dès que j'aurais un peu de temps. Juste une petite question complémentaire : si je veux faire cela sur plusieurs dossiers, est-ce qu'il suffit de faire autant de fichiers plist que de dossiers à traiter ?

Allez, deux petites dernières : est-ce que cela fonctionne sur des dossiers et des sous-dossiers inclus (a priori, je dirai que oui) ? est-ce que les modifications de permissions sont instantanées (je ne connais pas le principe des Launch Agent) ?

Et encore une fois, merci... J'avais bien eu l'idée de cette solution, mais j'étais incapable de la mettre en oeuvre... wink.gif


--------------------
Mac Pro 3,1 (bientôt un 5,1) - MacBook Pro Retina 2014 - iPhone 7
Go to the top of the page
 
+Quote Post
Guest_EricaL**_*
posté 15 Oct 2010, 17:33
Message #8





Guests






Bonjour,

Citation (Salva @ 15 Oct 2010, 12:19) *
si je veux faire cela sur plusieurs dossiers, est-ce qu'il suffit de faire autant de fichiers plist que de dossiers à traiter ?
Oui

Citation (Salva @ 15 Oct 2010, 12:19) *
Allez, deux petites dernières : est-ce que cela fonctionne sur des dossiers et des sous-dossiers inclus (a priori, je dirai que oui) ?
Oui, il modifie les permissions de tous les éléments.
Non, si on ajoute un fichier dans un sous-dossier, c'est à dire que le script s'exécute lors d'un ajout ou modification dans le dossier maître, pas dans un sous-dossier

Citation (Salva @ 15 Oct 2010, 12:19) *
est-ce que les modifications de permissions sont instantanées ?
Oui

Ce message a été modifié par EricaL** - 15 Oct 2010, 17:34.
Go to the top of the page
 
+Quote Post
Salva
posté 15 Oct 2010, 17:50
Message #9


Adepte de Macbidouille
*

Groupe : Membres
Messages : 101
Inscrit : 3 Nov 2003
Lieu : LYON
Membre no 11 261



Merci pour tes réponses rapides.

Comme déjà dit, je testerai dès que possible... Mais cela me semble bien correspondre à ma problématique.


--------------------
Mac Pro 3,1 (bientôt un 5,1) - MacBook Pro Retina 2014 - iPhone 7
Go to the top of the page
 
+Quote Post
Salva
posté 29 Nov 2010, 16:14
Message #10


Adepte de Macbidouille
*

Groupe : Membres
Messages : 101
Inscrit : 3 Nov 2003
Lieu : LYON
Membre no 11 261



Bon, me revoilà, plus d'un mois après. J'ai enfin pris le temps de tester... wink.gif

Malheureusement, cela ne fonctionne pas. Lorsque je lance l'agent dans le terminal, il me donne le message :

launchctl: no plist was returned for: /Users/Claude/Library/LaunchAgents//permission.public.claude.plist

Où aurais-je fait une erreur ?

Merci.


--------------------
Mac Pro 3,1 (bientôt un 5,1) - MacBook Pro Retina 2014 - iPhone 7
Go to the top of the page
 
+Quote Post
Guest_EricaL**_*
posté 29 Nov 2010, 18:54
Message #11





Guests






Citation (Salva @ 29 Nov 2010, 10:14) *
il me donne le message :

launchctl: no plist was returned for: /Users/Claude/Library/LaunchAgents//permission.public.claude.plist

C'est ton format qui n'est pas correct.
Meme si tu le converti ton fichier au format texte, il ne fonctionnera pas
Suppime ton fichier plist
Ouvre TextEdit
Il faut que ta fenêtre TextEdit soit vide
Sélectionne dans le menu "Fomat" --> "Convertir au format texte"

Colle le texte du plist
Après avoir copié le chemin de ton dossier dans le texte , enregistre-le au format "Unicode (UTF-8)"
Go to the top of the page
 
+Quote Post
faksprod
posté 18 Aug 2011, 14:45
Message #12


Nouveau Membre


Groupe : Membres
Messages : 6
Inscrit : 18 Aug 2011
Membre no 169 842



Bonjour,

Merci à EricaL** pour cette description, c'est très clair est vraiment efficace!
Cependant, serait-il possible de modifier les autorisations des fichiers placés/créés/déplacés dans un sous dossier du dossier maître?
Je cherche sur la toile depuis quelques temps et je ne trouve pas de réponse à ce problème. Comment donner un "écouteur" à un sous dossier pour qu'il puisse agir comme le dossier maître...?

Merci par avance et bonne continuation.
Go to the top of the page
 
+Quote Post
Guest_EricaL**_*
posté 18 Aug 2011, 16:13
Message #13





Guests






Bonjour,

Citation (faksprod @ 18 Aug 2011, 09:45) *
Cependant, serait-il possible de modifier les autorisations des fichiers placés/créés/déplacés dans un sous dossier du dossier maître?

Oui, vous pouvez ajouter des chemins de sous dossier après la clé "WatchPaths"

Exemple :
Code
<key>WatchPaths</key>
      <array>
      <string>/Users/toi/Desktop/dossierA</string>
      <string>/Users/toi/Desktop/dossierA/sousDossierA</string>
      <string>/Users/toi/Desktop/dossierA/sousDossierB/sous-sousDossierB</string>
      </array>
Go to the top of the page
 
+Quote Post
faksprod
posté 18 Aug 2011, 19:23
Message #14


Nouveau Membre


Groupe : Membres
Messages : 6
Inscrit : 18 Aug 2011
Membre no 169 842



Bonjour EricaL** et merci pour cette réponse!

J'avais compris que l'on pouvait en rajouter "à la main" mais je me demandais plutôt si il n'était pas possible que cet action soit faite automatiquement...
Je travaille avec 2 autres "mac users" et nous utilisons le dossier "Public" d'une des machines pour échanger nos fichiers. Le problème avec la solution que vous proposez (qui est pour le moment la meilleure que j'ai trouvée sur la toile) c'est qu'il faut faire passer les fichiers par une sorte de "sas de réorganisation des autorisations" (soit le dossier maître). C'est déjà plutôt pratique mais nous sommes amenés régulièrement à modifier ou à créer des dossiers/fichiers directement dans des sous dossiers du dossier maître (dossier "Public" de la machine principal)... et c'est là que ça pose problème car ces nouveaux dossiers/fichiers ne tiennent pas compte des réglages des dossiers parents.

Je me demandais donc si il était possible de créer un "écouteur de modification" sur chaque sous dossier et ce de manière automatique. Dès qu'un dossier/fichier est créé, il est automatiquement rajouter à la liste du fichier "launchAgent" et inversement si il est supprimé.

Pour le moment, nous utilisons votre méthode (launchAgent) sur le dossier principal (Public), et ceci nous fait déjà gagner du temps! Pour les dossiers/fichiers créés directement dans les sous dossier du dossier "Public" nous utilisons un petit appleScript qui applique les réglages d'autorisations d'accès à des groupes de fichiers. Ceci évite de faire "pomme+i>changer les autorisations>entrer son password>appliquer aux éléments inclus" toute la journée...

Si vous avez une meilleure solution, une idée, un conseil de quoi chercher, je suis preneur!

Merci par avance et bonne soirée.
Go to the top of the page
 
+Quote Post
Guest_EricaL**_*
posté 21 Aug 2011, 00:20
Message #15





Guests






Bonsoir,

Citation (faksprod @ 18 Aug 2011, 14:23) *
Je me demandais donc si il était possible de créer un "écouteur de modification" sur chaque sous dossier et ce de manière automatique. Dès qu'un dossier/fichier est créé, il est automatiquement rajouter à la liste du fichier "launchAgent" et inversement si il est supprimé.

Oui, c'est possible.

Ici, ça fonctionne bien, testé sur 150 à 200 sous dossiers, la réaction est instantanée lorsqu'un ou plusieurs fichiers ou dossiers sont déposés.
Je n'ai aucune idée de la réaction du système sur plus de 500 sous dossiers dans un fichier Plist

S'il faut modifier le fichier PLIST lors d'un ajout de dossier ou lors de la suppression d'un dossier, il y a un délai de six secondes (plus ou moins obligatoire pour ne pas avoir de problème avec launchD), mais ce n'est pas grave, car il corrige les permissions après la modification du fichier PLIST, donc aucun problème s'il y a d'autres ajouts pendant ces six secondes.

Edition :
J'avais oublié d'écrire que deux fichiers invisibles (".old_all_Folders.txt" ".all_Folders.txt") seront créées dans le dossier Utilisateur.
ils sont nécessaire pour la vérification des sous dossiers ajoutés ou supprimés, il est obligatoire que ces fichiers ne doivent pas être dans le dossier à surveiller, sinon l'exécutable se lancera plus souvent inutilement.


Voici la méthode qui fonctionne bien ici.
1- Il faut désactivé le fichier PLIST actuel qui modifie les permissions du dossier Public.
Copie/colle ce texte dans le Terminal
Code
launchctl unload
Presse la touche espace.
A partir du Finder, glisse et dépose le fichier PLIST (celui qui modifie les permissions) dans la fenêtre du Terminal .
Presse la touche Entrée


2- Ouvre le fichier PLIST (celui qui modifie les permissions) dans TextEdit.
Copie/colle ce texte dans la fenêtre de TextEdit :
Code
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <true/>
    <key>Label</key>
    <string>ChangePermissionsDossierPublic</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/xxxxxx/Documents/ShellScripts/modifyPermsPublic.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>WatchPaths</key>
    <array>
        <string>/Users/xxxxxx/Public</string>
    </array>
    <key>onDemand</key>
    <true/>
</dict>
</plist>
Remplace xxxxxx par le nom d'utilisateur aux deux endroits
Enregistre et ferme-le.
Renomme le fichier "permsDossierPublic.plist"


3- Duplique le fichier "permsDossierPublic.plist"
Ouvre le fichier dupliqué dans TextEdit
Copie/colle ce texte dans la fenêtre de TextEdit :
Code
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <true/>
    <key>Label</key>
    <string>WatchPlistPermissionsDossierPublic</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/xxxxxx/Documents/ShellScripts/modifyPermsPlist.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>WatchPaths</key>
    <array>
        <string>/Users/xxxxxx/Library/LaunchAgents/permsDossierPublic.plist</string>
    </array>
    <key>onDemand</key>
    <true/>
</dict>
</plist>
Remplace xxxxxx par le nom d'utilisateur aux deux endroits
Enregistre et ferme-le.
Renomme le fichier "watchPermsDossierPublic.plist"


4- Ouvre l'application TextWrangler (c'est gratuit si vous ne l'avez pas), je le préfère à TextEdit, car je me méfie des fins de lignes lors d'un copier à partir d'un navigateur, ils sont important dans un script shell.
Copie/colle ce texte dans la fenêtre de TextWrangler :
Code
#!/bin/bash

masterFolder="/Users/xxxxxx/Public" ## ici c'est le chemin du dossier a surveiller
sleep 1
/bin/chmod -R ugo=rw+X "$masterFolder"
/usr/bin/find "$masterFolder" -type d \! -path "*.app/*" \! -name "*.app" -print > ~/.all_Folders.txt;
/usr/bin/touch ~/.old_all_Folders.txt
var1=$(/usr/bin/diff -a --changed-group-format="%>%<" --unchanged-line-format="" ~/.old_all_Folders.txt ~/.all_Folders.txt);
if [ -n "$var1" ]; then ## nouveaux dossiers ou dossiers supprimés
   /bin/launchctl unload -w ~/Library/LaunchAgents/permsDossierPublic.plist
fi
Enregistre-le, le nom sera "modifyPermsPublic.sh", sélectionne "Unix (LF)" dans le popup Lines Break, sélectionne "Unicode (UTF-8)" dans le popup Encoding, son emplacement sera le dossier "ShellScripts" dans votre dossier "Documents"
Ferme le document.


4.1- Nouveau document
Copie/colle ce texte dans la fenêtre de TextWrangler :
Code
#!/bin/bash

disabled=$(defaults read ~/Library/LaunchAgents/permsDossierPublic Disabled);
if [ $disabled == 1 ]; then
   var1=`/usr/bin/sed -e :a -e '$!N;s/\n/\", \"/g;ta' ~/.all_Folders.txt`
   sleep 6
   /usr/bin/defaults write ~/Library/LaunchAgents/permsDossierPublic WatchPaths "(\"$var1\")"
    sleep 1
   /bin/launchctl load -w ~/Library/LaunchAgents/permsDossierPublic.plist
   /bin/mv -f ~/.all_Folders.txt ~/.old_all_Folders.txt
fi
Enregistre-le, le nom sera "modifyPermsPlist.sh", sélectionne "Unix (LF)" dans le popup Lines Break, sélectionne "Unicode (UTF-8)" dans le popup Encoding, son emplacement sera le dossier "ShellScripts" dans le dossier "Documents"
Ferme le document.


5- Ouvre l'application Terminal
Ceci est nécessaire pour que les scripts soient des exécutables.
Copie/colle ce texte dans la fenêtre du Terminal :
Code
chmod u+x ~/Documents/ShellScripts/modifyPermsPublic.sh ~/Documents/ShellScripts/modifyPermsPlist.sh

Presse la touche Entrée.



6- active les PLIST, voir la commande en bas de ce message

C'est tout. biggrin.gif


------------
Si j'impose les noms de fichiers et les emplacements, c'est pour que vous ayez le moins de modifications à faire dans les fichiers Plist et surtout (les scripts shell et les commandes Terminal) car les espaces et certains caractères réservés (dans les noms des scripts) nécessitent des connaissances pour que ça fonctionne sans erreurs.

Pourquoi deux fichiers PLIST ?
C'est pour que le système prenne en compte les modifications dans le fichier "permsDossierPublic.plist", car il faut desactiver.le fichier "permsDossierPublic.plist".

Lors de la désactivation l'exécutable (le script shell) s'arrête automatiquement, donc il ne peut pas modifier le fichier "permsDossierPublic.plist", il faut le faire par une autre exécutable.
Si un dossier s'ajoute ou un dossier est supprimé, l'exécutable désactive le fichier "permsDossierPublic.plist" et lui même.

Donc la date de modification du fichier "permsDossierPublic.plist" sera changé, le fichier "watchPermsDossierPublic.plist" lancera son exécutable, il ajoutera ou enlèvera les chemins de sous dossiers dans le fichier "permsDossierPublic.plist" et il le réactivera .


Voici la commande Terminal pour désactiver les PLIST en cas de modification d'un des fichiers PLIST, nouvel emplacement du dossier Public ou son nom par exemple.
Code
launchctl unload -w ~/Library/LaunchAgents/watchPermsDossierPublic.plist ~/Library/LaunchAgents/permsDossierPublic.plist


Voici la commande Terminal pour activer les PLIST
Code
launchctl load -w ~/Library/LaunchAgents/watchPermsDossierPublic.plist

Un seul chemin est nécessaire parce celui la active l'autre PLIST

L'oprion -w est nécessaire (il écrit ou enlève la clé "Disabled" dans le plist), le script shell vérifie cette valeur.

Ce message a été modifié par EricaL** - 21 Aug 2011, 00:51.
Go to the top of the page
 
+Quote Post
faksprod
posté 22 Aug 2011, 12:52
Message #16


Nouveau Membre


Groupe : Membres
Messages : 6
Inscrit : 18 Aug 2011
Membre no 169 842



Bonjour EricaL**,

Je tiens vraiment à te remercier d'avoir pris le temps de répondre à mes questions. Ton explication est parfaite, clair, nette et précise. À mon avis cela va dépanner plus d'un "mac user"!
Cependant, j'ai un soucis... J'ai fait exactement ce que tu as décrit. Après avoir placé les fichiers au bon emplacement et lancé les lignes de commande avec le terminal j'ai fait quelques tests sur le dossier "Public".

Les premiers fichiers/dossiers que j'ai glissé/déposé dans le dossier "Public" ont bien été modifiés (y compris les fichiers disposés dans des sous dossiers).
Ensuite, j'ai tenté de créer directement un dossier à la racine du dossier "Public". Clique-droit dans le dossier "Public" > nouveau dossier. Là, le dossier n'a pas pris les bonnes autorisations. J'ai attendu quelque minutes, et toujours rien. Je l'ai sorti du dossier "Public" puis remis dedans, toujours rien. J'ai également tenté de créer un dossier dans un sous dossier du dossier "Public". De même, il n'a pas pris les bonne autorisations. Je me suis dit que j'avais du faire une erreur alors j'ai repris ton tuto depuis le début. Nouveau test, même problème. Dès qu'un dossier et créé directement dans le dossier (ou sous dossier) "Public", les modifications d'autorisations ne sont plus exécutées. Comme si les scripts étaient désactivés...

J'ai voulu encore une fois tout reprendre et lorsque j'ai voulu "unloader" les fichiers .plist j'ai obtenu le message d'erreur suivant de la part du terminal :
Code
iMac-de-Moi:~ moi$ launchctl unload -w ~/Library/LaunchAgents/watchPermsDossierPublic.plist ~/Library/LaunchAgents/permsDossierPublic.plist
launchctl: Error unloading: ChangePermissionsDossierPublic

J'ai tenté un "unload" sur tout le dossier "LauchAgents" et j'ai obtenu le même message d'erreur pour chacun des fichiers contenu dans le dossier "/Library/LaunchAgents/".


Là, je suis un peu perdu car je ne suis pas vraiment familier avec le terminal et ce genre de manipulation... Je ne voudrais pas faire de mauvaises manipulations vu la puissance de l'outil.
Si tu as encore un peu de temps à m'accorder, aurais-tu un conseil à me donner? Un truc en particulier à vérifier?

Merci par avance et chapeau pour ton tuto!
Go to the top of the page
 
+Quote Post
Guest_EricaL**_*
posté 22 Aug 2011, 18:06
Message #17





Guests






Bonjour,

Premièrement, on réactive le dossier
Code
launchctl load ~/Library/LaunchAgents/

Désactive les PLIST concernée
Code
launchctl unload -w ~/Library/LaunchAgents/watchPermsDossierPublic.plist ~/Library/LaunchAgents/permsDossierPublic.plist


Citation (faksprod @ 22 Aug 2011, 07:52) *
J'ai voulu encore une fois tout reprendre et lorsque j'ai voulu "unloader" les fichiers .plist j'ai obtenu le message d'erreur suivant de la part du terminal :
Code
iMac-de-Moi:~ moi$ launchctl unload -w ~/Library/LaunchAgents/watchPermsDossierPublic.plist ~/Library/LaunchAgents/permsDossierPublic.plist
launchctl: Error unloading: ChangePermissionsDossierPublic

Le fichier permsDossierPublic.plist était déjà désactivé.

il m'a fallu quelque temps pour ajuster les délais pour que ça fonctionne sans problème, car le plist restait désactivé.
Cela dépend de la vitesse des machines, de l'OS et de la réaction de launchD

1-
Code
launchctl unload -w ~/Library/LaunchAgents/watchPermsDossierPublic.plist ~/Library/LaunchAgents/permsDossierPublic.plist


2- Ouvre les shell scripts dans TextEdit
Augmente le temps des sleep (aux 3 endroits) dans les shell scripts.
Par exemple : sleep 1 par sleep 2
Tu peux essayer : sleep 0 pour voir si c'est mieux.
Tu peux essayer de modifier un sleep à la fois ou les trois en même temps
Enregistre

3- Active le plist
Code
launchctl load -w launchctl load -w ~/Library/LaunchAgents/watchPermsDossierPublic.plist


Répète les points 1, 2 et 3 jusqu'à tant que le fichier "permsDossierPublic.plist" se réactive automatiquement sans arrêt dans toute une journée.

Pour savoir s'il est désactivé, ouvre le fichier "permsDossierPublic.plist" dans TextEdit
Code
<dict>
    <key>Disabled</key>
    <true/>
    <key>Label</key>

<key>Disabled</key> sera présent dans le texte du fichier, sinon il est activé

Ce message a été modifié par EricaL** - 22 Aug 2011, 18:22.
Go to the top of the page
 
+Quote Post
faksprod
posté 23 Aug 2011, 10:39
Message #18


Nouveau Membre


Groupe : Membres
Messages : 6
Inscrit : 18 Aug 2011
Membre no 169 842



Bonjour EricaL** et encore merci pour ta réponse.

Je suis un peu paumé là... Quand je demande de "reloader" le dossier "LaunchAgents" via le terminal j'obtiens ce message d'erreur :
Code
iMac-de-Moi:~ Moi$ launchctl load ~/Library/LaunchAgents/
nothing found to load

Si je lance un "unload" j'obtiens le même message qu'hier :
Code
iMac-de-Moi:~ Moi$ launchctl unload -w ~/Library/LaunchAgents/
launchctl: Error unloading: com.adobe.AAM.Scheduler-1.0
launchctl: Error unloading: com.apple.FolderActions.enabled
launchctl: Error unloading: com.apple.FolderActions.folders
launchctl: Error unloading: ChangePermissionsDossierPublic
launchctl: Error unloading: WatchPlistPermissionsDossierPublic

J'ai cherché sur le net à quoi correspondait l'erreur "nothing found to load" mais cela ne m'aide pas à régler le soucis. Il y a pourtant bien des éléments à "loader" puisqu'il y a plusieurs fichier "plist" dedans.
J'ai lu quelque part qu'il fallait vérifier le format XML des fichiers "plist", c'est ce que j'ai fait (avec textEdit au format Texte), je les ai réécrits mais cela n'a rien changé.
Que vaut-il mieux faire à présent? Y a t-il un moyen de réinitialiser ce dossier "LaunchAgents" via le terminal pour repartir sur de bonne base?

Merci par avance pour ton aide!


Go to the top of the page
 
+Quote Post
Guest_EricaL**_*
posté 24 Aug 2011, 00:25
Message #19





Guests






Bonsoir,

Citation (faksprod @ 23 Aug 2011, 05:39) *
Bonjour EricaL** et encore merci pour ta réponse.

Je suis un peu paumé là... Quand je demande de "reloader" le dossier "LaunchAgents" via le terminal j'obtiens ce message d'erreur :
Code
iMac-de-Moi:~ Moi$ launchctl load ~/Library/LaunchAgents/
nothing found to load
Cette erreur survient parce que l'option -w à été utilisé pour tous désactivés les plist.
Donc il faudra toujours utilisé l'option -w lors de l'activation.

Cette commande
Code
launchctl load -w  ~/Library/LaunchAgents/
fonctionnera sans erreur.

Après, cette commande :
Code
launchctl unload -w ~/Library/LaunchAgents/
fonctionnera sans erreur, sauf si un des fichiers est déjà désactivé, dans ce cas tu sauras lequel est déjà désactivé Error unloading .......


Citation (faksprod @ 23 Aug 2011, 05:39) *
Si je lance un "unload" j'obtiens le même message qu'hier :
[code]iMac-de-Moi:~ Moi$ launchctl unload -w ~/Library/LaunchAgents/
launchctl: Error unloading: com.adobe.AAM.Scheduler-1.0
C'est qu'il sont déjà tous désactivés.

Ce message a été modifié par EricaL** - 24 Aug 2011, 00:25.
Go to the top of the page
 
+Quote Post
faksprod
posté 24 Aug 2011, 11:52
Message #20


Nouveau Membre


Groupe : Membres
Messages : 6
Inscrit : 18 Aug 2011
Membre no 169 842



Bonjour EricaL** et merci pour tes réponses plus que précises!

Effectivement ton indication sur la commande load et unload avec le paramètre -w était juste.
Cependant, je commence un peu à désespérer. J'ai suivi ton exemple à la lettre mais la machine n'en fait qu'a sa tête.

Citation
Répète les points 1, 2 et 3 jusqu'à tant que le fichier "permsDossierPublic.plist" se réactive automatiquement sans arrêt dans toute une journée.

J'ai modifié les "sleep" des fichiers shell à multiples reprises. J'ai tenté plusieurs choses :

1 - Tous les "sleep" à 0, puis tous à 1, puis tous à 2, etc, jusqu'à 10.
2 - Le premier "sleep" à 0, le second à 1, le dernier à 2 puis ensuite le premier "sleep" à 1, le second à 2, le dernier à 3 jusqu'à 10.
3 - Puis le premier "sleep" à 1, le second à 0, le dernier à 2 puis le premier "sleep" à 2, le second à 1, le dernier à 3, etc...
4 - Et enfin le premier à 2, le second à 1, le dernier à 0, etc...

Vu que je ne connais pas vraiment les commandes shell, j'incrémente les valeurs de "sleep" sans comprendre à quoi elles vont servir ce qui ne facilite pas la tache et la compréhension du comportement de la machine.
Tous les test ont donnés le même résultat. Lorsque je "load" le "plist", le script est bien exécuté et les autorisations de tout le contenu du dossier "Public" sont modifiés.
Ensuite cela continu de fonctionner quelques secondes mais cela semble bien aléatoire car en faisant plusieurs tests avec les même valeur de "sleep" le comportement est différent.
Au bout d'une dizaine de secondes les autorisations de dossier ne sont plus modifiés... De plus, la ligne <key>Disabled</key> est tout le temps visible dans le fichier permsDossierPublic.plist.

J'ai remarqué dans les fichiers shell que le chemin utilisé pour récupérer des variables n'était pas toujours le même... Je ne sais pas si cela peut changer quelque chose?
Par exemple "/usr/" et parfois utilisé devant "/bin/..." et parfois pas (cette remarque te montre à quel point je m'y connais! smile.gif)
Au niveau des "sleep", jusqu'à combien puis-je incrémenter les valeurs? Quel est le comportement d'un "sleep" au juste?
Y aurait t-il quelque chose d'essentiel que je devrais vérifier/tester sur ma machine??

Je vais continuer à faire des tests et des recherches en espérant trouver quelque chose!
Encore merci à toi.
Go to the top of the page
 
+Quote Post
Guest_EricaL**_*
posté 24 Aug 2011, 16:07
Message #21





Guests






Bonjour,

Citation (faksprod @ 24 Aug 2011, 06:52) *
Bonjour EricaL** et merci pour tes réponses plus que précises!

Effectivement ton indication sur la commande load et unload avec le paramètre -w était juste.
J'ai remarqué dans les fichiers shell que le chemin utilisé pour récupérer des variables n'était pas toujours le même... Je ne sais pas si cela peut changer quelque chose?
Par exemple "/usr/" et parfois utilisé devant "/bin/..." et parfois pas (cette remarque te montre à quel point je m'y connais! smile.gif)

C'est normal, les chemins des exécutables ne sont pas tous aux mêmes endroits, les dossiers sont en général: (/usr/bin/, /usr/sbin/, /bin/, /sbin/, /usr/local/bin/, /usr/local/sbin/ ) ces dosssier ne sont pas visibles dans le Finder.

Il est préférable de mettre le chemin au complet dans un script shell, alors que dans le Terminal ce n'est pas obligatoire pour les exécutables par défaut de OS X


Citation (faksprod @ 24 Aug 2011, 06:52) *
Quel est le comportement d'un "sleep" au juste?
Cette commande ne fait rien pendant le nombre de secondes indiqué,
Exemple : sleep 6 il attendra six secondes avant d'exécuter la prochaine ligne dans le script.




---------------
Recommençons avec une nouvelle méthode

-- Pour supprimer les anciens fichiers de l'autre méthode
Exécute cette commande
Code
launchctl unload -w ~/Library/LaunchAgents/watchPermsDossierPublic.plist ~/Library/LaunchAgents/permsDossierPublic.plist

Supprime le fichier "watchPermsDossierPublic.plist"

Supprime les scripts shell ("modifyPermsPlist.sh" et "modifyPermsPublic.sh").


----

Voici une méthode fiable à 100 %.
La commande sera exécutée à intervalle de quatre secondes.

Ici, j'ai testé sur 3000 éléments dans le dossier, la commande chmod ne prend pas plus de 1 % sur le processeur quand les permissions des éléments sont déja correct , donc cet intervalle de quatre secondes ne consommera pas de ressources inutilement.

1- Ouvre le fichier "permsDossierPublic.plist" dans TextEdit.
Copie/colle ce texte dans la fenêtre de TextEdit :

Code
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <true/>
    <key>Label</key>
    <string>ChangePermissionsDossierPublic</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/chmod</string>
        <string>-R</string>
        <string>ugo=rw+X</string>
        <string>/Users/xxxxxx/Public</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StartInterval</key>
    <integer>4</integer>
</dict>
</plist>
Remplace xxxxxx par le nom d'utilisateur
Enregistre et ferme-le.

2- active le fichier "permsDossierPublic.plist" par cette commande du Terminal
Code
launchctl load -w ~/Library/LaunchAgents/permsDossierPublic.plist

C'est tout.

Ce message a été modifié par EricaL** - 24 Aug 2011, 16:12.
Go to the top of the page
 
+Quote Post
faksprod
posté 19 Sep 2011, 11:00
Message #22


Nouveau Membre


Groupe : Membres
Messages : 6
Inscrit : 18 Aug 2011
Membre no 169 842



Bonjour EricaL**,

Après quelques semaines de tests je reviens sur ce post pour te remercier. La dernière méthode proposée (répéter l'action de modifications des droits à interval régulier) fonctionne très bien. J'aurais bien évidemment préféré qu'il n'y ai pas besoin de passer par StartInterval pour que la machine ne soit pas obligé de répéter l'action de modification des droits quand ce n'est pas nécessaire. Mais au moins cela fonctionne et nous fait gagner du temps!
Encore un grand merci pour avoir pris le temps de m'aider.

Bonne continuation à toi!
Go to the top of the page
 
+Quote Post
fregenot
posté 7 May 2012, 13:23
Message #23


Adepte de Macbidouille
*

Groupe : Membres
Messages : 143
Inscrit : 3 Aug 2006
Lieu : Nantes
Membre no 65 300



J'ai exactement le même problème et je vais donc tenter cette solution, en remerciant son auteur.

J'ai toutefois une question, qui ne remet absolument pas en cause sa solution, mais dont je n'ai pas la réponse. Ne serait-il pas plus simple de scripter le dossier avec un Applescript, pour que tout ce qui tombe dedans prenne automatiquement les bonnes autorisations?

Visiblement, l'auteur juge cette solution mauvaise en disant qu'Un launchAgent est mieux qu'une action de dossier, mais je ne comprends pas pourquoi. Dans ma petite tête, je m'étais dit qu'un script de dossier ferait l'affaire.

Ce message a été modifié par fregenot - 7 May 2012, 14:32.


--------------------

Frédéric
MacBook Pro - MacPro
Go to the top of the page
 
+Quote Post
MacEmbert
posté 31 Mar 2020, 19:00
Message #24


Macbidouilleur de vermeil !
****

Groupe : Membres
Messages : 910
Inscrit : 12 Oct 2004
Lieu : Liège.be
Membre no 25 088



Bonjour à tous,

Je ressort ce sujet des tréfonds du forum MB car je me pose exactement la même question.

Voici ma situation: j'ai un scanner réseau qui envoie sur un dossier partagé de mon iMac tous les documents scannés.
Mais mon utilisateur n'est pas propriétaire de ces fichiers et n'a pas de droits en écriture.

J'aurais voulu un script à inclure dans une action de dossier pour que chaque fichier soit directement corrigé à son arrivée. Est-ce possible?

J'ai bien lu qu'un launchagent était mieux selon certains mais de mon côté je redémarre très peu mon mac (une fois toutes les deux semaines), cette solution ne m'arrange donc pas du tout.

Merci d'avance à tous les pro du code, de la part d'un bleu.

Ce message a été modifié par MacEmbert - 31 Mar 2020, 19:02.


--------------------
Je ne croque pas que des pommes, j'aime aussi le Camembert.
iMac 2020, macOS Catalina
MacMini C2D 2020, macOS Monterey
iPad mini 2, iPad 6
iPhone XS
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 29th March 2024 - 14:40