IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AppleScript Discussion :

10.12 Sierra Activer partage internet


Sujet :

AppleScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Points : 5
    Points
    5
    Par défaut 10.12 Sierra Activer partage internet
    Bonjour,

    Je suis vraiment un manche en script, raison pour laquelle je viens vous demander un peu d'aide


    Ce que je souhaite faire :
    Pouvoir, avec un Applescript activer et désactiver le partage de connexion Internet.


    Où j'en suis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    tell application "System Events"
    	tell application "System Preferences"
    		set current pane to pane "com.apple.preferences.sharing"
    		activate
    	end tell
    	tell application process "System Preferences"
    		get UI elements of window "Partage"
    	end tell
    end tell
    J'arrive dans la bonne partie des Préférences système et la commande ci-dessus me permet de connaitre le nom des différentes partie de la fenêtre.
    Mais je ne suis pas arrivé plus loin...

    A cet endroit, j'aimerai juste pouvoir cocher Partage Internet.

    Nom : PI.png
Affichages : 374
Taille : 75,4 Ko


    Cela parait simple, mais compliqué (pour moi ^^), essayant au pif depuis un petit moment.

  2. #2
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonjour,
    Effectivement la programmation via la GUI (interface graphique) demande quelques essais et tâtonnements.
    D'abord une petite remarque pour signaler que ce type de programmation est soumis à l'interface définie (ici par Apple dans les préférences système).
    Si Apple change demain le panneau de partage, ton script devra être adapté.

    Comment faire ? il faut en fait demander tout les UI elements qui se trouvent sur la fenêtre pour chercher les éléments sur lesquels tu souhaites interagir.
    Ils sont organisés, en général avec une certaine logique, sous une forme hiérarchique et donc il va falloir descendre pas à pas.
    Par exemple le script ci dessous demande le premier niveau de la fenêtre de partage réseau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    tell application "System Preferences"
        set current pane to pane "com.apple.preferences.sharing"
    activate
    end tell
    delay 1
    tell application "System Events"
        tell process "System Preferences"
            get UI element of window "Partage"
        end tell
    end tell
    Après execution, la fenêtre de résultat de l'Editeur de Script, affiche une liste des éléments graphiques comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    {text field "Nom de l’ordinateur :" of window "Partage" of application process "System Preferences" of application "System Events", 
    static text "Nom de l’ordinateur :" of window "Partage" of application process "System Preferences" of application "System Events", 
    group 1 of window "Partage" of application process "System Preferences" of application "System Events", 
    static text "Les ordinateurs de votre réseau local peuvent accéder à votre ordinateur à l’adresse : imac27.local" of window "Partage" of application process "System Preferences" of application "System Events", 
    button "Modifier…" of window "Partage" of application process "System Preferences" of application "System Events", 
    button 2 of window "Partage" of application process "System Preferences" of application "System Events", 
    button 3 of window "Partage" of application process "System Preferences" of application "System Events", 
    button 4 of window "Partage" of application process "System Preferences" of application "System Events", 
    button 5 of window "Partage" of application process "System Preferences" of application "System Events", 
    toolbar 1 of window "Partage" of application process "System Preferences" of application "System Events"}
    Avec un peu d'habitude et de logique, on en déduit que ce que l'on cherche est dans l'objet "Group 1". On recommence le script ci-dessus avec l'instruction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    get UI element of group 1 of window "Partage"
    Dans ce group 1 on va trouver "scroll area 1" qui nous intéresse, et ainsi de suite pour trouver le contenu de la table 1, puis comment sont faites ses lignes (un texte et une checkbox).
    Les interfaces utilisateur Apple sont très bien structurées (ce n'est pas le cas d'autres applications !) donc en suivant la logique tu vas t'habituer et trouver l'élément voulu ne prendra que quelques minutes !

    Et comme c'est le week end, et que, en plus, j'avais déjà fait un script similaire, je l'ai adapté pour toi ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    set SWindow to "Partage"set Cible to "Partage Internet"
    set CPort to "Wi-Fi"
    
    
    tell application "System Preferences"
        set current pane to pane "com.apple.preferences.sharing"
    activate
    end tell
    delay 1
    tell application "System Events"
        tell process "System Preferences"
    -- Parcours les lignes de la table "Services"
            repeat with Ligne in every row of table 1 of scroll area 1 of group 1 of window SWindow
                if value of UI element 2 of Ligne is Cible then -- C'est la ligne contenant la Cible
    select Ligne-- selectionne la ligne pour faire apparaître la partie droite de la fenêtre
                    set LigneService to Ligne
    -- le click ne sera accepté qu'après définition d'un port de partage !    
                end if
            end repeat
    delay 1 -- Laisse du temps pour afficher la partie droite de la fenêtre
            get UI element of table 1 of scroll area 2 of group 1 of windowSWindow
    -- pop up button 1 of group 1 of window Swindow -> bouton partager votre connexion depuis
    -- Parcours les lignes de la table "Connexion via"
            repeat with Ligne in every row of table 1 of scroll area 2 of group 1 of window SWindow
                if value of UI element 2 of Ligne is CPort then -- C'est la ligne contenant CPort
    select Ligne-- selectionne la ligne
                    if value of checkbox 1 of Ligne is 0 then click checkbox 1 of Ligne -- click si pas déjà coché    
                end if
            end repeat
            if value of checkbox 1 of LigneService is 0 then click checkbox 1 of LigneService -- click si pas déjà coché    
    -- click button "Démarrer" of SWindow
        end tell
    end tell
    Attention, ce script est testé sur El Capitain. Il semble, d'après ta copie d'écran, que Apple n'a pas changé la fenêtre donc il devrait fonctionner sur ton Sierra. A vérifier.
    J'ai mis les noms de Fenêtre, Cible,..en variables, au début du script, car ces noms doivent être changés si le Mac est dans une autre langue que le français.
    Le script sélectionne d'abord la ligne de partage (liste de gauche) pour afficher la partie droite. Puis il sélectionne "Wifi" en le cherchant dans la liste (table 1 of scroll area 2 of group 1).
    Une fois la sélection du port faite, il click sur la case "partage" de la liste de droite (dont on a conservé la position en variable LigneService).

    De nombreux autres évènements peuvent intervenir : par exemple en cochant Wi-Fi, tu peux avoir une fenêtre d'alerte demandant à activer d'abord le Wi-Fi. Pour éviter cela, il faut t'assurer que le Wi-Fi est bien connecté AVANT.
    Dans mon test, j'ai eu une alerte à la fin, indiquant que ce partage pouvait impacter mes autres ordinateurs. J'ai laissé en commentaire le bouton "démarrer" qu'il faut cliquer si tu as aussi cette fenêtre.

    Je précise que certaines fonctions réseau sont accessibles en ligne de commande (via do shell script), ce qui évite parfois de passer par la GUI. Je n'ai pas trouvé la fonction partage, mais cela ne veut pas dire qu'elle n'existe pas !
    Bon courage.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Un grand merci pour ces explications très détaillées et pour le script!
    Il fonctionne très bien (tu sens le petit "mais" arriver )

    Ce script va être utilisé sur une session standard (non admin), donc de base les réglages que le script fait, ne sont pas accessibles.
    Un compte admin est demandé. Je souhaite donc pouvoir intégrer une commande pour lancer le script via des privilèges admin.

    Soit dans le script lui-même, soit dans un autre (Apple script ou Automator) qui lancera celui de partage de connexion avec des privilèges admin, afin que l'utilisateur n'ait pas un mot de passe à taper.


    Ce que j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tell application "Terminal"
    	do shell script "/Users/xxx/Desktop/Partage_Internet.scpt" user name "nom d'utilisateur admin" password "mot de passe compte admin" with administrator privileges
    end tell

    Résultat :

    Nom : Capture_d’écran_2017-06-28_à_18_17_21.png
