6 votos

Auval y Auvaltool no funcionan a través de SSH

Estaba validando con éxito plugins de unidades de audio con OSX 10.11 a través de SSH. En mi nueva máquina que corre OSX 10.14 (Mojave) todo funciona bien hasta que intento validar un plugin desde una conexión SSH. Uso el mismo comando en el mismo directorio tanto en local como sobre SSH.

/usr/bin/auvaltool -v aumf MyPl Loco

El caso es que, usando SSH, auval no detecta mis plugins ( /usr/bin/auvaltool -a ), pero sólo los predeterminados de Apple. Al hacer lo mismo en la pantalla compartida, mis plugins están en la salida.

  • Esto no parece provenir de $PATH.
  • Esto no parece provenir de los permisos (he probado con chmod 777 en cada componente)
  • Esto no parece provenir del grupo/usuario (he intentado hacer chown a otro usuario)
  • Esto no parece venir de la administración (he intentado sudo)

Así que mi pregunta es, ¿conoces alguna limitación de seguridad SSH que pueda romper mi ejecución de auval y auvaltool? ¿Qué puede ser diferente en SSH que podría hacer algunos cambios de comportamiento de ejecución?

Gracias.

EDIT: ¿Cómo se reproduce?

  • Instalar cualquier plugin AU que no sea de Apple.
  • Inicie un terminal y:
    • "auval -a" mostrará el plugin previamente instalado.
    • "ssh localhost" se conectará a su máquina a través de SSH
    • "auval -a" NO mostrará el plugin previamente instalado.

3voto

Wizzlewott Puntos 113

He encontrado otra solución que sigue sin ser bonita, pero menos invasiva. He implementado un pequeño servidor Python-http que espera los argumentos auval como parámetros url-get. Si este servidor Python se inicia ahora usando una sesión no-ssh, es posible validar todos los plugins usando la llamada http-get. Abajo está el código para el pequeño servidor.

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()

A continuación, puede utilizar wget o un equivalente desde una sesión SSH para obtener el resultado de la validación de au.

Con el servidor en funcionamiento, la salida va a auval_log.txt donde se puede buscar FAILURE o SUCCESS:

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

Esto equivale a ejecutar

auval -v aufx Abcd Dlby

pero sin los problemas de SSH

2voto

Oskar Puntos 1242

Es una posibilidad remota, pero una vez tuve que instalar tmux con brew install tmux (y ya tenía https://brew.sh configurado y listo para ser ejecutado) para que yo pudiera entrar gráficamente y establecer una sesión de terminal para el usuario en cuestión.

Con el cambio rápido de usuario, se puede volver a la pantalla de inicio de sesión - dejando esa sesión de consola de un usuario bendecida con todos los permisos de la GPU y la consola gráfica completa y luego ssh in para adjuntar a las sesiones TMUX existentes.

Esperemos que alguien tenga una respuesta más directa, pero después de varios días de recompensas y algunos grandes comentarios tratando de retroceder en la respuesta, quería dejar constancia de que un inicio de sesión gráfico tiene mayores poderes y permisos y que sólo podría necesitar eso por ahora si nadie tiene una mejor solución para esto.

1voto

MokaT Puntos 59

Definitivamente hay un error en OSX 10.14 y superior. Ya que Apple parece no estar en el camino de solucionarlo, publicaré la solución como respuesta.

La solución consiste en copiar los componentes de la UA que necesita validar a través de SSH en /System/Library/Components/ y luego sudo killall -9 AudioComponentRegistrar para forzar un nuevo escaneo en la siguiente ejecución de auval.

Para ello, tendrá que desactivar la Protección de la Integridad del Sistema que le prohíbe cambiar los directorios del Sistema.

Sólo para que sepas, AudioComponentRegistrar es un deamon, pero auval lo lanza si es necesario.

Tenga en cuenta que puede encontrar una buena información en este gist (también explica una solución para los usuarios de iTerm2).

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X