AppleScript : Intitulé des Préférences Panes ???

benzorg

Membre confirmé
24 Juin 2004
25
0
50
Bonsoir,

J'essaye en vain d'écrire un petit script pour appeler le panneau "Partage" de mes Préférences Système.
Impossible de trouver l'appelation lui correspondant, j'Obtiens l'erreur : "Erreur dans Préférences Système : NSArgumentEvaluationScriptError"?!?

J'ai regardé dans un exemple de script : Get User Name.applescript
dont je vous recopie ici le début

tell application "System Preferences"
activate
set current pane to pane "com.apple.preferences.users"
end tell

Comment sait-on que le panneau "Comptes" s'appele "com.apple.preferences.users"

J'ai beau regardé la docs et le dictionnaire de l'application Systeme Preferences, je ne trouve rien qui corresponde au intitulé des panneaux, ni des différentes rubriques de chaque panneau.

Merci de m'éclairer sur ce point

cordialement

benoit
 
voilà, j'ai trouvé !

en toute logique, c'est com.apple.preferences.sharing

Bloc de code:
tell application "System Preferences"
	activate
	set current pane to pane "com.apple.preferences.sharing"
end tell
 
Merci El_ChiCo :)

mais peux tu m'expliquer comment tu les trouves ces intitulés...

parce qu'il faut aussi que j'agisse sur les paramêtres du Firewall....

et par la même occasion (parce que je cherche dans tous les sens sur le web et dans la docs Apple et je ne trouve pas...), comment puis-je activer ou désactiver un service, ajouter et activer un nouveau port dans mon Coupe-feu????

cordialement

benoit
 
n'y aurait'il personne pour éclairer mes débuts en Applescript ???

j'ai beau chercher dans les docs anglaises, les bibkiothèques applescript des applications, impossible de trouver quelque chose d'explicite... ça doit pourtant exister, je ne cherche pas à faire quelque chose de bien compliquer, si????

merci à ceux qui pourront me sortir de cette obscurité

cordialement

benoit
 
Sachant qu'il faut plus d'un an a Apple pour ne PAS donner de réponse à une question technique vitale, ne soit pas impatient.
Je suis sur que plein de Mac Users te lisent et sauront te répondre, je l'aurait fait volontier mais je ne connais pas la réponse.

Cordialement
 
merci Didier,

je vais patienter, esperant qu'un Macuser puisse m'eclairer, en attendant je vais continuer mes investigations...

cordialement

benoit
 
pour ce qui est des intitulés des panneaux de préférence, j'ai fait au pif... Dans la mesure ou comptes était user, j'ai essayé "partage" en anglais, qui m'a donne "sharing" et qui à marché du premier coup.
Je pense que si tu essaye sound ca t'affiche les son, etc...
Bon d'accord, sound, c'est un mauvais exemple... Tu vois, ca ne peut pas marcher à tous les coups :) Mais tu test, et tu retest et faut être patient :)

Pour ce qui est des réglages plus précis à l'intérieur de chaque panneau, je cherche de mon côté et je te tiens au courant.
 
en fait, j'ai bien peur qu'il n'y ait pas moyen de commander les attributs dans les panneaux des preferences systeme... Dans la mesure ou quand tu ouvre le dictionnaire des preferences systeme, il n'y a pas de commandes autres que celle de base, je ne sais pas trop...

Maintenant, je ne suis pas un pro d'applescript non plus...
Peut etre aussi que automator, dans le prochain OS reglera le probleme :)
 
merci El_ChiCo,

Je vais tester de mon côté...
Pour agir à l'intérieur des panneaux, je crois que je vais être obligé de passer par les Systems Events qui permettent (si j'ai bien saisi...) sur les composants à la manière d'une souris...
mais c'est vrai que ça va pas être simple, je pense également qu'automator devrait nous simplifier la tâche... vivement Tiger...

Je vous tiendrais au courant de mes avancées, mais je pense que ça va me prendre du temps..;

cordialement

benoit
 