Affichages : 276
Taille : 16,5 Ko

  4. #4
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonjour,
    Tu mélanges plusieurs choses, mais on va essayer de trier :

    1) commande "Do shell script"
    Cette commande est appelée par un script Applescript pour lancer une commande du shell Unix. Elle ne nécessite pas le Terminal, bien qu'elle s'apparente à une simulation d'une commande lancée via le Terminal (désolé pour les puristes, je simplifie).
    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    do shell script "ls -l /Users/"
    On pourrait directement taper dans le Terminal la commande ls -l /Users/ (qui donne le contenu du dossier Users)
    Cependant, la commande do shel script n'est pas interactive, c'est à dire que si la commande Unix demande un complément comme le mot de pass admin, le do shel script ne demandera rien à l'utilisateur et l'instruction échouera.
    Il est possible d'inclure, dans la commande unix un "with admin privilege et de donner le mot de passe administrateur...ce que je déconseille fortement: Si on met des mots de passe administrateur, ce n'est pas pour les écrire en clair dans un script.
    Je précise q'un script Applescript n'a pas d'admin privilège et ne peut donc être lancé en mode administrateur. il est lancé avec le niveau qui le lance...

    2) lancer un script via le Terminal (ou via do shell script)
    L'instruction à utiliser pour lancer un script via le Terminal est "osacript" suivi du chemin vers le script à lancer. Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    osascript /Users/Moi/Desktop/test.scpt
    Notons au passage que si on veut lancer un script, non pas via le Terminal, mais en direct à partir d'un autre script, il y a plus simple que de demander à Applescript de lancer un commande Unix qui lance elle-même un script : Applescript peut lancer directement un autre script (commandes load script et run script).


    Ces points étant clarifiés, tu as raison sur un point: les réglages de partage de réseau nécessitent le niveau administrateur.
    C'est logique et nécessaire afin de garantir la sécurité.
    Dans ton cas, tu veux donc court-circuiter cette sécurité pour mettre le partage sans être administrateur. C'est déconseillé et surtout impossible.
    Enfin il reste que même si tu faisais un script Unix à qui tu envoies le mot de passe administrateur, ce mot serait dans ton script et donc présenterait un risque sécuritaire.
    Malgré toutes ces mises en garde et si tu as le courage, tu peux regarder du côté des commandes Unix visant la configuration /System/Library/LaunchDaemons/com.apple.NetworkSharing.plist et les launchctl.
    Dangereux (tu peux planter gravement ton système) , incertain, très complexe... Bref passe ton chemin. Désolé.

    Il te reste à lancer le script en mode admin, c'est plus sain.

    Cordialement

Discussions similaires

  1. Partage Internet et Reboot
    Par LordBob dans le forum Administration
    Réponses: 2
    Dernier message: 26/09/2005, 15h23
  2. partage internet avec modem cable
    Par guy kadima dans le forum Développement
    Réponses: 1
    Dernier message: 20/08/2005, 13h57
  3. Partage internet
    Par flatron dans le forum Réseau
    Réponses: 7
    Dernier message: 02/05/2004, 16h21
  4. Partage internet suse 9
    Par Michel dans le forum Réseau
    Réponses: 2
    Dernier message: 12/04/2004, 16h33
  5. [partage internet][WinXP] changer l'ip 192.168.0.1
    Par YanK dans le forum Développement
    Réponses: 2
    Dernier message: 26/03/2004, 23h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo