如何阻止我的计算机名称自动错误地更改?


19

自从将2009 iMac升级到Mavericks之后,我经常收到一条消息,指出“该计算机上已经在使用您的计算机的名称” Foo”。名称已更改为“ Foo(2)”。随着相同的错误不断发生,结尾的数字将随着时间不断增加。

重命名计算机很简单,但是有什么方法可以防止将来发生这种情况?我有一台旧的Macbook Pro(运行Mountain Lion)也遇到了同样的问题,但是我2013年初运行Mavericks的MBP似乎没有受到此问题的困扰。


它说的名字实际上是一个空字符串吗?如果是的话,如果您更改计算机名称,它会怎么说?
0942v8653 2014年

不,这是我的计算机的名称(废话,我看到键入的文本已删除。毫无疑问,由于尖括号)。例如,如果我的计算机名为“ Foo”,则我的计算机将被命名为“ Foo(2)”。
Cleggy

我已经编辑了问题,以澄清未显示空字符串。
Cleggy

这可能是您遇到的相同问题。也可以尝试运行scutil --get ComputerName,并hostname在终端。(您可能还应该跟踪IP地址,以查看其是否更改)我确实认为这与您的路由器或DHCP有关,并且NetBIOS名称可能被缓存太长时间。
0942v8653 2014年

1
还是没有答案?在2011年末推出的MacBook Pro 17“上,OS X 10.10.4仍在发生这种情况。这可能与同时连接wi-fi和以太网有关,但是OS X没能解决的痛苦这一点上它自己。
布伦特浮士德

Answers:


5

解决方法

像其他用户一样,我对此烦恼不已,但发现了一种令人满意的解决方法:

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

出现此现象的原因是由于某些守护程序代码在Mac OS中运行,该守护程序代码每次在(N)网络上找到相同的主机名时都会尝试添加带数字的后缀。在我所有的测试中,我选择的主机名以前从未在网络上使用过,而且也从未用于任何蓝牙设备。

此行为的“触发”的真正原因是未知的且未经验证。就是说:通过我所有的在线研究和测试,我无法确切确定Mac OS为什么在显然没有使用该名称的情况下,决定使用该名称。

我的理论是,在某种程度上mDNS也被称为BonjourAvahiLinux用户,或者Zero-conf网络向Windows用户)可能是部分原因。不知何故,Macbook或Apple设备的先前主机名会保留在中mDNS,或者可能ARP是Macbook或Apple设备发现并存储的某种形式的表+主机名信息。这可能是某种比赛条件。该条目以某种方式被视为重复项,并触发Mac OS后缀重命名行为。

使用Apple提供的DNS服务发现实用程序时,带有数字后缀的主机名是可见的dns-sd

例如,使用hostname 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调试工具,很难找到并观察实际情况。之间的相互作用mdnsdmDNSResponder以及mDNSResponderHelper与其他Mac OS服务,或者在网络上甚至其他的avahi守护程序都有详细的记载或容易观察到。某些形式的网络发现的当前状态可以通过dns-sdarp -a或可以查看arp -a -n。可以存储此主机名信息的其他理论或潜在位置可能是:

  • 操作系统在某处保留了蓝牙设备名称
  • SMB(Windows文件共享)信息定期从网络缓存smbd/System/Library/LaunchDaemons/com.apple.smbd.plist
  • AFP共享从网络缓存的信息(大概也由smbd?)
  • mDNS/ Avahi反射器(或通过路由器或其他某些设备在网络上对Bonjour / zero-conf数据包进行的其他重播类型)?
    • 可以由mDNSRespondermdnsd/System/Library/LaunchDaemons/com.apple.mDNSResponder.plist)缓存

解决方案(占位符)

截至2017年10月6日,Apple仍未提供完整的解决方案或补救措施来防止此问题再次发生。我建议向Apple 提交错误报告以描述此问题。您可能还希望与Apple客户支持联系。

听到这个烦人的问题的声音的人越多,Apple产品经理就越会优先处理优先事项,以便工程师能够对其进行修复。

