วิธีแก้ปัญหา
เช่นเดียวกับผู้ใช้รายอื่นฉันรู้สึกหงุดหงิดจากความรำคาญนี้ แต่ได้พบวิธีแก้ปัญหาที่น่าพึงพอใจ:
my_hostname='your-hostname-here'; for key in LocalHostName ComputerName HostName ; do sudo scutil --set $key $my_hostname; done
หลังจากรันคำสั่งนี้คุณสามารถตรวจสอบว่าสถานที่ทั้งหมดที่พวกเขาเก็บชื่อโฮสต์นั้นเหมือนกันด้วยซับในแบบนี้:
for key in LocalHostName ComputerName HostName ; do sudo scutil --get $key; done
ถ้า Macbook พร้อมเปลี่ยนชื่อทันทีComputerName
หลังมีคำต่อท้ายที่คุณอาจจะสามารถWake for Network Access
ทำให้มันหยุดโดยการปิด
System Preferences→Energy Saver→Wake for Wi-Fi network access → Unchecked
เมื่อปิดให้เปลี่ยนชื่อเครื่องของคุณโดยใช้คำสั่งด้านบนเพื่อเสร็จสิ้น คุณอาจลองบังคับComputerName
กลับโดยใช้การSystem Preferences→Sharing→Computer Name
ตั้งค่าฟิลด์ข้อความ
หากวิธีนี้ไม่ได้ผลให้ลองล้างแคช mDNS ของคุณ :
# El Capitan (10.11) and later
# check if you have dscacheutil command with: which dscacheutil
sudo dscacheutil -flushcache
# Yosemite (10.10) and ealier
# check if you have discoveryutil command with: which discoveryutil
sudo discoveryutil mdnsflushcache
sudo discoveryutil mdnsrestartquestions
sudo discoveryutil mdnsrestartregistrations
sudo discoveryutil udnsflushcache
sudo discoveryutil udnsrestartquestions
หลังจากล้างแคช mDNS แล้วให้ลองเปลี่ยนชื่อเครื่องของคุณใหม่โดยใช้คำสั่งด้านบน
หากยังไม่ได้ผลให้ลองฆ่าmDNSResponder
บริการ:
sudo killall -HUP mDNSResponder
จากนั้นลองอีกครั้งเพื่อรีเซ็ตชื่อคอมพิวเตอร์ของคุณโดยใช้scutil
คำสั่งด้านบน
หากคุณพบว่าไม่มีสิ่งใดที่จะทำสิ่งใดได้ดีมีวิธีแก้ไขปัญหาอื่นที่รายงานซึ่งรวมถึง:
- ให้แน่ใจว่าคุณมีการเชื่อมต่อกับเครือข่ายท้องถิ่นเดียวเท่านั้น
ปิด Bonjour แล้วเปิดใหม่
# Yosemite (10.10) (and other versions with discoveryd?)
# Check for discoveryd with: ps auxww | grep -i discoveryd
sudo killall discoveryd
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.discoveryd.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.discoveryd.plist
# Mac OS versions without discoveryd
# Check for mDNSResponder with: ps auxww | grep -i mDNSResponder
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
ปิดและรีเซ็ตฮาร์ดแวร์เครือข่ายทั้งหมด
การอภิปรายปัญหา
จากประสบการณ์ของฉันการตั้งชื่อโฮสต์ด้วยวิธีนี้หรือผ่านมาตรฐานSystem Preferences→Sharing→Computer Name
จะใช้เวลาไม่นาน โดยปกติแล้วจะเป็น <24 ชั่วโมง แต่บางครั้งการComputerName
เปลี่ยนแปลงที่สม่ำเสมอแม้จะมีตัวเลข(N)
ต่อท้ายในวงเล็บ ฉันสังเกตว่าหมายเลขนี้ถูกตั้งค่าเป็นทันที(4)
หรือ(5)
ไม่นานหลังจากใช้scutil --set
คำสั่งด้านบน
สาเหตุของพฤติกรรมนี้เกิดจากรหัส daemon บางตัวที่ทำงานใน Mac OS ซึ่งพยายามเพิ่มคำต่อท้ายที่มีหมายเลข(N)
ทุกครั้งที่พบชื่อโฮสต์เดียวกันบนเครือข่าย ในการทดสอบทั้งหมดของฉันชื่อโฮสต์ที่ฉันเลือกไม่เคยใช้มาก่อนบนเครือข่ายและไม่เคยใช้กับอุปกรณ์บลูทู ธ ใด ๆ เช่นกัน
สาเหตุที่แท้จริงของ "ตัวกระตุ้น" ของพฤติกรรมนี้ไม่เป็นที่รู้จักและไม่ได้ตรวจสอบ กล่าวคือ: ผ่านการวิจัยทั้งหมดของฉันออนไลน์และการทดสอบผมยังไม่ได้รับสามารถที่จะตรวจสอบอย่างแน่นอนทำไม Mac OS ตัดสินใจว่าชื่อที่มีอยู่แล้วในการใช้งานเมื่อมันได้อย่างชัดเจนคือไม่ได้และไม่เคยได้รับ
ทฤษฏีของฉันคือสิ่งที่mDNS
รู้จักกันในนามBonjour
( Avahi
สำหรับผู้ใช้ Linux หรือผู้ใช้Zero-conf
ระบบเครือข่ายไปยัง Windows) อาจถูกตำหนิได้บางส่วน อย่างไรก็ตามชื่อโฮสต์ก่อนหน้าของ Macbook หรืออุปกรณ์ Apple จะคงอยู่ในตำแหน่งmDNS
เดิมหรืออาจเป็นข้อมูลARP
ตาราง + ชื่อโฮสต์บางรูปแบบที่ค้นพบและจัดเก็บโดยอุปกรณ์ Macbook หรือ Apple นี่อาจเป็นสภาพการแข่งขันบางอย่าง อย่างใดรายการที่ถูกมองว่าเป็นที่ซ้ำกันและก่อให้เกิดพฤติกรรมการเปลี่ยนชื่อต่อท้าย Mac OS
ชื่อโฮสต์ที่ต่อท้ายตัวเลขจะปรากฏให้เห็นเมื่อใช้ยูทิลิตีDNS Service Discoveryของ Apple ที่ให้มาdns-sd
:
ตัวอย่างเช่นการใช้ชื่อโฮสต์my-mbp-hostname
อาจปรากฏขึ้นเช่นเดียวกับรายการต่อไปนี้
dns-sd -Z _ssh._tcp
; To direct clients to browse a different domain, substitute that domain in place of '@'
lb._dns-sd._udp PTR @
; In the list of services below, the SRV records will typically reference dot-local Multicast DNS names.
; When transferring this zone file data to your unicast DNS server, you'll need to replace those dot-local
; names with the correct fully-qualified (unicast) domain name of the target host offering the service.
_ssh._tcp PTR my-mbp-hostname\032(5)._ssh._tcp
my-mbp-hostname\032(5)._ssh._tcp SRV 0 0 22 my-mbp-hostname.local. ; Replace with unicast FQDN of target host
my-mbp-hostname\032(5)._ssh._tcp TXT ""
[...SNIP...]
[...OTHER SSH HOSTS HERE...]
[...SNIP...]
ทฤษฎีของสาเหตุที่แท้จริงนั้นไม่ได้รับการยืนยันเนื่องจากเป็นการยากที่จะค้นหาและสังเกตสิ่งที่เกิดขึ้นจริงโดยไม่ต้องเข้าถึงสถานะ Mac OS ภายในและเครื่องมือการดีบัก Apple OS ระดับต่ำ ปฏิสัมพันธ์ระหว่างmdnsd
, mDNSResponder
และmDNSResponderHelper
กับบริการอื่น ๆ Mac OS หรือภูต Avahi แม้อื่นในเครือข่ายจะไม่ได้รับเอกสารที่ดีหรือที่สังเกตได้อย่างง่ายดาย สถานะปัจจุบันของบางรูปแบบของการค้นพบเครือข่ายสามารถมองผ่านdns-sd
และหรือบางทีอาจจะarp -a
arp -a -n
ทฤษฎีหรือสถานที่อื่นที่อาจมีการจัดเก็บข้อมูลชื่อโฮสต์นี้อาจเป็น:
- ชื่ออุปกรณ์บลูทู ธ ยังคงอยู่โดยระบบปฏิบัติการอยู่ที่ไหนสักแห่ง
- ข้อมูล SMB (แชร์ไฟล์ windows) ถูกแคชจากเครือข่ายเป็นระยะโดย
smbd
( /System/Library/LaunchDaemons/com.apple.smbd.plist
)
- ข้อมูลการแชร์ AFP ถูกแคชจากเครือข่าย (หรืออาจเป็นด้วย
smbd
)
mDNS
/ Avahi
reflector (หรือประเภทอื่น ๆ ที่ออกอากาศของ Bonjour / zero-conf แพ็กเก็ตบนเครือข่ายโดยเราเตอร์หรืออุปกรณ์อื่น ๆ )?
- อาจถูกแคชโดย
mDNSResponder
หรือmdnsd
( /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
)
โซลูชัน (ตัวยึด)
ตั้งแต่วันที่ 6 ตุลาคม 2017 ยังไม่มีวิธีแก้ปัญหาเต็มรูปแบบจาก Apple หรือวิธีการแก้ไขเพื่อป้องกันไม่ให้เกิดปัญหาซ้ำอีก ฉันขอแนะนำให้ยื่นรายงานข้อผิดพลาดกับ Apple เพื่ออธิบายปัญหานี้ นอกจากนี้คุณยังอาจต้องการที่จะติดต่อฝ่ายสนับสนุนของแอปเปิ้ลของลูกค้า
ยิ่งคนที่ส่งเสียงรบกวนเกี่ยวกับปัญหาที่น่ารำคาญนี้ยิ่งผู้จัดการผลิตภัณฑ์แอปเปิ้ลเร็วขึ้นจะจัดลำดับความสำคัญดังนั้นวิศวกรจะสามารถแก้ไขได้
การตรวจแก้จุดบกพร่อง / อนาคตของการสืบสวน
นี้MacRumors ฟอรั่มการอภิปรายมีข้อมูลที่เป็นประโยชน์เช่นเดียวกับการเพิ่มทฤษฎีที่Wake for Wi-Fi Network Access
และปลุก / อุปกรณ์การนอนหลับมีสิ่งที่จะทำอย่างไรกับปัญหานี้ ทฤษฎีอื่น ๆ ที่นำเสนอเกี่ยวข้องกับการใช้อะแดปเตอร์เครือข่ายหลายตัว (เช่น: WiFi + Thunderbolt Ethernet) เราเตอร์ที่มี Access Point หลายตัวที่โฆษณาในหลายย่านเช่นบน802.11 b/g/n
(2.4GHz) หรือ802.11 a/ac
(5GHz) การรวมกันเหล่านี้อาจทำให้รุ่น "โกสต์" ของอุปกรณ์ Apple แสดงขึ้นบนเครือข่ายเป็นการชั่วคราวทำให้เกิดพฤติกรรมการเปลี่ยนชื่อ
มีไม่มีเส้นล็อกที่มีประโยชน์ในการ/var/log/system.log
ที่ปรากฏที่เกี่ยวข้องกับพฤติกรรมการเปลี่ยนชื่อนี้ถูกเรียก คาดคะเนmDNSResponder
สามารถกำหนดค่าให้อยู่ในระดับที่สูงขึ้นเข้าสู่ระบบ:
- ข้อผิดพลาด - ข้อความผิดพลาด
- คำเตือน - การดำเนินการที่เริ่มโดยลูกค้า
- ประกาศ - การทำงานของพร็อกซีหลับ
- ข้อมูล - ข้อความที่ให้ข้อมูล
วิธีตั้งค่าระดับการดีบักเหล่านี้นอกเหนือจากไฟล์ที่ไม่มีอยู่/Library/Preferences/com.apple.mDNSResponder.plist
อาจไม่ชัดเจน ฉันไม่ได้มีตัวอย่างการตั้งค่า plist กับการใช้งานดังนั้นผมจึงไม่สามารถที่จะได้รับข้อมูลการเข้าสู่ระบบใด ๆ mDNSResponder
เป็นพิเศษจาก
เครื่องมือเช่นWiresharkอาจมีประโยชน์ในการแสดงmDNS
แพ็กเก็ตที่กำลังออกอากาศในเครือข่ายพร้อมกับข้อมูลแพ็คเก็ต ARP อื่น ๆ ที่เกี่ยวข้องที่อาจเป็นไปได้ในการรับส่งข้อมูลอื่น ๆ
บน Mac OS เครื่องมืออื่น ๆ เช่นdscacheutil
อาจมีอยู่เพื่อดูข้อมูลนี้ เอกสารไม่ชัดเจนหรือชัดเจนว่าจะดูแคชที่ชัดเจนของข้อมูลนี้ซึ่งใช้โดยรหัสการเปลี่ยนชื่อโฮสต์ได้อย่างไร เมื่อฉันทดสอบยูทิลิตี้นี้มันไม่ได้สร้างผลลัพธ์ที่มีประโยชน์ใด ๆ ยกเว้นเมื่อใช้โหมดการสืบค้นสำหรับชื่อโฮสต์ที่แน่นอน (IP ถูกขัดจังหวะเพื่อความเป็นส่วนตัว):
sudo dscacheutil -cachedump -entries host
Unable to get details from the cache node
sudo dscacheutil -cachedump
Unable to get details from the cache node
dscacheutil -cachedump
Unable to get details from the cache node
dscacheutil -cachedump -entries host
Unable to get details from the cache node
dscacheutil -q host -a name my-mbp-hostname.local
name: my-mbp-hostname.local
ipv6_address: fe80:4::1a:1234:abcd:ef01
ipv6_address: 2601:280:1b00:1234:567:abcd:ef01:1234
name: my-mbp-hostname.local
ip_address: 192.168.1.123