Exécuter uniquement si le périphérique est connecté

Avez-vous déjà été dans une situation où vous avez besoin d'ouvrir une application mais vous voulez seulement ouvrir cette application si un périphérique particulier est connecté ? Par exemple, lorsqu’il y a un lien symbolique vers une immense bibliothèque dépendante sur un disque externe. Ou l’interface audio doit être attaché avant l’ouverture de la station audionumérique.

L’exécution de ces applications sans être conforme aux dispositions peut gâcher vos paramètres et vous devrez peut-être réajuster manuellement les réglages, les chemins, nettoyages, etc. Finalement des données peuvent être perdues ou supprimées.

Il est trop facile d’oublier d’avoir un dispositif non connecté. Cela peut être assez ennuyeux et est contre-productif d’un flux de travaux de création : Une idée apparaît et vous voulez commencer immédiatement à travailler sur elle mais alors vous êtes distrait en réparant le désordre causée par l'absence du périphérique attaché avant d’ouvrir le logiciel.

Mon cas particulier

Quand j'oublie de brancher l’interface audio avant que je lance l’application Logic Pro X il va utiliser le pilote audio du système par défaut. Alors je dois manuellement modifier les paramètres et dois m’assurer que certaines choses ne sont pas modifiés comme le taux d’échantillonnage, entre autres.

Un autre cas est lorsque j’ouvre le logiciel de traitement de photos ou vidéos sans un disque externe connecté dans lequel la bibliothèque est stockée. Puis une nouvelle bibliothèque générique sera crée.

Conditions préalables

Avec la commande suivante, il est possible de liste tous les périphériques USB. Il s’agit de la première étape pour trouver l’interface audio.

# List all USB Devices
❯ ioreg -p IOUSB -w0 | sed 's/[^o]*o //; s/@.*$//' | grep -v '^Root.*'
Apple Internal Keyboard / Trackpad
BRCM20702 Hub
Bluetooth USB Host Controller
Duet USB

Ensuite, nous pouvons isoler l’interface audio.

# Grep Duet USB Device
❯ ioreg -p IOUSB -w0 | sed 's/[^o]*o //; s/@.*$//' | grep -v '^Root.*' | grep "Duet USB"
Duet USB

La commande suivante aide à identifier si un volume nommé DATA est monté.

# List external Disk
❯ mount | grep /Volumes/DATA
/Volumes/DATA

Avec cette information, nous pouvons écrire une fonction et mis en place un flux de travaux automatique qui répond à nos besoins.

Fonction

Vous pouvez mettre ceci dans votre .zshrc/.bashrc/etc.

# Music workflow
music () {
    RED='\033[0;31m'
    NC='\033[0m' # No color
    if ioreg -p IOUSB -w0 | sed 's/[^o]*o //; s/@.*$//' | grep -v '^Root.*' | grep "Duet USB" > /dev/null && mount | grep /Volumes/DATA > /dev/null; then
        open /System/Library/PreferencePanes/Sound.prefPane
        open ~/Music/Sheet\ Music/;
        open /Applications/Logic\ Pro\ X.app/;
        open /Applications/Apogee\ Maestro\ 2.app/;
    else
        echo "Both ${RED}`DATA`${NC} and ${RED}`Duet USB`${NC} must be connected to proceed"
    fi
}

Description

La fonction music vérifie si en tant que Duet USB et /Volumes/Data sont attachés.

La sortie pour ne pas réprondre aux critères est :

❯ music
Both `DATA` and `Duet USB` must be connected to proceed.

Personnalisez si nécessaire. Les variables peuvent être : Duet USB, /Volumes/DATA, paths

Configuration du système

  • OS X 10.11 El Capitan
  • ZSH avec .zshrc
  • Interface audio USB
  • Disque externe