Làm cách nào để thay đổi chia sẻ màn hình / số cổng VNC mặc định trên Mac OS X?


Câu trả lời:


16

Bạn thực sự có thể chuyển đổi cổng mặc định cho máy chủ VNC của Apple trên Mac OS 10.7 Lion và 10.8 Mountain Lion. Để thay đổi cổng, bạn cần chỉnh sửa tệp plist của máy chủ /System/Library/LaunchDaemons/com.apple.screensharing.plist(tệp này không tồn tại trong các hệ thống trước 10.7 Lion).

Chỉnh sửa tập tin yêu cầu quyền root (sudo). Trong thiết bị đầu cuối, nếu bạn quen thuộc với vi hoặc vim , bạn có thể nhập:

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

hoặc nếu bạn không, bạn nên sử dụng nano :

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

Bây giờ, tất cả những gì bạn phải làm là thay đổi dòng 34 (dòng được đọc <string>vnc-server</string>) thành <string>nnnn</string>nnnn là số cổng bạn muốn sử dụng. Tôi biết có vẻ kỳ lạ khi thay đổi một tên như "vnc-server" thành một số, nhưng đó là cách bạn phải làm điều đó. Tôi đã bao gồm một ví dụ dưới đây trong trường hợp bất cứ điều gì không rõ ràng.

Để thay đổi cổng mặc định thành 54321, bạn sẽ chỉnh sửa tệp plist thành như sau:

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

Sau khi lưu tệp, để thay đổi có hiệu lực, hãy tắt Chia sẻ màn hình và sau đó bật lại trong ngăn tùy chọn Chia sẻ hoặc thay thế tải và tải lại dịch vụ bằng các lệnh sau:

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

Nếu bạn vẫn ở đó - một khi bạn đã thực hiện việc này, có một cách tương đương để ứng dụng chia sẻ màn hình Mac tích hợp để kết nối với cổng đó hoặc bạn bị kẹt khi sử dụng ứng dụng vnc của bên thứ ba cho phép bạn chỉ định Hải cảng?
Jim Miller

2
Trả lời ở trên: Trong "Kết nối với máy chủ ...", chỉ định vnc: //yourserver.com: 54321 (theo ví dụ số cổng tái lập trước đó)
Jim Miller

Nếu điều này hoạt động (tôi không thể kiểm tra cho đến tối nay), bạn xứng đáng nhận được nhiều sự ủng hộ hơn.
PaulSkinner

1
Để xác nhận, có, bạn sẽ cần phải làm điều này sau mỗi lần cập nhật hệ điều hành (bao gồm các bản cập nhật gia tăng).
PaulSkinner

1
Để thêm một lưu ý cho điều này, tính năng 'rootless' mới của OS X 10.11 El Capitan có nghĩa là không thể lưu tệp cụ thể này mà không vô hiệu hóa tính năng không root, không được khuyến nghị. Bất cứ ai cũng biết một cách giải quyết mà không vô hiệu hóa rootless?
PaulSkinner

5

Tôi có thể xác nhận sau khi tìm thấy chủ đề này thông qua Google rằng việc chỉnh sửa /etc/servicescác cổng "rfb" sẽ thay đổi các cổng nghe của máy chủ VNC đi kèm.

Tôi đã chỉnh sửa tệp và khởi động lại (thông thường tôi sẽ thử khởi động lại dịch vụ hoặc dỡ bỏ launchdeamon nhưng tôi cũng gặp một số vấn đề khác và không bận tâm). iTeleport trên iPad của tôi sau đó không thể kết nối trên 5900 và đã thành công trên cổng không có đặc quyền cao mà tôi đã chọn.


Câu trả lời này bây giờ có thể là giải pháp để sử dụng với El Capitan 10.11.
PaulSkinner

Để xác nhận, đây có lẽ là giải pháp tốt nhất cho El Capitan 10.11 mà không cần vô hiệu hóa rootless.
PaulSkinner

Điều này cũng làm việc cho Chia sẻ tệp (smb)! Tôi đã thay đổi cổng cho "Microsoft-DS"
Wowfunhappy

@PaulSkinner Không rootless bảo vệ mọi thứ trong / etc? (Tôi bị vô hiệu hóa nên tôi không biết)
Wowfunhappy

@Wowfunhappy tuyệt vời, không.
PaulSkinner

3

