¿Argumentos de línea de comandos para "Conexión a Escritorio remoto para Mac"?

19

No he podido encontrar ninguna documentación que indique que esto es posible, pero ¿hay alguna forma de pasar el nombre de host al que le gustaría conectarse como argumento de línea de comandos a la Conexión de escritorio remoto de Microsoft para Mac?

Algunos antecedentes para los interesados:

Soy administrador de sistemas y estoy en el proceso de cambiarme a una MacBook Air como mi computadora de trabajo principal desde una computadora portátil con Windows 7. Con frecuencia uso Remote Desktop Client para conectarme a los servidores, y en Windows, uso Launchy como mi iniciador de teclado. He asignado "rdp" como palabra clave, así que cuando invoco Launchy, escriba "rdp {tab} servername", pasa el texto después de la tecla tab como el nombre de host a mstsc.exe (es decir, mstsc.exe / v: servername) . Esto da como resultado que el cliente de escritorio remoto abra una sesión con el nombre de host especificado.

billc
fuente
2
Lamentablemente, no, no hay acceso a la línea de comandos o acceso AppleScript a Remote Desktop Client. Sin embargo, le pregunté al desarrollador de CoRD si consideraría agregarlo a CoRD. Y ahí está mi complemento para un mejor cliente que el cliente RDP de MS: cord.sourceforge.net . :)
Ian C.
@ Ian C., había usado CoRD en el pasado, en mi MacBook personal ... parece que han pasado algunos años. No estaba realmente satisfecho con él en comparación con la estabilidad y el aspecto más "pulido" del cliente de Microsoft. De hecho, acabo de descargarlo nuevamente, porque noté que en una de sus capturas de pantalla, se mencionaba el manejo de enlaces rdp: //. Esto hace exactamente lo que estoy buscando, ¡así que gracias por señalarme hacia CoRD! Pude configurar una extensión de "script de shell" en Alfred que ejecuta "open rdp: // {query}". ¡Salud!
billc
Oh wow. Ni siquiera me di cuenta de que manejaba los enlaces rdp: //. Eso es genial. Haré que mi comentario sea una respuesta. :)
Ian C.

Respuestas:

11

No hay acceso a la línea de comandos para Microsoft Remote Desktop Client. Pero el cliente de escritorio remoto CoRD gratuito y excelente maneja rdp://enlaces que le permitirían llamarlo desde un iniciador de su elección o incluso a través opende la línea de comandos.

La documentación de CoRD en github establece cómo puede usar parámetros codificados con URL para abrir sesiones RDP configuradas por completo.

rdp: // sintaxis de URL

CoRD maneja rdp: // URL, que puede usar desde muchos lugares dentro de OS X. Desafortunadamente, no hay forma de extender el diálogo "Conectar al servidor" de Finder, que admite el lanzamiento de URL de VNC, por lo que no podemos iniciar CoRD desde allí . Si Apple cambia esto (o si alguien conoce una forma de extenderlo) nos encantaría saberlo.

Saved Servers

Si desea usar rdp://URL con servidores guardados existentes, puede hacerlo (a partir de 0.5.3). Simplemente use la etiqueta en lugar de un nombre de host:

open rdp://label

Nuevos servidores

Desde un shell (usando Terminal):

open rdp://hostname

Se pueden usar parámetros adicionales para iniciar una sesión totalmente configurada a través de la URL:

open rdp://[username[:password]@]hostname[:port][/domain][?parameters]

