Comment changer le partage d'écran par défaut / le numéro de port VNC sur Mac OS X?

Réponses:

16

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
Greg Canty
la source
Si vous êtes toujours là - une fois que vous avez fait cela, existe-t-il un moyen comparable d'obtenir que l'application de partage d'écran Mac intégrée se connecte à ce port, ou êtes-vous bloqué à l'aide d'applications vnc tierces qui vous permettent de spécifier le Port?
Jim Miller,
2
Réponse à ci-dessus: dans "Se connecter au serveur ...", spécifiez vnc: //votreserveur.com: 54321 (suivant l'exemple précédent concernant le numéro de port)
Jim Miller
Si cela fonctionne (je ne peux pas vérifier avant ce soir), vous méritez beaucoup plus de votes positifs.
PaulSkinner
1
Pour confirmer, oui, vous devrez le faire après chaque mise à jour du système d'exploitation (y compris les mises à jour incrémentielles).
PaulSkinner
1
Pour ajouter une note à cela, la nouvelle fonctionnalité «rootless» d'OS X 10.11 El Capitan signifie qu'il n'est plus possible d'enregistrer ce fichier particulier sans désactiver la fonctionnalité rootless, ce qui n'est pas recommandé. Quelqu'un connaît une solution de contournement sans désactiver rootless?
PaulSkinner
5

Je peux confirmer après avoir trouvé ce fil via Google que l'édition /etc/servicespour 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.

MichaelM
la source
Cette réponse peut maintenant être la solution à utiliser avec El Capitan 10.11.
PaulSkinner
Pour confirmer, c'est probablement la meilleure solution pour El Capitan 10.11 sans désactiver rootless.
PaulSkinner
Cela a également fonctionné pour le partage de fichiers (smb)! J'ai changé le port pour "Microsoft-DS"
Wowfunhappy
@PaulSkinner Est-ce que rootless ne protège pas tout dans / etc? (Je l'ai désactivé donc je ne sais pas)
Wowfunhappy
@Wowfunhappy étonnamment, non.
PaulSkinner
3

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:

  • Utiliser un autre logiciel serveur VNC
  • Utilisez un tunnel ssh pour rediriger le trafic de votre port personnalisé vers 5900
  • Configurez le mappage de port dans votre routeur pour prendre le trafic entrant sur un autre port pour aller au port 5900 sur votre Mac.
Doug Harris
la source
Juste pour être complet: certains suggèrent que changer les ports /etc/Servicespourrait 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 .)
Arjan
1
Notez la réponse de Greg Canty - elle peut être modifiée sur les versions OS X après Snow Leopard. Cette réponse a été écrite à l'origine avant la sortie d'OS X Lion.
Doug Harris
1

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 [email protected].
#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
Volonté
la source
Lorsque j'ai essayé d'accéder au lien - j'ai eu l'erreur Ce serveur n'a pas pu prouver qu'il s'agit de getsome.homeftp.net; son certificat de sécurité n'est pas approuvé par le système d'exploitation de votre ordinateur. Cela peut être dû à une mauvaise configuration ou à un pirate interceptant votre connexion.
Prasanna
Désolé pour ce Mureinik. Code affiché au lieu d'un lien.
Will
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 /Systemet 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 .

Pas à pas

  1. Activer le partage d'écran dans les préférences système
  2. Exécuter

    sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.screensharing.plist
    
  3. Exécuter

    sudo cp /System/Library/LaunchDaemons/com.apple.screensharing.plist /Library/LaunchDaemons/com.apple.screensharing.plist
    
  4. 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>
    
  5. Créez /Library/LaunchDaemons/com.apple.screensharing.launcher.plistavec 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>
    
  6. 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é.

Mathieu H.
la source