6 votes

Auval et Auvaltool ne fonctionnent pas via SSH

J'ai réussi à valider avec succès des plugins d'unités audio avec OSX 10.11 via SSH. Sur ma nouvelle machine qui exécute OSX 10.14 (Mojave), tout fonctionne bien jusqu'à ce que j'essaie de valider un plugin depuis une connexion SSH. J'utilise la même commande dans le même répertoire à la fois en local et via SSH.

/usr/bin/auvaltool -v aumf MyPl Loco

Le problème est que, en utilisant SSH, auval ne détecte pas mes plugins (/usr/bin/auvaltool -a), mais seulement ceux par défaut d'Apple. Lorsque je fais la même chose via partage d'écran, mes plugins apparaissent dans la sortie.

  • Cela ne semble pas provenir de $PATH.
  • Cela ne semble pas être dû à des permissions (j'ai essayé un chmod 777 sur chaque composant .component)
  • Cela ne semble pas être dû au groupe/utilisateur (j'ai essayé de changer le propriétaire)
  • Cela ne semble pas être dû à l'administration (j'ai essayé de sudo)

Ma question est donc : connaissez-vous des limitations de sécurité en SSH qui pourraient perturber l'exécution de auval et auvaltool ? Qu'est-ce qui pourrait être différent en SSH et causer des changements de comportement lors de l'exécution ?

Merci.

EDIT : Comment reproduire le problème ?

  • Installer un plugin AU non-Apple.
  • Ouvrir un terminal et :
    • "auval -a" affichera le plugin précédemment installé.
    • "ssh localhost" se connectera à votre machine via SSH
    • "auval -a" NE mentionnera PAS le plugin précédemment installé.

3voto

Wizzlewott Points 113

J'ai trouvé une autre solution de contournement qui n'est toujours pas jolie, mais moins invasive. J'ai mis en place un petit serveur python-http qui attend les arguments auval sous forme de paramètres url-get. Si ce serveur python est maintenant lancé à l'aide d'une session non-ssh, il est possible de valider tous les plugins en utilisant l'appel http-get. Voici le code pour le petit serveur.

from http.server import HTTPServer, BaseHTTPRequestHandler
import subprocess
from urllib.parse import urlparse, parse_qs

import traceback

def run_auval(params):
    arguments = ["auval", "-v", params["type"], params["subtype"], params["manufactor"]]
    print("Running AUVal: {}".format(arguments))
    process_return = subprocess.run(arguments, capture_output=True)
    return process_return.stdout + process_return.stderr, process_return.returncode

class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        raw_params = parse_qs(urlparse(self.path).query)
        params = {}
        for key, value in raw_params.items():
            params[key] = value[0]

        try:
            output, return_code = run_auval(params)
        except:
            self.send_response(500)
            self.end_headers()
            self.wfile.write(str.encode(traceback.format_exc()))
            return

        self.send_response(200)
        self.end_headers()
        self.wfile.write(output)

if __name__ == "__main__":
    httpd = HTTPServer(("0.0.0.0", 8000), SimpleHTTPRequestHandler)
    httpd.serve_forever()

Vous pouvez alors utiliser wget ou un équivalent à partir d'une session SSH pour obtenir le résultat de la validation auval.

Avec le serveur en cours d'exécution, la sortie est redirigée vers auval_log.txt où vous pouvez rechercher FAILURE ou SUCCESS :

wget "http://localhost:8000?type=aufx&subtype=Abcd&manufactor=Dlby" -O auval_log.txt

Cela équivaut à exécuter

auval -v aufx Abcd Dlby

mais sans les problèmes SSH

2voto

Oskar Points 1242

C'est une solution de dernier recours, mais j'ai dû installer tmux avec brew install tmux (et j'avais déjà https://brew.sh configuré et prêt à fonctionner) afin de pouvoir me connecter graphiquement et établir une session de terminal pour l'utilisateur en question.

Avec la commutation rapide d'utilisateur, vous pouvez ensuite revenir à l'écran de connexion - laissant cette session console utilisateur bénie avec des autorisations complètes pour le GPU et la console graphique, puis vous connecter en ssh pour vous attacher aux sessions TMUX existantes.

En espérant que quelqu'un ait une réponse plus directe, mais après plusieurs jours de primes et de bons commentaires essayant de trouver la réponse, je voulais noter que la connexion graphique a effectivement des pouvoirs et des autorisations plus élevés et que vous pourriez en avoir besoin pour le moment si personne n'a de meilleure solution pour ça.

1voto

MokaT Points 71

Il y a définitivement un bug dans OSX 10.14 et plus récent. Puisque Apple ne semble pas sur le point de le corriger, je vais poster la solution de contournement en tant que réponse.

La solution de contournement consiste à copier les composants AU dont vous avez besoin pour valider via SSH dans /System/Library/Components/, puis à sudo killall -9 AudioComponentRegistrar pour forcer une nouvelle analyse lors de la prochaine exécution de auval.

Pour cela, vous devrez désactiver la Protection de l'intégrité du système qui vous interdit de modifier les répertoires du système.

Juste pour que vous le sachiez, AudioComponentRegistrar est un démon, mais auval le lance si nécessaire.

Notez que vous pouvez trouver des informations intéressantes dans ce gist (il explique également une solution de contournement pour les utilisateurs d'iTerm2).

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X