มีวิธีการเปลี่ยนจากค่าเริ่มต้น5900
เป็นพอร์ตอื่นหรือไม่?
มีวิธีการเปลี่ยนจากค่าเริ่มต้น5900
เป็นพอร์ตอื่นหรือไม่?
คำตอบ:
คุณสามารถสลับพอร์ตเริ่มต้นสำหรับเซิร์ฟเวอร์ VNC ของ Apple ใน Mac OS 10.7 Lion และ 10.8 Mountain Lion ในการเปลี่ยนพอร์ตคุณต้องแก้ไขไฟล์ plist ของเซิร์ฟเวอร์/System/Library/LaunchDaemons/com.apple.screensharing.plist
(ไฟล์นี้ไม่มีอยู่ในระบบก่อนหน้า 10.7 Lion)
การแก้ไขไฟล์ต้องใช้สิทธิ์รูท (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
ฉันสามารถยืนยันหลังจากค้นหาหัวข้อนี้ผ่านทาง Google ว่าการแก้ไข/etc/services
สำหรับพอร์ต "rfb" จะเปลี่ยนพอร์ตการฟังของเซิร์ฟเวอร์ VNC ที่รวมอยู่
ฉันแก้ไขไฟล์และรีบูตเครื่อง (โดยปกติฉันจะลองรีสตาร์ทบริการหรือยกเลิกการโหลด launchdeamon แต่ฉันมีปัญหาอื่น ๆ เช่นกันและไม่ต้องกังวล) iTeleport บน iPad ของฉันล้มเหลวในการเชื่อมต่อกับ 5900 และประสบความสำเร็จในพอร์ตที่ไม่มีสิทธิสูงที่ฉันเลือก
นี้ได้รับการกล่าวถึงในเว็บบอร์ดต่างๆที่apple.comและmacosxhints.com คำตอบสั้น ๆ คือ "คุณไม่สามารถเปลี่ยนได้"
คำตอบอีกต่อไปจะแนะนำวิธีรอบ ๆ - ความเป็นไปได้สามประการ
/etc/Services
อาจเป็นการหลอกลวง ฉันลองแล้ว (ฉันรีบูตเครื่อง Mac หลังจากเปลี่ยน) จะไม่มีประโยชน์ และให้ความคิดมากกว่านี้อาจเป็นความคิดที่ดีที่จะยุ่งกับไฟล์นั้นเนื่องจากแอปพลิเคชันอื่นอาจใช้เพื่อรับหมายเลขพอร์ตที่รู้จักกันดีหากพวกเขาต้องการเชื่อมต่อกับบุคคลที่สามโดยใช้โปรโตคอลเฉพาะ (เช่นเดียวกับ: เปลี่ยนพอร์ต SSH ในแฟ้มที่อาจดูเหมือนจะทำงาน แต่เป็นความคิดที่ไม่ดี .)
จากข้อมูลที่ Greg จัดเตรียมไว้ในเธรดนี้ฉันได้เขียนสคริปต์ทุบตีที่จะทำให้กระบวนการเปลี่ยนพอร์ตการฟัง VNC ของระบบของคุณเป็นแบบอัตโนมัติ ทำงานได้ดีในการทดสอบของฉัน แจ้งให้เราทราบหากใครมีปัญหาใด ๆ กับมัน
#!/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
การเปลี่ยนพอร์ตเริ่มต้นและ / หรือมีผลผูกพันอยู่ได้โดยไม่ต้องปิดการใช้งานระบบป้องกันความสมบูรณ์ของคุณจะต้องสร้าง LaunchDaemon /Library
ใหม่
น่าเสียดายที่ตัวแทนการแชร์หน้าจอจะทำงานไม่ถูกต้องเมื่อกำหนดป้ายกำกับอื่น นั่นหมายความว่า daemon จะต้อง "แชโดว์" ต้นฉบับโดยใช้ชื่อเดียวกัน ที่ทำให้มันเป็นปัญหาของตัวเองเพราะในการรีบูตระบบจะโหลดเดิมและไม่สนใจรุ่นที่ปรับเปลี่ยนใน/System
/Library
วิธีแก้ไขคือปิดการใช้งาน LaunchDaemon และใช้ "launcher" daemon ที่บังคับให้โหลด LaunchDaemon ที่แก้ไขแล้ว อย่างไรก็ตามการดูแลจะต้องนำไปใช้งานร่วมกันหน้าจอยังคงเปิดใช้งานผ่านการตั้งค่า orelse มันจะ endup ในสังเกตเฉพาะโหมด
ปฏิบัติ
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.screensharing.plist
ปฏิบัติ
sudo cp /System/Library/LaunchDaemons/com.apple.screensharing.plist /Library/LaunchDaemons/com.apple.screensharing.plist
ใน/Library/LaunchDaemons/com.apple.screensharing.plist
แก้ไขส่วนซ็อกเก็ตเพื่อดูวิธีที่คุณต้องการ ตัวอย่างเช่นการฟังlocalhost:5901
:
<key>Sockets</key>
<dict>
<key>Listener</key>
<dict>
<key>SockNodeName</key>
<string>localhost</string>
<key>SockServiceName</key>
<string>5901</string>
</dict>
</dict>
สร้าง/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>
ปฏิบัติ
sudo launchctl load -w /Library/LaunchDaemons/com.apple.screensharing.launcher.plist
หลังจากนี้สิทธิ์การแชร์หน้าจอจะได้รับการจัดสรรอย่างถูกต้อง daemon เริ่มต้นจะไม่โหลดโดยอัตโนมัติและตัวเรียกใช้ของเราจะบังคับให้เริ่ม daemon ที่กำหนดเองของเรา