답변:
실제로 Mac OS 10.7 Lion 및 10.8 Mountain Lion에서 Apple VNC 서버의 기본 포트를 전환 할 수 있습니다 . 포트를 변경하려면 서버의 plist 파일을 편집해야합니다 /System/Library/LaunchDaemons/com.apple.screensharing.plist
(이 파일은 10.7 Lion 이전의 시스템에는 존재하지 않습니다).
파일을 편집하려면 루트 (sudo) 권한이 필요합니다. 터미널에서 vi 또는 vim에 익숙한 경우 다음을 입력 할 수 있습니다.
sudo vim /System/Library/LaunchDaemons/com.apple.screensharing.plist
또는 그렇지 않은 경우 nano를 사용하는 것이 좋습니다 .
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 서버의 청취 포트가 변경 된다는 것을 확인할 수 있습니다 .
파일을 편집하고 재부팅했습니다 (일반적으로 서비스를 다시 시작하거나 런칭 데몬을 언로드하려고 시도했지만 다른 문제가 있었고 귀찮게하지 않았습니다). 내 iPad의 iTeleport는 5900에서 연결하지 못했고 선택한 높은 특권 포트에서 성공했습니다.
이것은에서 다양한 포럼에서 논의 된 apple.com 과에 macosxhints.com . 짧은 대답은 "변경할 수 없습니다"입니다.
답변이 길수록 세 가지 가능성이 있습니다.
이 스레드에서 Greg가 제공 한 정보를 기반으로 시스템의 VNC 수신 포트 변경 프로세스를 자동화하는 bash 스크립트를 작성했습니다. 내 테스트에서 잘 작동합니다. 누구든지 문제가 있으면 알려주세요.
#!/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
.
불행히도 다른 레이블을 할당하면 화면 공유 에이전트가 제대로 작동하지 않습니다. 즉, 데몬은 동일한 이름을 사용하여 원본을 "그림자"해야합니다. 재부팅시 시스템이 원본을로드 /System
하고에서 수정 된 버전을 무시 하기 때문에 자체 문제가 발생합니다 /Library
.
해결책은 LaunchDaemon을 비활성화하고 수정 된 LaunchDaemon을 강제로로드하는 "런처"데몬을 사용하는 것입니다. 그러나 여전히 기본 설정을 통해 화면 공유를 활성화하지 않도록주의해야 합니다 . 그렇지 않으면 관찰 전용 모드로 종료됩니다 .
실행
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
그런 다음 화면 공유 권한이 올바르게 프로비저닝되고 기본 데몬이 자동으로로드되지 않으며 런처가 사용자 정의 된 데몬을 강제로 시작합니다.