25/05/07
Des machins (en AppleScript) pour Geektool...

Dans d'autres billets de ce blog[1], on pouvait voir que, et comment, Geektool pouvait exécuter des scripts AppleScript. A partir de là, il devient très facile de faire quelques bricoles.
Afficher les X dernières lignes de la Console
Lors de son exécution, le logiciel échange des messages concernant ses activités entre les différentes parties du système. Ces informations sont enregistrées dans les historiques des messages. Console permet de visualiser n'importe quel message échangé entre le système et les applications. (Aide Console)
Pour y accéder avec Geektool, on peut se contenter de demander la lecture du fichier console.log… ouais, mais non, Geektool affichera alors tout le contenu du fichier, et même en jouant sur la taille de la fenêtre, le résultat sera peu satisfaisant et peu esthétique. De plus, il contient une information répétitive et inutile[2] la date du jour, dans 2 types de formats possibles, c'est pourquoi je me suis fait une petit script[3] :
console.scpt
(* console.scpt HP <http://blogosx.jupiterii.com> updated May. 24, 2007 *) property myXlines : 3 set uid to do shell script "id -u" set shortDate to (do shell script "date '+%h %d'" as text) & space set hippenDate to (do shell script "date '+%Y-%m-%d'" as text) & space on simpleReplace(search, replace, subject) local search, replace, subject, ASTID set ASTID to text item delimiters try set text item delimiters to search set subject to text items of subject set text item delimiters to replace set subject to "" & subject end try set text item delimiters to ASTID return subject end simpleReplace set lastXlines to ((do shell script "tail -n " & myXlines & " /Library/Logs/Console/" & uid & "/console.log") as text) set myConsole to my simpleReplace(shortDate, "", lastXlines) set myConsole to my simpleReplace(hippenDate, "", myConsole)
Il suffit de modifier la valeur numérique de property myXlines pour ajuster la quantité de messages affichés.
infoSys.scpt
(* infoSys.scpt HP <http://blogosx.jupiterii.com> updated Jul. 18, 2007 *) on bash(cmd) try do shell script (cmd) on error "error" end try end bash on run set hostname to bash("hostname -s") set uptime to bash("uptime | cut -d, -f1 | colrm 1 10") set RAM to bash("top -l 1 | awk '/PhysMem/ {print $8}'") set ethernet to bash("ifconfig en0 | grep 'inet ' | awk '{print $2}'") --ethernet set wifi to bash("ifconfig en1 | grep 'inet ' | awk '{print $2}'") set CPU_temp to bash("sysctl -a kern.cpu_temp | awk -F \": \" '/cpu_temp:/ {print $2}'") set start_volume to bash("df -h / | tail -1 | awk '{print $5}'") set swapfile to bash("/usr/bin/du -hc /var/vm/swap* | grep 'total' | awk '{print $1}'") set path2public to bash("whoami") & "/Public/" set publicfile to bash("/usr/bin/du -hc /Users/" & path2public & "* | grep 'total' | awk '{print $1}'") if (publicfile = "0B") then set publicfile to "empty" else set Xfiles to bash("ls /Users/" & path2public & " | wc -l | awk '{print $1}'") set wordfile to "files" if ((Xfiles as real) is less than or equal to 1) then set wordfile to "file" end if set publicfile to publicfile & space & "(" & Xfiles & space & wordfile & ")" end if set load_average to word 1 of bash("uptime | sed 's/.*load averages: //g' | cut -d, -f2") --warning 1.00, critical 3.20 (*2 : dual core) set load_message to "" if (load_average is greater than or equal to 1 * 2) then set load_message to "(warning)" if (load_average is greater than or equal to 3.2 * 2) then set load_message to "(critical)" if wifi = "" then set wifi to "OFF" set final_output to ¬ hostname & " : " & ethernet & return ¬ & "AirPort : " & wifi & return ¬ & return ¬ & "Public : " & publicfile & return ¬ & "Uptime : " & uptime & return ¬ & "RAM : " & RAM & return ¬ & "Temp. CPU : " & CPU_temp & "°C" & return ¬ & "Charge moyenne : " & load_average & space & load_message & return ¬ & "Utilisation disque : " & start_volume & return ¬ & "SWAP : " & swapfile return final_output end run
Un petit script destiné à afficher diverses informations systèmes (réseau : IP, hostname et occupation du dossier Public ; RAM, CPU, occupation du disque de démarrage, uptime, charge[4][5]…). L'affichage de la température nécessite l'installation de SpeedIt, un framework de Increw Team[6].
Utilisation d'Applescript avec GeekTool
Créer un nouveau shell (GeekTool) :
osascript '/path/to/myScript.scpt' | iconv -f utf-8 -t ucs-2-internal
l'utilisation de iconv est facultative et permet l'affichage correct des caractères accentués.
Notes
[1] recherche : AppleScript et iTunes
[2] si on veut n'afficher que les quelques derniers messages sur le bureau
[3] la fonction simpleReplace() vient de : MacScripter - str_replace() [Search/find and replace text]
[4] load average, voir : loadaverage - Documentation Ubuntu Francophone
[5] Determining system info (lists.freebsd.org)
[6] voir aussi : CoreDuoTemp