Respuestas:
En realidad, puede cambiar el puerto predeterminado para el servidor VNC de Apple en Mac OS 10.7 Lion y 10.8 Mountain Lion. Para cambiar el puerto, debe editar el archivo plist del servidor /System/Library/LaunchDaemons/com.apple.screensharing.plist
(este archivo no existe en los sistemas anteriores a 10.7 Lion).
La edición del archivo requiere privilegios de root (sudo). En la terminal, si está familiarizado con vi o vim , puede escribir:
sudo vim /System/Library/LaunchDaemons/com.apple.screensharing.plist
o si no lo eres, será mejor que uses nano :
sudo nano /System/Library/LaunchDaemons/com.apple.screensharing.plist
Ahora, todo lo que tiene que hacer es cambiar la línea 34 (la que se lee <string>vnc-server</string>
) a <string>nnnn</string>
donde nnnn es el número de puerto que desea usar. Sé que parece extraño cambiar un nombre como "vnc-server" a un número, pero esa es la forma en que debes hacerlo. He incluido un ejemplo a continuación en caso de que algo no esté claro.
Para cambiar el puerto predeterminado a 54321, editaría el archivo plist para que se vea así:
...
<key>Sockets</key>
<dict>
<key>Listener</key>
<dict>
<key>Bonjour</key>
<string>rfb</string>
<key>SockServiceName</key>
<string>54321</string> <!-- Change this line! -->
</dict>
</dict>
<key>UserName</key>
<string>root</string>
<key>SHAuthorizationRight</key>
<string>system.preferences</string>
</dict>
</plist>
Después de guardar el archivo, para que el cambio surta efecto, apague Compartir pantalla y vuelva a encenderlo en el panel de preferencias Compartir, o alternativamente descargue y vuelva a cargar el servicio con estos comandos:
sudo launchctl unload /System/Library/LaunchDaemons/com.apple.screensharing.plist
sudo launchctl load /System/Library/LaunchDaemons/com.apple.screensharing.plist
Después de encontrar este hilo a través de Google, puedo confirmar que la edición /etc/services
de los puertos "rfb" cambiará los puertos de escucha del servidor VNC incluido.
Edité el archivo y reinicié (por lo general, intentaba reiniciar los servicios o descargar el launchdeamon, pero también tenía otros problemas y no me molesté). iTeleport en mi iPad no pudo conectarse en 5900 y tuvo éxito en el puerto sin privilegios que elegí.
Esto se ha discutido en varios foros en apple.com y en macosxhints.com . La respuesta corta es "no se puede cambiar".
Las respuestas más largas sugieren formas de evitarlo: tres posibilidades:
/etc/Services
podría ser el truco. Lo intenté (incluso reinicié mi Mac después de cambiarlo) fue en vano. Y reflexionando un poco más, incluso podría ser una mala idea meterse con ese archivo, ya que otras aplicaciones también podrían usarlo para obtener el número de puerto conocido si quieren conectarse a un tercero utilizando un protocolo específico. (Como: cambiar el puerto SSH en ese archivo puede parecer que funciona, pero es una mala idea .)
Basado en la información provista por Greg en este hilo, escribí un script bash que automatizará el proceso de cambiar el puerto de escucha VNC de su sistema. Funciona bien en mis pruebas. Avíseme si alguien tiene algún problema con eso.
#!/bin/sh
#Created by Will D. on 04/10/2015
#If you find it useful (or have suggestions, feedback, etc.), shoot me an email at throwapenny@me.com.
#Requires Mac OS 10.7.x or later (tested up to and including 10.10.3)
#02/02/2016 - Updated Script to alert for SIP status
#Setting Static Variables
sourcepath="/System/Library/LaunchDaemons/"
filename="com.apple.screensharing.plist"
port=`less $sourcepath$filename | awk 'f{print $1;f=0} /SockServiceName/ {f=1}' | awk -F "<|>" '{print $3}'`
os_version=`sw_vers -productVersion`
os_version_aug=`sw_vers -productVersion | awk -F "." '{print $1$2}'`
sip_status=`csrutil status | awk '{print $5}'`
#Colors
nc='\033[0m'
light_red='\033[1;31m' #Light Red
yellow='\033[1;33m' #Yellow
clear
#Check the script is being run by root
if [ "$EUID" -ne 0 ];then
printf "${light_red}This Script Must Run As Root${nc}\n"
exit 0
fi
clear
printf ${yellow};echo "---------------------------------------------------------------"
echo "--- ---"
echo "--- This Script Will Change Your Systems VNC Listening Port ---"
echo "--- Hit Ctrl + c to exit at anytime ---"
echo "--- ---"
echo "---------------------------------------------------------------";printf "${nc}\n"
#Check System Version
sleep 1
if [ "${os_version_aug}" -lt "107" ]; then
echo ""
echo "System OS Must Be Greater Than 10.7.x. Aborting Script."
exit 0
else
echo ""
echo "System OS Version is" $os_version
echo "OS Requirement Met √"
echo "--------"
fi
if [ "${os_version_aug}" == "1011" ]; then
if [ "${sip_status}" == "enabled." ]; then
echo ""
printf "${light_red}••• System Integrity Protection is Enabled •••${nc}\n"
echo ""
echo "This script modifies /System/Library/LaunchDaemons/com.apple.screensharing.plist"
echo "Please Disable System Integrity Protection Before Running"
echo ""
exit 0
fi
fi
#Give Feedback on Current Port
sleep 1
if [ "${port}" == "vnc-server" ]; then
echo ""
echo "The System's VNC Port is Currently"
echo "Set to the System Default Port of 5900."
echo "--------"
elif [ "${port}" != "vnc-server" ]; then
echo ""
echo "The System's VNC Port is Currently"
echo "Set to a Non-default Port of" $port"."
echo "--------"
fi
#Updating Port
echo ""
printf "What Port Would You Like VNC to Listen On? "
read newport
echo ""
echo "The Following Action Requires an Admin Password."
echo "Note: Your Password Will Be Visible When You Type It"
echo ""
printf "Admin Password? "
read admin_pass
sleep 1
echo ""
echo "Created" $filename".bak."
sleep 1
echo ""
echo "Updating VNC Port to" $newport"..."
echo $admin_pass | sudo -S sed -i.bak -e "s|$port|$newport|g" $sourcepath$filename
sleep 1
echo "Done"
echo ""
sleep 1
#Restarting screensharing process
echo "Restarting Screen Sharing Service..."
sudo launchctl unload /System/Library/LaunchDaemons/com.apple.screensharing.plist
sudo launchctl load /System/Library/LaunchDaemons/com.apple.screensharing.plist
echo "Done"
sleep 1
echo ""
echo "Your System's VNC Port is Now Set to" $newport"."
echo ""
echo "Update Complete. All Done."
if [ "${os_version_aug}" == "1011" ]; then
echo ""
echo "Since you're running El Capitan"
echo "be sure to re-enable System Integrity Protection"
exit 0
fi
exit 0
Para cambiar el puerto predeterminado y / o la dirección de enlace sin deshabilitar la Protección de integridad del sistema , debe crear un nuevo LaunchDaemon en /Library
.
Lamentablemente, el agente para compartir pantalla no funcionará correctamente cuando se le asigne una etiqueta diferente. Eso significa que el demonio tiene que estar "sombreando" el original usando el mismo nombre. Eso causa sus propios problemas porque al reiniciar, el sistema cargará el original /System
e ignorará la versión modificada /Library
.
La solución es deshabilitar el LaunchDaemon y usar un demonio "launcher" que cargará a la fuerza el LaunchDaemon modificado. Sin embargo, se debe tener cuidado para seguir activando Compartir pantalla a través de las preferencias o, de lo contrario, terminará en modo de observación solamente .
Ejecutar
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.screensharing.plist
Ejecutar
sudo cp /System/Library/LaunchDaemons/com.apple.screensharing.plist /Library/LaunchDaemons/com.apple.screensharing.plist
En /Library/LaunchDaemons/com.apple.screensharing.plist
, edite la sección Sockets para ver cómo lo desea. Por ejemplo escuchando en localhost:5901
:
<key>Sockets</key>
<dict>
<key>Listener</key>
<dict>
<key>SockNodeName</key>
<string>localhost</string>
<key>SockServiceName</key>
<string>5901</string>
</dict>
</dict>
Crea /Library/LaunchDaemons/com.apple.screensharing.launcher.plist
con el siguiente contenido:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.apple.screensharing.launcher</string>
<key>LaunchOnlyOnce</key>
<true/>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<false/>
<key>ProgramArguments</key>
<array>
<string>/bin/launchctl</string>
<string>load</string>
<string>-F</string>
<string>/Library/LaunchDaemons/com.apple.screensharing.plist</string>
</array>
</dict>
</plist>
Ejecutar
sudo launchctl load -w /Library/LaunchDaemons/com.apple.screensharing.launcher.plist
Después de esto, los derechos de Compartir pantalla se aprovisionarán correctamente, el demonio predeterminado no se cargará automáticamente y nuestro lanzador iniciará por la fuerza nuestro demonio personalizado.