Add custom network device icons in Mac OS X Finder?

12,997

Solution 1

Seems that I was very close, I just wasn't getting my machine to advertise itself properly.

I finally got it to work:

Custom Network Device Image in Mac OS X

The method I used is below:

  1. First, on the Mac, I created a custom bundle which I called "ComputerTypes" by copying and pasting an existing bundle such as MobileDevices.bundle or MachineTypes.bundle in the /System/Library/CoreServices/CoreTypes.bundle/Contents/Library folder.

  2. I then opened Contents/Info.plist with XCode Plist Editor and edited all the details to create a custom bundle, changing the Bundle Identifier, Name, etc.

  3. I removed all the existing entries in the "UTExportedTypeDeclarations" key then created a new entry per device. Each device entry has a "UTTypeConformsTo", "UTTypeDescription", "UTTypeIconFile", "UTTypeIdentifier" and "UTTagSpecification", where the "UTTagSpecification" dictorinary contains an Array in the key "com.apple.device-model-code" with all of the mDNS _device-info._tcp identifiers to accept. UTTypeIconFile refers to a icns file in the Resources folder.

  4. I then saved the bundle to /System/Library/CoreServices/CoreTypes.bundle/Contents/Library folder and rebooted.

  5. On the other machine, I needed to set up to advertise a _smb._tcp service as well as the _device-info._tcp TXT record, as usual except using a custom model name rather than a Mac product name.

  6. After rebooting the Mac, it should appear like the picture above.

I uploaded the finished bundle to http://dl.dropbox.com/u/4140005/ComputerTypes.bundle.zip as an example.

Solution 2

This is probably only worthy of being a comment to Adam's answer, but I need formatting.

In Windows, assuming iTunes or Bonjour for Windows is installed, you can advertise a samba share with the following:

  1. Open two cmd prompts.
  2. Run the following commands (in different consoles):

    dns-sd -R ComputerName _device-info._tcp local 445 model=Xserve3,1

    dns-sd -R ComputerName _smb._tcp local 445

Dns-sd won't exit, and if you Ctrl-C or close cmd, the share will disappear from Finder. I can only manage to use the default OSX icons, despite Adam's helpful sample file (it might be a 10.6 vs. 10.8 issue... there are plist differences between his and 10.8's). Also, I'm having a heck of a time figuring out how to get windows to run this command and shut it down at poweron/poweroff and wake/sleep (though, to shut down dns-sd from a bat script you'd just use taskkill).

Share:
12,997

Related videos on Youtube

Adam M-W
Author by

Adam M-W

Updated on September 18, 2022

Comments

  • Adam M-W
    Adam M-W over 1 year

    Mac OS X Finder is smug enough to display any non-Mac device as a picture of a PC with a BSOD, but I'm wondering if it's possible to add other devices, so my Ubuntu machine is detected and has a picture of a Ubuntu PC, and my Windows PCs has a picture of Windows crashing, etc.

    I know that public.generic-pc.icns exists and can be replaced but I'm not interested in replacing it per se, more interested in getting finder to recognise other devices (or learn how it recognises other Apple devices) and map custom icons to them.

    Any clue?

    • Admin
      Admin over 12 years
      There needs to be a way to distinguish between the machines, and I don't think samba will purposely behave different from windows to be recognised as such...
    • Admin
      Admin over 12 years
      According to this, you can advertise a server as an Xserve or other device. Looking in CoreType.bundle, I can see that there is a mapping of these names (for example Xserve or RackMac is mapped to com.apple.xserve (.icns) by using the com.apple.device-model-code Equivalent Types. Extending from this, I'd assume that creating a custom one would be adding another entry, but I can't get it to work.
    • Admin
      Admin over 12 years
      I'd argue this belongs to SO because I don't believe there's any tweak that would allow that without any heavy programming. But then again, I'm just guessing here in hope to shed a light. :P
  • HikeMike
    HikeMike about 12 years
    Very nice. How'd you accomplish step 5? Samba configuration?
  • Adam M-W
    Adam M-W about 12 years
    Step 5 is just about setting avahi-daemon to advertise a _smb._tcp service and a _device-info._tcp txt record. The howto linked above if you scroll down to step 5 should help, except change _afpovertcp to _smb and change to port 445, and change the model to your custom value.
  • John O
    John O over 11 years
    Has anyone gotten this to work on a windows machine? Is there even a Bonjour implementation on Windows that can do the advertisement?
  • Alex Gittemeier
    Alex Gittemeier about 11 years
    could you just run the batch as a service?
  • yass
    yass about 7 years
    Don't forget the question was asked 5 years ago and the comments are old also, at that time it was fine
  • Tetsujin
    Tetsujin about 2 years
    …and another 5 years later, even disabling SIP won't let you change anything on the boot drive. It's now encrypted & hashed.