调试/将来的调查

这个MacRumors论坛讨论不仅提供了一些有用的信息,还增加了一个理论,即Wake for Wi-Fi Network Access设备唤醒/睡眠与该问题有关。提出的其他理论与使用多个网络适配器(例如WiFi + Thunderbolt以太网)有关,这些路由器具有在多个频段(例如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

1
这不是解决方案,但支持详细信息和历史记录。
jontsai

经过测试,我想提供一些很棒的初步结果!自从更改此设置以来,到目前为止,我还没有看到问题再次出现System Preferences→Energy Saver→Wake for Wi-Fi network access → Unchecked。我认为我需要再次重新启动系统,并让它运行一段时间才能完全说服我...但是我们可能有解决方案!
TrinitronX

改变上述26天后Wake for Wi-Fi network access的设置,我很伤心地报告,我的MacBook又变了名字!看来,该行为肯定与Bonjour和AirPlay有关。在过去的26天里,除了可能*.local从命令行实用程序进行主机名DNS查找之外,我没有使用Bonjour访问许多应用程序。今天,我打开AirFoilAirFoil Sattelite应用程序,并立即注意到了我的主机名曾与后缀改变(2)。这些应用程序可能会提供该错误的再现测试用例
TrinitronX

1

您是否正在使用同一局域网中的两个网络设备?例如,wifi和有线以太网?尝试禁用其中之一。我曾经有这个问题,并以此方式解决。


1
我不是,但是现在。设备通常通过wifi或有线以太网连接。但是今天我更改了iMac,使其可以通过wifi和以太网连接,以尝试使iTunes wifi同步正常工作。此项更改是在最近的iMac重命名事件之后进行的,因此在这种情况下不是原因。
Cleggy 2014年

1

这里同样的问题。但是似乎foo(2)名称已被时间机器接受,并且它仍将备份复制到同一位置(它似乎没有重做整个备份,而是继续进行)。因此,无害无犯规。我认为这与多个活动接口有关,我弹出了以太网以加快备份速度。


您正确地认为,拥有两个网络接口似乎更可能使这种情况发生。很明显,当只有一个接口并且一台机器的睡眠时间接近路由器上的DHCP保留时间时,也会发生这种情况。
bmike

0

没有阻止此的好方法。Apple必须替换主机名的代码,以便始终向用户(人员和程序)显示由主机设置的主机名,scutil并在后台进行所有重命名/翻译。

至少自2012年以来,这种情况在所有Apple产品线(Apple TV,iPhone,Mac甚至可能是Apple Watch)中都一直在发生,因此尚不清楚Apple是否认为这是一个要解决的问题。


-2

这可能与您加入网络并首次设置计算机时处于活动状态的用户有关。在构建这些计算机时,您很可能总是以同一用户身份进行操作

如果您在MacBook Pro等上创建了例如dave的用户,则计算机将按以下方式自动配置命名:

计算机名称:戴夫的MacBook Pro

本地主机名:daves-MacBook-Pro.local

在终端中,主机名将显示为:daves-mbp

假设您以“ dave”身份登录的下一台计算机也是MacBook Pro,它将设置完全相同的详细信息-您连接到网络,并获得有关重复名称的消息。

在我工作的地方,我们在共享中更改名称,然后打开终端并运行以下命令:sudo scutil –-set HostName new_hostname

(其中new_hostname是您选择的名称)

然后退出并重新启动终端,您将看到新的主机名。

将用户迁移到新计算机时,您也会遇到此问题-迁移助手/时间计算机将重命名新计算机

关于名称的一些通常较弱的信息-http: //support.apple.com/kb/PH13790


这种情况发生在一年前安装了两台计算机,或者在OPs情况下是一台计算机
user151019 2014年

-2

当运行两个重叠的DHCP服务器时,会发生这种情况。如果您使用多个路由器(网桥模式),请确保其中只有一个在运行DHCP而没有静态IP。


1
这里情况不同。我唯一的DHCP服务器是Airport Extreme路由器。
Cleggy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.