vendredi, novembre 21, 2008

Applescript: envoyer des touches aux applications

Pour toute aide, touts niveaux en Apple script voir le post rellatif a ce sujet ...

Nous allons voir comment envoyer des touches aux applications via Applescript.
Un exemple simple : vous créez un script en 4 lignes qui vous affiche le Dashboard, ou l'on peut faire taper du texte dans une application et rajoutant certains éléments comme la date du jour ou bien d'autres choses encore.
Pour le tip relatif dashbord, ceci ne sert a rien au premier abord, mais nous verrons en quoi cella peut être utile par la suite.

Tout d'abord il vous faut vérifier que vous avez déverrouillé une fonctionnalité (et oui il ne fraudais pas qu'un script puisse émuler un clavier ou par extension exécuter des commandes "out of the box" ce serais une faille ><)
(.... devinez de qui je parle là ....)

Enfin bon assez de troll pour aujourd'hui Dans les Préférences Système > Système > Accès Universel
Vérifiez dans la première tab (Vue) que "activer l'accès pour les périphériques d'aide" est coché

Ensuite > Spotlight (ou QuickSilver ...) > Éditeur de scripts
pour activer la bibliothèque (command shift L)

le script type est :

on run
try
tell application "System Events" to key code 100
--F11
end try
end run

Ici par exemple la touche f11 est envoyé au système.
le -- permet de mettre de commentaire

Une petite précision, mettons que vous voulez faire un combo de touches.
C'est a dire un (command N) pour un nouveau document par ex ...
Et bien le code ressemblerais à ça:

try
tell application "System Events" to key code {3} using command down
--command n
end try

Pour ce qui est des touches du clavier le code est en fait le code ASCII de la touche ...
mais me diriez vous qu'en est il des touches pomme(command), ctrl, alt, f1 ....

et bien voici la liste a peu près exhaustive pour un clavier QWETRY ...

Key code 0 = a
Key code 11 = b
Key code 8 = c
Key code 2 = d
Key code 14 = e
Key code 3 = f
Key code 5 = g
Key code 4 = h
Key code 34 = i
Key code 38 = j
Key code 40 = k
Key code 37 = l
Key code 46 = m
Key code 45 = n
Key code 31 = o
Key code 35 = p
Key code 12 = q
Key code 15 = r
Key code 1 = s
Key code 17 = t
Key code 32 = u
Key code 9 = v
Key code 13 = w
Key code 7 = x
Key code 16 = y
Key code 6 = z


Key code 122 = F1
Key code 120 = F2
Key code 99 = F3
Key code 118 = F4
Key code 96 = F5
Key code 97 = F6
Key code 98 = F7
Key code 100 = F8
Key code 101 = F9
Key code 109 = F10
Key code 103 = F11
Key code 111 = F12
Key code 105 = F13
Key code 107 = F14
Key code 113 = F15


Key code 49 = Space
Key code 36 = Return
Key code 123 = Left Arrow
Key code 124 = Right Arrow
Key code 126 = Up Arrow
Key code 125 = Down Arrow
Key code 48 = Tab
Key code 54 = Command
Key code 56 = Shift
Key code 58 = Alt
Key code 59 = Ctrl
Key code 51 = delete

Key code 0 = 29
Key code 1 = 18
Key code 2 = 19
Key code 3 = 20
Key code 4 = 21
Key code 5 = 23
Key code 6 = 22
Key code 7 = 26
Key code 8 = 28
Key code 9 = 25

Et pauvre Français que nous sommes comment allons nous bien pouvoir faire ? ...
Merci Yvan KOENIG pour le Vector du clavier mac FR (AZERTY):