Los siguientes parámetros se pueden configurar para la sesión a través de una cadena de consulta (a partir de 0.5.2):

  • screenDepth ### [8|16|24|32]
  • screenWidth <width in pixels>
  • screenHeight <height in pixels>
  • consoleSession ### [true|false|yes|no]
  • fullscreen ### [true|false|yes|no]
  • windowDrags ### [true|false|yes|no]
  • drawDesktop ### [true|false|yes|no]
  • windowAnimation ### [true|false|yes|no]
  • themes ### [true|false|yes|no]
  • fontSmoothing ### [true|false|yes|no]
  • forwardDisks ### [true|false|yes|no]
  • forwardPrinters ### [true|false|yes|no]
  • forwardAudio ### [0|1|2]
    • 0 - Forward Audio to the Local Machine (Currently not used since CoRD doesn't present audio)
    • 1 - Leave Audio at the Remote Machine
    • 2 - Disable Audio at both Machines

Ejemplo

open rdp://jsmith:[email protected]/BigCoDomain?screendepth###24\&consoleSession###true\&themes###false\&screenWidth###1280\&screenHeight###800

Nota:

Cuando se usan símbolos de unión (&) desde la línea de comando, se deben escapar con una barra diagonal inversa (). Los dos puntos (:) se pueden usar en lugar de símbolos de unión para obtener el mismo efecto, sin necesidad de escapar.

Las contraseñas con caracteres especiales, @,:, &, etc. deben codificarse de acuerdo con el formato de codificación de URL

Uso de línea de comando

CoRD admite las siguientes opciones de línea de comandos: -host -port -u -d -p -a [8 | 16 | 24 | 32] establecer profundidad de pantalla -ancho establecer ancho de resolución de pantalla ancho-alto establecer altura de resolución de pantalla

Ejemplo

/Applications/CoRD.app/Contents/MacOS/CoRD -host example.com -port 3389 -u username

Advertencias

Al iniciar CoRD desde la línea de comandos de esta manera, se abre una nueva instancia de CoRD. Un síntoma de esto es múltiples iconos de Dock. Esto anula o disminuye la efectividad de muchos de los puntos fuertes de CoRD, incluidas las sesiones unificadas, etc. Por esa razón, recomendamos utilizar el comando de apertura y rdp: // URL para iniciar sesiones.

ingrese la descripción de la imagen aquí

Ian C.
fuente
1
Demasiado gracioso! Estaba respondiendo mi propia pregunta como tú también la respondiste. ¡De nuevo, gracias por tu ayuda!
billc
Según la página de CoRD GitHub , este proyecto ya no se mantiene a partir del 16 de agosto de 2015.
kenorb
Lástima. Estuvo bien.
Ian C.
Esta respuesta está desactualizada: las versiones más nuevas de Microsoft Remote Desktop para Mac admiten rdp://enlaces (aunque usan un esquema diferente). Ver la respuesta de Jack Douglas.
chrstphrchvz
7

No amo CoRD. Funciona, pero parece descamarse periódicamente. Hice mi propio script CLI para Microsoft RDP. Creé un script sed + open bash para hacer posible pasar 2 argumentos al cliente de escritorio remoto de Microsoft. Puedo pasar un nombre de host y puedo activar un interruptor para conectarme a la consola de los servidores Server 2003.

Sé que esto podría llevarse más lejos. Por ejemplo:

  • Mi script bash no funcionará con espacios en las rutas o nombres de archivos :)
  • Me imagino que cualquiera de los datos XML en el archivo .RDP podría modificarse con sed.
  • Incluí varias variaciones de un interruptor para conectarme a la consola porque soy viejo y nunca puedo recordar cuál me gusta. Apuesto a que bash scripting tiene una solución más elegante que la que uso.

Así es como lo hice:

  1. Cree un perfil de plantilla RDP de Microsoft con todas sus configuraciones preferidas. Nómbrelo 'template.rdp'. Haz que se conecte a un servidor falso. Usé un nombre de servidor 'zzxyzyz'. Esto se usa en el comando 'sed' como la cadena para buscar y reemplazar con un nombre de servidor real.
  2. Cree un script bash para copiar el template.rdp a un temp.rdp, luego deposite el temp.rdp con el nombre de host deseado que se pasa al invocar el script. Llamé a mi script bash 'rdp.sh'.
  3. Modifique su '~ / .bash_profile' para incluir un alias a 'rdp.sh'
  4. Haga que el script bash sea ejecutable: chmod + x rdp.sh
  5. El tío de Bob

Contenido de mi script bash :

    #! /bin/bash
rdpTemplateFile='/Users/levi/Dropbox/RDC_Connections/RDS/template.rdp'
rdpTempRDP='/Users/levi/Dropbox/RDC_Connections/RDS/t.rdp'
rdpRunCommand="/Applications/Remote Desktop Connection.app/Contents/MacOS/Remote Desktop Connection"
rdpHost=${1}

if [ "${2}" = "/console" ] ; then
    rdpHost="${rdpHost} /console";
    echo "rdpHost is: " ${rdpHost}
fi

if [ "${2}" = "-console" ] ; then
    rdpHost="${rdpHost} /console";
    echo "rdpHost is: " ${rdpHost}
fi

if [ "${2}" = "-admin" ] ; then
    rdpHost="${rdpHost} /console";
    echo "rdpHost is: " ${rdpHost}
fi

cp -f ${rdpTemplateFile} ${rdpTempRDP}

sed -i '' "s|zzxyzyz|${rdpHost}|g" ${rdpTempRDP}

open -na "${rdpRunCommand}" --args ${rdpTempRDP}

Alias ​​agregado a .bash_profile
(Esto supone que mi archivo de script rdp.sh está en mi directorio de inicio, ~ /)

alias rdp=~/rdp.sh

Haga que el script sea ejecutable:

sudo chmod +x rdp.sh

Ejecute el script:
aquí hay un ejemplo que incluye el conmutador de consola. Dejé una línea de depuración en el script que muestra lo que se va a depositar en el archivo t.rdp.

LeviMAC>rdp MyServer -console
rdpHost is:  MyServer /console
[~/]
LeviMAC>
Levi
fuente
Pude lograr que este concepto funcionara, pero solo después de algunas modificaciones. El comando que usé para iniciar RDP fueopen -na "/Applications/Microsoft Remote Desktop.app/Contents/MacOS/Microsoft Remote Desktop" path/to/profile.rdp
Terrabits
6