Bon voilà ou j'en suis :

je suis passer comme je le pensais par les "Systems Events" et ça donne ça :

activate application "System Preferences"
tell application "System Events"
tell process "System Preferences"
-- GUI Scripting statements:
click button "Partage" of scroll area 1 of window "Préférences Système"
select row 3 of table 1 of scroll area 1 of tab group 1 of window 1

get value of row 3 of table 1 of scroll area 1 of tab group 1 of window 1
if value is true then click button 1 of tab group 1 of window 1
end tell
end tell


Alors il m'ouvre bien les Préférences systèmes, il va bien sur Partage et me séléctionne bien mon Partage Web...

Le problème arrive avec ma condition "if", j'obtiens l'erreur suivante :
Aucun résultat n?a été renvoyé à partir de certaines composantes de cette expression.

si quelqu'un pouvait m'expliquer l'utilisation de la condition if ou bien me donner une piste pour arriver à mes fins...

en fait ce que je veux obtenir c'est que le script vérifie si le partage Web personnel est activé, si oui, je veux qui le désactive...

Je vais y arriver, mais que c'est long et laborieux les débuts en Applescript...


au fait, j'ai trouvé un outil bien sympa pour trouver les noms des items des menus, UI Browser, il est en version d'essai 30 jour, mais est beaucoup plus pratique que UiElementInspector fournit par Apple (c'est d'ailleurs sur le site d'Apple que j'ai trouvé le lien, ils ne sont pas chien, c'est plutôt cool...) Par contre, je pense qu'avec automator Apple va nous fournir un outil encore plus puissant et encore plus facile d'utilisation...

Bon j'y retourne

cordialement

benoit
 
j'aurais bien cherché à t'aider, mais quand je copie-colle ton script, il plante avant de sélectionner la ligne de partage web...
Dans l'historique des événements, j'ai ça :

tell application "System Preferences"
activate
end tell
tell application "System Events"
click button "Partage" of scroll area 1 of window "Préférences Système" of process "System Preferences"
"Erreur dans System Events : NSReceiverEvaluationScriptError: 4"


Si tu as déjà eu cette erreur, tu peux m'aider à la corriger, pour que je puisse continuer de chercher avec toi ?
 
Salut El_ChiCo,

je viens d'avoir la réponse à mon problème sur le forum de MacBidouille par guiguiguillaume.

Je recopie ici sa réponse :

Bon, j'ai travaillé à la question et j'ai pondu ça qui marche chez moi...

Bloc de code:
tell application "System Events"
    tell application "System Preferences"
*       set current pane to pane "com.apple.preferences.sharing"
    end tell

    tell tab group 1 of window "Partage" of process "System Preferences"
*       click radio button "Services"
*       repeat with theRow in rows of table 1 of scroll area 1
            if value of text field 1 of theRow is "Partage Web personnel" then 
                set theCheckBox to checkbox 1 of theRow
           *end repeat
       *if value of theCheckBox is 1 then click theCheckBox
    end tell
end tell

J'aime pas vraiment faire du GUI scripting, je trouve ça long, difficilement portable, ça plante aux changements d'OS, c'est pas multilingue... Mais pour une utilisation perso, ça tourne.

Grosso modo, quand tu veux en faire, il faut y aller étape par étape. Tu sélectionne ton appli (tell application "xxx"), et tu fais un "get UI elements". Là tu regardes lesquels sont dispos (en combinaison avec l'utilitaire UIBrowser). Alors tu fais "tell cet_élément_là" puis get UI elements, et tu continues, tu descends, tu descends, et tu finis par arriver.

EDIT : bien sûr, LA façon propre de faire, c'est de lancer un shell script qui piloterait le super-serveur. Mais là, faudrait googler pendant quelques minutes pour trouver ça.

ça marche au poil, mais comme il le précise, le mieux serait de passer par un shell script.
et comme je cherche également à ajouter un port au réglage du firewall et que jusqu'a présent, je n'ai réussi qu'a ouvrir la fenêtre pour en créer un mais qu'il m'est impossible d'agir dessus (je n'obtient aucun UI Elements mê^me avec l'utilitaire UIBrowser) je crois que le shell script va s'imposer de lui même...

moi qui avait opter pour l'Applescript pour une question de simplicité.

si certains d'entre vous on quelques tuyaux là dessus, je suis preneur :)

cordialement

benoit
 
pour le script shell, je dois pouvoir t'aider, mais rappelle-moi juste précisément ce que tu souhaite faire...
 
Salut El_ChiCo,

alors là, ce n'est pas de refus non plus :)
car là, je patauge encore plus :-(

Alors voilà ce que je cherche à faire :

en fait deux chose :

la première (tu la connais déjà...) que j'ai éssayé de réaliser en Applescript et dont la réponse finale m'a été soufflé par guiguiguillaume sur le, Forum de macBidouille, Consiste à vérifier si le serveur Apache installé avec le système MacOSX est activé et le désactiver le cas échéant.

ce que j'avais traduit en Applescript par : vérifier l'état du partage web personnel dans les préférences système et si il est actvé, de le désactiver !

Après cela, ayant désactiver le partage web personnel, les ports 80 et 427 se retrouvent automatiquement fermé dans les réglages du Coupe-feu.
etant donné que mon script doit s'inscrire dans un package qui installe le serveur web Apache2, je dois créer un nouvel item dans les régalages du Coupe-feu qui va me permettre d'ouvriri les ports 80 et 427 sans activer le partage web personnel (je ne peux faire fonctionner deux serveurs web simultanément sur mon système...)
je cherche donc via un shell script (car avec Applescript je reste bloqué au moment de remplir les champs de la fenêtre nouveau...) à ajouter un réglages personnel nommé Apache2 qui autoriserait les communications réseau sur les ports 80 et 427 et à l'activer.

Ce script est une condition sinéquanone au bon déroulement de la suite de mon Pack...

j'espère avoir été assez précis et pas trop répétitif.

Si vous avez des pistes pour l'instant, j'en suis à peu près au do shell script :-s

cordialement

benoit
 
ton package, c'est pour en faire quoi ? Tu comptes le distribuer ?

Sinon, ton serveur Apache2 tu l'installe comment ? a priori, il me semble qu'il devrait s'occuper d'ouvrir tout seul les ports dont il a besoin... S'il ne le fait pas tout seul et que tu le "force" avec un shell, j'ai un peu peur que tu ouvre des ports avec rien derrière... Mais je me trompe peut-être... Je manque un peu de connaissance, mais je veux bien aider à chercher...

En tout cas, je continuer a réfléchir...


Et sinon, il est sympa ton avatar :)
 
je vais tou t'expliquer en détails comme ça tu saisira mieux les raisons qui me poussent à passer par un shell script....
ça risque d'être un peu long...

Je fais partie d'une équipe qui développe GuppY, un CMS en licence CeCILL.
Actuellement, je suis le seul menbre de l'équipe à travailler sous Mac, j'ai donc à ma charge (entre-autre...) l'aide des utilisateurs Mac,
Pour faciliter la tâche des utilisateurs et leur permettre de tester GuppY en local sur leur machine, nous avons développer un petit Bundle windows : EasyGuppY, qui Installe un serveur web (WebWeaver), le langage PHP et GuppY.
De mon côté, j'ai cherché un moyen simple et rapide de configurer un serveur web sous macOSX, ce qui au départ n'était pas compliqué puisqu'Apache est déjà embarqué sous OSX et qu'il suffit d'activer le Partage web personnel pour que celui-ci soit actif. la ou c'est devenu un peu plus compliqué, c'est lorsque j'ai voulu trouver un moyen aussi simple pour configurer PHP sur ce serveur. et là les méthodes trouvées sur le net étaient un peu plus complexe. Pour moi, ce n'était pas un soucis, mais notre CMS est en grande partie utilisé par des utilisateurs n'ayant jamais poussé la porte de leur système, il me fallait donc trouver un moyen plus simple...
Et là, je suis tombé sur un tutoriel simple et efficace, qui faisait appel à deux packages d'installation distribué par ServerLogistics : CompleteApache2 et CompletePHP4.
En quelques clics, j'ai un server web Apache2 et le langage PHP4 de configurer et les seules manip à faire sontde copier le Preferences Panes d'Apache2 (fournit avec le Pack Apache2) dans le bon dossier pour qu'il apparaissent dans le panneau des Préférences Système, de désactiver le serveur Web Apache installé d'origine avec OSX et d'activer les ports 80 et 427 si l'on a activer son firewall. Après avoir testé cette install chez moi, j'ai proposé un tutoriel sur notre site officiel reprenant ces quelques réglages, proposant les liens vers les deux packages et expliquant ou il fallait copier les fichiers dudit CMS GuppY.
Mais suite à quelques questions d'utilsateurs Mac, j'ai voulu améliorer la chose et leur proposer un outil identique à celui proposer pour la plateforme Windows.

J'ai donc décider de créer un packages regroupant la totalité de l'install. Pour l'instant, celui-ci lance le package d'install d'Apache2, un Applescript qui copie le fichier Préférences Panes dans le bon dossier, qui lance le package d'install de PHP4, un deuxième Applescript qui copie les fichiers de GuppY dans le htdocs du serveur Apache2, un troisième Applescript (via un shell script) qui applique les bons droits (chmods) sur certains fichiers de GuppY et qui avec un quatrième script lance la page d'accueil du site GuppY installé dans Safari. Il ne me reste plus qu'a règler le problème du partage web et des ports du firewall pour finaliser ce pack.
Je crois que je ne peux pas proposer plus simple et plus complet :)

Après, il ne me restera plus qu'a fournir un script qui me désinstallera tout ça proprement en effaçant les fichiers installés...

Le package sera distribué sous licence libre CecILL et reprendra les licencs Apache (pour Apache) et GNU (pour PHP) étant donné que je n'apporte aucune modification aux codes sources de base. c'est un peu un équivalent en plus simple et très ciblé d'un EasyPHP...

Voilà, tu sais tout :D

Pour l'ouverture des ports, ce n'est sans risque, je reprend seulement les ports ouverts lorsque l'on active le partage web personnel mais justement sans l'activer .
La config du serveur Apache fournit par Apple n'est pas modifié d'un poil de cheveux...

Si tu peux m'aider sur ce dernier point, je t'en serais fort reconnaissant et la communauté Mac (pas très nombreuse) de Freeguppy également :D

Sinon, pour mon avatar, c'est un truc tiré d'une ancienne Pub KanaBeach que j'ai légèrement retouché il y a de ça quelques années. moi aussi, j'aime bien :)

Merci encore de te pencher sur mon problème

amicalement

benoit
 
alors ouvrir les ports, tu peux le faire comme ca en shell : (me semble-t-il)
Bloc de code:
$IPFW add 2080 allow log tcp from any to any 80 in
$IPFW add 2090 allow log tcp from any to any 427 in

te satisfais-ce ?


Et merci d'avoir pris le temps de tout expliquer depuis le début... Comme ca, on voit mieux ou on est et ou on va :)

Tiens-moi au courant... quand tu aura essayé ca, si c'est pas bon, ou si ca ne suffit pas, je te chercherai autre-chose ;)
 
Merci :)

je prends note, et je teste ça demain, mais il faut que je m'initie un peu aux shelle script, je débute encore plus qu'avec AppleScript et je ne voudrais pas faire de bourdes.
J'avais quelques connaissances en MS-DOS, mais j'ai pas l'impression quelles me seront très utiles...

si tu as des liens intérressants (et si possible en français..) qui explique la syntaxe sur le terminal, je suis preneur, pour l'instant, j'ai trouvé quinze milles liens qui m'expliquent la commande man, mais pour la suite, plus rien...
Pour le reste, je te tiens au courant,

benoit