如何更改 Mac OS X 上的默认屏幕共享/VNC 端口号?

如何更改 Mac OS X 上的默认屏幕共享/VNC 端口号?

有什么办法可以将其从默认端口更改5900为其他端口吗?

答案1

你实际上在 Mac OS 10.7 Lion 和 10.8 Mountain Lion 上切换 Apple VNC 服务器的默认端口。要更改端口,您需要编辑服务器的 plist 文件/System/Library/LaunchDaemons/com.apple.screensharing.plist(此文件在 10.7 Lion 之前的系统中不存在)。

编辑文件需要 root (sudo) 权限。在终端中,如果您熟悉 vi 或vim,您可以输入:

sudo vim /System/Library/LaunchDaemons/com.apple.screensharing.plist

如果你不是,你最好使用纳米

sudo nano /System/Library/LaunchDaemons/com.apple.screensharing.plist

现在,您所要做的就是将第 34 行(显示为 的行<string>vnc-server</string>)更改为<string>nnnn</string>nnnn 是您希望使用的端口号。我知道将“vnc-server”之类的名称更改为数字似乎很奇怪,但这就是您必须这样做的方式。我在下面提供了一个示例,以防万一有任何不清楚的地方。

要将默认端口更改为 54321,请编辑 plist 文件,如下所示:

...
<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>

保存文件后,为了使更改生效,请在共享偏好设置窗格中关闭屏幕共享然后重新打开,或者使用以下命令卸载并重新加载服务:

sudo launchctl unload /System/Library/LaunchDaemons/com.apple.screensharing.plist
sudo launchctl load /System/Library/LaunchDaemons/com.apple.screensharing.plist

答案2

通过 Google 找到此线程后,我可以确认,编辑/etc/services“rfb”端口将改变所包含的 VNC 服务器的监听端口。

我编辑了文件并重新启动(通常我会尝试重新启动服务或卸载 launchdeamon,但我还遇到了一些其他问题,所以没管)。然后,我的 iPad 上的 iTeleport 无法连接到 5900,但在我选择的高特权端口上连接成功。

答案3

这个问题已在多个论坛上讨论过apple.com以及macosxhints.com简短的回答是“你无法改变它”。

较长的答案提出了解决该问题的方法——三种可能性:

  • 使用备用 VNC 服务器软件
  • 使用 ssh 隧道将流量从自定义端口重定向到 5900
  • 在路由器中配置端口映射,以便将不同端口上的传入流量传输到 Mac 上的端口 5900。

答案4

更改默认端口和/或绑定地址而不禁用系统完整性保护,您需要在 中创建一个新的 LaunchDaemon /Library

不幸的是,当分配了不同的标签时,屏幕共享代理将无法正常工作。这意味着守护进程必须使用相同的名称“隐藏”原始版本。这会导致它自己的问题,因为在重新启动时,系统将加载原始版本/System并忽略修改后的版本/Library

解决方案是禁用 LaunchDaemon 并使用“启动器”守护程序,该守护程序将强制加载修改后的 LaunchDaemon。但是必须小心通过偏好设置激活屏幕共享,否则最终会导致仅观察模式

一步步

  1. 在系统偏好设置中激活屏幕共享
  2. 执行

    sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.screensharing.plist
    
  3. 执行

    sudo cp /System/Library/LaunchDaemons/com.apple.screensharing.plist /Library/LaunchDaemons/com.apple.screensharing.plist
    
  4. 在 中/Library/LaunchDaemons/com.apple.screensharing.plist,编辑 Sockets 部分以使其看起来符合您的要求。例如,监听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. /Library/LaunchDaemons/com.apple.screensharing.launcher.plist使用以下内容创建:

    <?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. 执行

    sudo launchctl load -w /Library/LaunchDaemons/com.apple.screensharing.launcher.plist
    

此后,屏幕共享权限将被正确配置,默认守护程序将不会自动加载,并且我们的启动器将强制启动我们自定义的守护程序。

相关内容