No sé cuándo cambió esto, pero el Cliente de escritorio remoto de Microsoft maneja los enlaces rdp: // ahora:

Microsoft Remote Desktop utiliza el esquema URI rdp: // query_string para almacenar configuraciones de atributos preconfigurados que se utilizan al iniciar el cliente. Las cadenas de consulta representan un único conjunto de atributos RDP proporcionados en la URL. Los atributos RDP están separados por el símbolo de y comercial (&).

Por ejemplo, cuando se conecta a una PC, la cadena es:

rdp: // full% 20address = s: mypc: 3389 & audiomode = i: 2 & disable% 20themes = i: 1

Todos los atributos están documentados en la página TechNet de soporte del esquema URI del cliente de escritorio remoto .


fuente
Me encantaría ver algunas URL de muestra. Tengo mi puerto local 3389 reenviado a una máquina con Windows y me conecto como usuario "et" usando la aplicación oficial de Escritorio remoto de Microsoft. Pero no puedo construir una URL que no dé un error.
Bruno Bronosky
Intenta usar 127.0.0.2 en lugar de localhost?
1
¿Tiene alguna idea sobre cómo almacenar / pasar contraseñas?
Bruno Bronosky
1
Lo que hago actualmente es guardar la contraseña en la aplicación Microsoft Remote Desktop (para Mac). Sin embargo, mi objetivo es iniciar una conexión a una nueva IP: puerto a través de la línea de comando después de abrir ese puerto a través del túnel ssh. Solo estoy tratando de mejorar mi script que actualmente termina con "Ahora cambia el host de la conexión guardada a 10.10.1.23:5589 y conéctate"
Bruno Bronosky
1
Por favor, hágamelo saber si usted encuentra una manera :)
1

Bueno, después de consultar mi Microsoft TAM, descubrí que no hay forma de pasar un nombre de host al cliente de Microsoft a través de la línea de comandos.

CoRD, por otro lado, puede hacer lo que quisiera manejando enlaces rdp: //. Después de instalar CoRD, si escribe

open rdp://servername

en Terminal o iTerm2, abrirá una sesión para el nombre del servidor host dentro de CoRD.

Utilizo Alfred (http://www.alfredapp.com/) como mi alternativa "Launchy" en Mac, después de haberlo descubierto después de ser un usuario de Quicksilver. Compré el Powerpack para Alfred, que le permite usar una serie de extensiones, una de las cuales le da la posibilidad de lanzar scripts de shell. Así que creé una extensión de script de shell, asigné la palabra clave rdp, la configuré en "parámetro requerido" y configuré el script en:

open rdp://{query}

Esto me permite invocar a Alfred y escribir rdp {tab} servername {return} para abrir una sesión de Conexión a Escritorio remoto en el servidor remoto.

billc
fuente
0

El script anterior no funciona con el último "Escritorio remoto de Microsoft". Hacer referencia a la aplicación con una variable fue problemático, así que codifiqué la ruta (que es diferente del ejemplo original). También necesitaba eliminar el parámetro '--args' y comenzó a funcionar.

open -na /Applications/Microsoft\ Remote\ Desktop.app/Contents/MacOS/Microsoft\ Remote\ Desktop ${rdpTempRDP}
William Wallace
fuente
0

Por lo tanto, esto es principalmente para desarrollar otras respuestas y evitar hacks de secuencias de comandos:

(TL; DR: puede no haber sido cierto antes, pero el RDP de Microsoft ahora maneja archivos .rdp automáticamente con open)

Ya tengo muchos perfiles almacenados en la GUI RDP. (Por cierto, el plist es ~/Library/Containers/com.microsoft.rdc.mac/Data/Library/Preferences/com.microsoft.rdc.mac.plist, como siempre plutil -convert xml1 xyz.listpara la visualización humana)

(Referencia adicional: https://macmule.com/2013/10/22/how-to-create-a-microsoft-remote-desktop-8-connection/ )

Para que sea ordenable:

  1. Seleccione el perfil en la GUI
  2. Archivo -> Exportar crea el .rdparchivo, notando que no tendrá información de contraseña
  3. (Estudie el .rdp para ver cómo los parámetros corresponden a la sintaxis manual rdp: //)
  4. Simplemente opennombre.rdp de archivo desde la línea de comando
BaseZen
fuente
-1

Creo que sería igual de fácil hacer una plantilla para cada servidor al que desea conectarse, así como una plantilla con un campo de servidor vacío para esas conexiones "únicas en la vida". Simplemente los introduzco en una carpeta y los nombro o numero para obtener el orden correcto. Arrastre la carpeta al dock y tengo un lugar en el que puedo hacer clic para obtener una lista rápida de las plantillas rdp que puedo hacer clic para conectarme. O puedo Comando + Espacio y escribir el nombre del archivo y presionar enter para ejecutarlo. O puede escribir TYPEY TYPEY TYPEY TYPE e instalar todo tipo de aplicaciones de gestión.

Randy Travis
fuente