Réponses:
Vous pouvez réellement changer le port par défaut du serveur VNC d'Apple sur Mac OS 10.7 Lion et 10.8 Mountain Lion. Pour modifier le port, vous devez modifier le fichier plist du serveur /System/Library/LaunchDaemons/com.apple.screensharing.plist
(ce fichier n'existe pas dans les systèmes antérieurs à 10.7 Lion).
La modification du fichier nécessite des privilèges root (sudo). Dans le terminal, si vous connaissez vi ou vim , vous pouvez taper:
sudo vim /System/Library/LaunchDaemons/com.apple.screensharing.plist
ou si vous ne l'êtes pas, vous feriez mieux d'utiliser nano :
sudo nano /System/Library/LaunchDaemons/com.apple.screensharing.plist
Maintenant, tout ce que vous avez à faire est de changer la ligne 34 (celle qui lit <string>vnc-server</string>
) <string>nnnn</string>
où nnnn est le numéro de port que vous souhaitez utiliser. Je sais qu'il semble bizarre de changer un nom comme "vnc-server" en un nombre, mais c'est la façon dont vous devez le faire. J'ai inclus un exemple ci-dessous au cas où quelque chose ne serait pas clair.
Pour changer le port par défaut en 54321, vous devez modifier le fichier plist pour qu'il ressemble à ceci:
...
<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>
Après avoir enregistré le fichier, pour que la modification prenne effet, désactivez le partage d'écran, puis réactivez-le dans le volet des préférences de partage, ou bien déchargez et rechargez le service à l'aide de ces commandes:
sudo launchctl unload /System/Library/LaunchDaemons/com.apple.screensharing.plist
sudo launchctl load /System/Library/LaunchDaemons/com.apple.screensharing.plist
Je peux confirmer après avoir trouvé ce fil via Google que l'édition /etc/services
pour les ports "rfb" changera les ports d'écoute du serveur VNC inclus.
J'ai édité le fichier et redémarré (j'essayais généralement de redémarrer les services ou de décharger le lanceur de lancement, mais j'avais également d'autres problèmes et je n'ai pas pris la peine). iTeleport sur mon iPad n'a pas réussi à se connecter sur 5900 et a réussi sur le haut port non privilégié que j'ai choisi.
Cela a été discuté sur divers forums sur apple.com et sur macosxhints.com . La réponse courte est "vous ne pouvez pas le changer".
Les réponses plus longues suggèrent des solutions: trois possibilités:
/etc/Services
pourrait faire l'affaire. J'ai essayé cela (j'ai même redémarré mon Mac après l'avoir changé) en vain. Et en y réfléchissant davantage, il pourrait même être une mauvaise idée de jouer avec ce fichier, car d'autres applications peuvent également l'utiliser pour obtenir le numéro de port connu si elles veulent se connecter à un tiers en utilisant un protocole spécifique. (Comme: changer le port SSH dans ce fichier peut sembler fonctionner mais c'est une mauvaise idée .)
Sur la base des informations fournies par Greg dans ce fil, j'ai écrit un script bash qui automatisera le processus de modification du port d'écoute VNC de votre système. Fonctionne bien dans mes tests. Faites-moi savoir si quelqu'un a des problèmes avec cela.
#!/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
Pour modifier le port par défaut et / ou l'adresse de liaison sans désactiver la protection de l'intégrité du système , vous devez créer un nouveau LaunchDaemon dans /Library
.
Malheureusement, l'agent de partage d'écran ne fonctionnera pas correctement lorsqu'il est affecté à une étiquette différente. Cela signifie que le démon doit "observer" l'original en utilisant le même nom. Cela provoque ses propres problèmes car au redémarrage, le système chargera l'original dans /System
et ignorera la version modifiée dans /Library
.
La solution consiste à désactiver le LaunchDaemon et à utiliser un démon "lanceur" qui chargera de force le LaunchDaemon modifié. Cependant, il faut veiller à toujours activer le partage d'écran via les préférences, sinon il se terminera en mode d'observation uniquement .
Exécuter
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.screensharing.plist
Exécuter
sudo cp /System/Library/LaunchDaemons/com.apple.screensharing.plist /Library/LaunchDaemons/com.apple.screensharing.plist
Dans /Library/LaunchDaemons/com.apple.screensharing.plist
, modifiez la section Sockets pour voir comment vous le souhaitez. Par exemple en écoutant localhost:5901
:
<key>Sockets</key>
<dict>
<key>Listener</key>
<dict>
<key>SockNodeName</key>
<string>localhost</string>
<key>SockServiceName</key>
<string>5901</string>
</dict>
</dict>
Créez /Library/LaunchDaemons/com.apple.screensharing.launcher.plist
avec le contenu suivant:
<?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>
Exécuter
sudo launchctl load -w /Library/LaunchDaemons/com.apple.screensharing.launcher.plist
Après cela, les droits de partage d'écran seront correctement provisionnés, le démon par défaut ne se chargera pas automatiquement et notre lanceur démarrera de force notre démon personnalisé.