set vect to {{"esc", "35"}, {"F1", "7A"}, {"F2", "78"}, {"F3", "63"}, {"F4", "76"}, {"F5", "60"}, {"F6", "61"}, {"F7", "62"}, {"F8", "64"}, {"F9", "65"}, {"F10", "6D"}, {"F11", "67"}, {"F12", "6F"}, ¬
 {"§6", "16"}, {"&1", "12"}, {"é2", "13"}, {(ASCII character 22) & "3", "14"}, {"'4", "15"}, {"5(", "17"}, {"§6", "16"}, {"è7", "1A"}, {"!8", "1C"}, {"ç9", "19"}, {"à0", "1D"}, {")°", "1B"}, {"-_", "18"}, {"backspace", "33"}, ¬
 {"tab", "30"}, {"aA", "0C"}, {"zZ", "0D"}, {"eE", "0E"}, {"rR", "0F"}, {"tT", "11"}, {"yY", "10"}, {"uU", "20"}, {"iI", "22"}, {"oO", "1F"}, {"pP", "23"}, {"^¨", "21"}, {"$*", "1E"}, {"Return", "24"}, ¬
 {"capslock", "39"}, {"qQ", "00"}, {"sS", "01"}, {"dD", "02"}, {"fF", "03"}, {"gG", "05"}, {"hH", "04"}, {"jJ", "26"}, {"kK", "28"}, {"lL", "25"}, {"mM", "29"}, {"ù%", "27"}, {"`£", "2A"}, ¬
 {"shift", "38"}, {"<>", "32"}, {"wW", "06"}, {"xX", "07"}, {"cC", "08"}, {"vV", "09"}, {"bB", "0B"}, {"nN", "2D"}, {",?", "2E"}, {";.", "2B"}, {":" & "/", "2F"}, {"=+", "2C"}, ¬
 {"Fn", "3F"}, {"ctrl", "3B"}, {"opt", "3A"}, {"cmd", "37"}, {" ", "31"}, {"enter", "4C"}, {"leftarrow", "7B"}, {"downarrow", "7D"}, {"uparrow", "7E"}, {"rightarrow", "7C"}}

Pour ceux qui ne connaissent pas l'object Vector pas de panique ...
Vous avec compris que chaque lettre est associé a son code (Keycode) ASCII ...
Un ( F) de la touche recherché et c'est fait ...

Un grep avec les yeux ca marche aussi ^^ (cf BashFr >_<)

Revenons au tip sur la dashboard ...
En envoyans la touche raccourcis de votre dashboard (f12 pour mon vieux MacBook ^^) via un script cella peut paraitre useless mais pour rendre cella un peu plus attrayant copiez votre script dans

~/Library/Speech/Speakable\ Items/ (arborescence UNIX ...)

Ou plus clairement avec le Finder, à partir de "Macintosh HD" > Utilisateurs > {votre nom} >Bibliothèque > Speech > Speakable Items

Bien sur dans le cas où "Macintosh HD" est le mon de votre disque dans lequel est installé mac os .

Puis activez dans "Préférences Système" > Système > Parole
Dans l'onglet (par defaut) "Éléments prononçables" > activez "Éléments prononçables" ^^

Et la vous pouvez parler a votre mac
Par exemple si le nom de votre script est "Dashboard" appuyez sur "esc" et dites "Dashboard" avec l'accent Anglais et la votre script va se lancer et le Dashboard va apparaitre comme par magie ^^

Ceci n'est qu'un exemple de ce que vous pouvez faire. Une quasi infinité de choses sont possibles. On peut imaginer n'importe quel script et le lancer par la voix.
Un vrais truc de Geek ^^.