Điều này đã được thảo luận trên các diễn đàn khác nhau tại apple.com và trên macosxhints.com . Câu trả lời ngắn gọn là "bạn không thể thay đổi nó".

Các câu trả lời dài hơn gợi ý những cách xung quanh nó - ba khả năng:

  • Sử dụng phần mềm máy chủ VNC thay thế
  • Sử dụng đường hầm ssh để chuyển hướng lưu lượng truy cập từ cổng tùy chỉnh của bạn đến 5900
  • Định cấu hình ánh xạ cổng trong bộ định tuyến của bạn để có lưu lượng truy cập đến trên một cổng khác để chuyển đến cổng 5900 trên máy mac của bạn.

Chỉ vì mục đích hoàn chỉnh: một số gợi ý rằng việc thay đổi các cổng trong /etc/Servicescó thể thực hiện thủ thuật. Tôi đã thử điều đó (tôi thậm chí đã khởi động lại máy Mac của mình sau khi thay đổi nó) nhưng không có kết quả. Và suy nghĩ thêm, nó thậm chí có thể là một ý tưởng tồi để làm hỏng tập tin đó, vì các ứng dụng khác cũng có thể sử dụng nó để lấy số cổng nổi tiếng nếu họ muốn kết nối với một bên thứ ba bằng một giao thức cụ thể. (Giống như: thay đổi cổng SSH trong tệp đó có vẻ hoạt động nhưng là một ý tưởng tồi .)
Arjan

1
Lưu ý câu trả lời của Greg Canty - nó có thể được thay đổi trên các bản phát hành OS X sau Snow Leopard. Câu trả lời này ban đầu được viết trước khi OS X Lion được phát hành.
Doug Harris

1

Dựa trên thông tin được cung cấp bởi Greg trong chuỗi này, tôi đã viết một tập lệnh bash sẽ tự động hóa quá trình thay đổi cổng nghe VNC của hệ thống của bạn. Hoạt động tốt trong các thử nghiệm của tôi. Hãy cho tôi biết nếu có ai có bất kỳ vấn đề với nó.

#!/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

Khi tôi cố truy cập vào liên kết - tôi đã gặp lỗi Máy chủ này không thể chứng minh rằng đó là getome.homeftp.net; chứng chỉ bảo mật của nó không được hệ điều hành máy tính của bạn tin cậy. Điều này có thể do cấu hình sai hoặc kẻ tấn công chặn kết nối của bạn.
Prasanna

Xin lỗi về Mureinik đó. Mã được đăng thay vì một liên kết.
Sẽ

0

Để thay đổi cổng mặc định và / hoặc địa chỉ liên kết mà không tắt Bảo vệ toàn vẹn hệ thống , bạn cần tạo LaunchDaemon mới trong /Library.

Thật không may, tác nhân chia sẻ màn hình sẽ không hoạt động đúng khi được gán một nhãn khác. Điều đó có nghĩa là daemon phải "đánh bóng" bản gốc bằng cách sử dụng cùng tên. Điều đó gây ra sự cố riêng vì khi khởi động lại, hệ thống sẽ tải bản gốc vào /Systemvà bỏ qua phiên bản sửa đổi trong /Library.

Giải pháp là vô hiệu hóa LaunchDaemon và sử dụng trình nền "launcher" sẽ tải cưỡng bức LaunchDaemon đã sửa đổi. Tuy nhiên, cần thận trọng để vẫn kích hoạt Chia sẻ màn hình thông qua các tùy chọn hoặc nó sẽ kết thúc ở chế độ chỉ quan sát .

Từng bước một

  1. Kích hoạt chia sẻ màn hình trong Tùy chọn hệ thống
  2. Hành hình

    sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.screensharing.plist
    
  3. Hành hình

    sudo cp /System/Library/LaunchDaemons/com.apple.screensharing.plist /Library/LaunchDaemons/com.apple.screensharing.plist
    
  4. Trong /Library/LaunchDaemons/com.apple.screensharing.plist, chỉnh sửa phần Sockets để xem bạn muốn nó như thế nào. Ví dụ nghe trên 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. Tạo /Library/LaunchDaemons/com.apple.screensharing.launcher.plistvới nội dung sau:

    <?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. Hành hình

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

Sau này, quyền Chia sẻ màn hình sẽ được cung cấp đúng cách, trình nền mặc định sẽ không tự động tải và trình khởi chạy của chúng tôi sẽ bắt đầu trình nền tùy chỉnh của chúng tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.