Apague la alimentación USB en OS X/Mac Mini

Necesito apagar (y encender) el USB usando un script o una pieza de software. Idealmente, debería ser posible apagar/encender cada puerto por separado, pero también es suficiente apagar/encender todos los puertos a la vez. La máquina que estoy usando es Mac Mini. ¿Alguien tiene una solución para esto?

Por alimentación USB me refiero a Vbus, la conexión de 5V/500mA. Entiendo que la conexión de datos también está desactivada y está bien, pero no es suficiente para mí que la conexión de datos esté desactivada y Vbus permanezca encendido. Esta necesidad proviene de la necesidad de mantener los teléfonos móviles constantemente conectados para realizar pruebas automáticas. A algunas combinaciones de dispositivo/batería no les gusta estar constantemente conectadas y las baterías comienzan a hincharse en menos de un año.

Reconozco que existen múltiples variaciones de esta pregunta. Hasta ahora no hay una solución que pueda usar. Enumeraré aquí mis hallazgos hasta ahora:

  • es posible lograr esto utilizando un HUB USB externo autoalimentado y controlando su alimentación. Sin embargo, esta no es una opción para mí (incluso los centros de calidad han causado otros problemas en mi uso).

  • es posible deshabilitar el USB eliminando los archivos .kext. Entre otras fuentes , se explica en el documento de configuración de seguridad de OS X. Sin embargo, esto requiere reiniciar y no estoy seguro de si realmente deshabilita la alimentación USB o solo los datos.

  • hay muchas afirmaciones de que simplemente no es posible. Sin embargo, el propio OS X lo hace cuando detecta un dispositivo que consume demasiada energía, por lo que al menos hay soporte de hardware. Este mensaje de error se copia de /System/Library/Extension/IOUSBFamily.kext/Contents/Resources/English.lproj/Localizable.strings: "Desconecte el dispositivo usando demasiada energía para volver a habilitar los dispositivos USB". (por supuesto, no sé si la desactivación se realiza apagando la alimentación USB, pero supongo que es una acción natural para el dispositivo que consume demasiado).

  • parece que en macbook los puertos USB normalmente están alimentados incluso cuando la computadora portátil está en reposo. Si bien esto no está resolviendo mi problema, está relacionado.

La razón por la que necesito esto es que tengo un sistema de prueba en el que se conectan varios dispositivos a un mac mini. Los dispositivos también se cargan a través de USB. Ha resultado que si el dispositivo está conectado todo el tiempo a un cargador, su batería se hincha en aproximadamente un año, lo que hace que el dispositivo sea inutilizable, inseguro y potencialmente peligroso. Apagar la alimentación cuando no se necesita extendería significativamente la vida útil de los dispositivos.

¿Desea deshabilitar todo el puerto o solo la energía que proviene del puerto? Tu título es confuso.
Es suficiente para mí desactivar el poder. Debido a la naturaleza de USB, deshabilita efectivamente el puerto. Pero no es suficiente para mí deshabilitar el flujo de datos/carga del controlador y mantener el Vbus encendido.
Tengo un teléfono conectado a cada puerto y no quiero cargar continuamente esos teléfonos, sino solo cuando me comunico con ellos a través de USB.
no puede pasar La especificación USB exige que se suministren 5 voltios. Si lo apaga, el USB ya no funcionará. En cuanto a la carga, una vez que su dispositivo alcanza el 100%, es lo suficientemente inteligente como para desconectarse del circuito de carga.
Puede pasar. Como explico como parte de mi pregunta, OS X lo hace cuando detecta un dispositivo que consume demasiada corriente. Solo que no sé si hay alguna forma de activar eso que no sea insertando un dispositivo que consume demasiada energía. -- Ojalá tuvieras razón acerca de que el teléfono es lo suficientemente inteligente. Desafortunadamente, ahora tengo cuatro dispositivos diferentes con una batería hinchada, después de haber estado enchufados durante un año. Hay mucha discusión sobre eso en Internet, así que no entraré en detalles.
Y está bien para mí que el USB ya no funcione. Es por eso que necesito una forma de encender también.
Tu no entiendes. No puede apagar solo la alimentación, es todo el puerto o nada.
Creo que lo malinterpretas. Está bien para mí tener "todo el puerto" abajo. O incluso todo el concentrador raíz y todos los puertos USB en un mac mini. El único requisito que tengo es que el Vbus no suministre energía al dispositivo conectado físicamente y que pueda volver a encender el/los puerto/puertos USB más tarde.

Respuestas (1)

Pasé mucho tiempo investigando este problema hace algunos años; mi conclusión es que simplemente no es posible con la información disponible. El control de la potencia ocurre a un nivel mucho más bajo que el propio kernel de macOS, por lo que no se trata solo de configurar macOS o hurgar en la estructura de datos del kernel correcta. Tiene que modificar el firmware que no es posible para los usuarios normales.

La única solución de trabajo que encontré es usar un concentrador. Esto funcionó muy bien para mí. Si tiene un concentrador que admite la conmutación de alimentación en grupo, puede apagar/encender fácilmente la alimentación de cada grupo (conjunto de puertos). De manera similar, si tiene un concentrador que admite la conmutación de alimentación por puerto, puede apagar/encender cada puerto del concentrador individualmente.

Puede descargar software para macOS para controlar el concentrador desde aquí:

https://github.com/mvp/uhubctl

Tenga en cuenta que esta utilidad solo admite concentradores de control que permiten la conmutación de alimentación por puerto. El sitio web tiene una lista de concentradores USB compatibles.

Una vez que opté por la solución del concentrador, la parte más difícil fue encontrar un concentrador USB que admitiera la conmutación de alimentación en grupo o por puerto. La parte del software real es muy fácil.

Es incorrecto usar agrupados aquí. Todos los concentradores USB no son compatibles con la conmutación de alimentación o admiten la conmutación agrupada (es decir, para todos los puertos a la vez) o admiten la conmutación de alimentación por puerto (individual). uhubctl solo admite la conmutación de alimentación por puerto, no se reconocerán los concentradores agrupados (soy el autor de uhubctl).
He editado para que quede más claro lo que quise decir. En este caso, realmente no importa porque la pregunta solo requería apagar todo el concentrador. Implementé una utilidad correspondiente a uhubctl en Linux para resolver un problema hace muchos años con una interfaz CAN que corrompería su propio estado, por lo que no tengo mucha experiencia con uhubctl. ¡Gracias por compartir los detalles!
Gracias por editar, pero realmente debería eliminar la palabra agrupada: uhubctl no admite concentradores con conmutación de alimentación agrupada. Además, uhubctl no puede apagar todo el concentrador; todos los puertos sí, pero el concentrador seguirá funcionando.
Sé que no lo admite, lo escribí en la respuesta. Sin embargo, otras utilidades podrían hacerlo. Y sí, sé que no apaga todo el concentrador, apaga todos los puertos, eso también es lo que escribí.
¿Esto todavía no es posible en 2021? (Abrí una pregunta similar, pero estaba cerrada y me refirieron a esta). @jksoegaard
No lo creo, no. Al menos no he visto ningún desarrollo en esa área desde entonces.