Un autre post plus détaillé sur les Scripts Apple est a venir du fait de la puissance de ce language (et de sa simplicité : de l'Anglais parlé >< même le VBS de crosoft' n'est pas aussi simple ^^)
Zut j'avais dit que jarretais le Troll ...

débuter en Apple script

Pour débuter en Apple script de Zero (0) ... Il existe un site référence en Français FR :
http://www.iscript.fr/

Sur ce site différents tutoriels sont disponibles et ceux ci sont très progressifs et bien expliquées. Un must pour les débutants.

Les bonnes adresses pour les plus expérimentées sont:
Le site officiel mac : http://www.apple.com/applescript/
Un site en Anglais: http://www.macosxhints.com

Si vous cherchez pour une fonctionnalité bien particulière en plus de google pensez a utiliser la bibliothèque de l'éditeur de script Apple.

En effet elle peut vous renseigner sur plus ou moins n'importe quels fonctionnalités disponibles pour chaque applications.
Si une application n'y figure pas rajoutez la simplement en sélectionnant l'app dans le dossier 'applications'.

dimanche, novembre 16, 2008

Désactiver le compte root sous Leopard

Si vous avez activé le compte root par le passé et que vous voulez le désactiver voici la solution universelle :

Loguez vous sous votre compte (pas root) et taper dans un terminal

dsenableroot -d

-- Le mot de passe demandé pour exécuter la commande est ici le mot de passe de votre compte

Marche sous mac osX Léopard, pas testé sur les autres distribs

lundi, novembre 03, 2008

Surveiller ses "ports" ouverts

Nous allons voir comment surveiller les sockets en écoute sur un mac de manière a renforcer la sécurité.

Je parle ici des ports au sens socket, donc réseau voir le wiki FR

  • Tout d'abord un petit éclaircissement sur ce qu'est un port et ce qu'est un socket, car parfois par abus de langage les deux sont mélangées a tort.

Un socket au niveau BSD du terme est un système de communication interprocessus, mais dans notre cas c'est la communication a travers le réseau qui nous intéresse.

D'une manière imagée un socket est soit l'oreille qui va écouter le réseau soit la voix qui vas parler sur le réseau. D'où les états des sockets : écoute, co° établie ...

Pour ne pas transformer tout cella en une quincophonie endiablée chacun parle et écoute sur un canal définit par un numéro: le port

De cette manière un échange réseau associé au port 22 ne seras pas en conflit avec le 24 par ex.

  • Apple, utilitaire de réseau
Sans doute avez vous testé l'utilitaire réseau d'apple et plus précisément l'onglet "portscan"
Pour scanner les ports ouverts sur une machine, vous pouvez bien entendu l'utiliser sur vous-même via l'adresse de la boucle locale (127.0.0.1 si celle-ci est resté par défaut ) ou plus simplement via 'localhost'

Ex : portscan en action


Portscan est utile car il permet de tester une configuration, voir des règles de Firewall.

Sur ce screenshot par exemple le port 3689 est ouvert en écoute et est près a accepter de nouveaux clients. Le protocole daap est le partage de musique d'iTunes, un simple arrêt de celui-ci est le socket ce ferme.

Les sockets en écoute sont générées par des softs agissant comme serveur, cella va du serveur SSH activé dans les préférences systèmes, au partage de fichier en passant même par word mac. (Je me demande bien a quoi celle peu servir >
  • Aller plus loin avec du BASH

Cette opération est longue si l'on scanne touts les ports possibles mais une commande existe en bash, qui elle va lister directement touts les dits ports qui ont été lancées au niveau du système.
=>
sudo lsof -i | grep LISTEN

sudo: droits administrateurs
lsof: affiche les sockets
paramètre de lsof : -i : n'affiche que les sockets réseau
| : "pipe"(lire paille-pe) permet d'effectuer une seconde commande sur le résultat de la première
grep LISTEN commande grep qui ici n'afficheras que les lignes ou figurent LISTEN
car nous recherchons les ports en écoute bien sur ....

L'avantage majeur de cette commande est qu'elle vous informe sur le processus qui a lancé tel ou tel socket, vous pouvez donc juger plus aisément si le soft est malveillant ou non.

Reprenons notre exemple précédent, le daap, le protocol de partage de musique d'iTunes ...
Si vous ne le saviez pas alors cette commande vous aurais permis de comprendre :




Ici le socket en écoute de protocole daap est associé au processus iTunes ...


on obtient aussi de cette manière le PID du processus, de cette façon on peu tuer celui-ci en cas de pépin ><

un bon vieux
(sudo) kill -9 n°PID
et basta ...

Attention cella tue le process en "bourrin mode" ^^

samedi, novembre 01, 2008

modifier l'ordre des icones

Dans le "systray" de mac (en haut a droite) l'utilisateur a la possibilité de changer l'ordre des icônes en maintenant la touche pomme (ou command sur les nouveaux mac) tout en cliquant.

On peut aussi supprimer l'icône en la déplacent vers l'extérieur puis en relâchant la souris.

ex: