As a Mac sysadmin, I’ve had the need to manipulate the dock on hundreds of systems at a time.
I used to cobble together terrible shell scripts to do the job, but now thanks to plistlib and python, plist manipulation is really easy. I am releasing this utility free under the Apache 2.0 license. Hopefully some other sysadmins will find it useful.
dockutil is a command line utility for managing Mac OS X dock items.
It can add, replace, list, move, find, and delete dock items. It supports Applications, Folders, Stacks, and URLs. It can act on a specific dock plist or every dock plist in a folder of home directories.
It is compatible with Mac OS X Tiger and Leopard.
Here is the usage information:
usage: dockutil -h
usage: dockutil --add (path to item) | (url) [--label (label)] [ folder_options ] [ position_options ] [ plist_location_specification ]
usage: dockutil --remove (dock item label) [ plist_location_specification ]
usage: dockutil --move (dock item label) position_options [ plist_location_specification ]
usage: dockutil --find (dock item label) [ plist_location_specification ]
usage: dockutil --list [ plist_location_specification ]
position_options:
--replacing (dock item label name) replaces the item with the given dock label or adds the item to the end if item to replace is not found
--position [ index_number | beginning | end | middle ] inserts the item at a fixed position: can be an position by index number or keyword
--after (dock item label name) inserts the item immediately after the given dock label or at the end if the item is not found
--before (dock item label name) inserts the item immediately before the given dock label or at the end if the item is not found
--section [ apps | others ] specifies whether the item should be added to the apps or others section
plist_location_specifications:
(path to a specific plist) default is the dock plist for current user
(path to a home directory)
--allhomes attempts to locate all home directories and perform the operation on each of them
--homeloc overrides the default /Users location for home directories
folder_options:
--view [grid|fan|list|automatic] stack view option
--display [folder|stack] how to display a folder's icon
--sort [name|dateadded|datemodified|datecreated|kind] sets sorting option for a folder view
Examples:
The following adds TextEdit.app to the end of the current user's dock:
dockutil --add /Applications/TextEdit.app
The following replaces Time Machine with TextEdit.app in the current user's dock:
dockutil --add /Applications/TextEdit.app --replacing 'Time Machine'
The following adds TextEdit.app after the item Time Machine in every user's dock on that machine:
dockutil --add /Applications/TextEdit.app --after 'Time Machine' --allhomes
The following adds ~/Downloads as a grid stack displayed as a folder for every user's dock on that machine:
dockutil --add '~/Downloads' --view grid --display folder --allhomes
The following adds a url dock item after the Downloads dock item for every user's dock on that machine:
dockutil --add vnc://miniserver.local --label 'Mini VNC' --after Downloads --allhomes
The following removes System Preferences from every user's dock on that machine:
dockutil --remove 'System Preferences' --allhomes
The following moves System Preferences to the second slot on every user's dock on that machine:
dockutil --move 'System Preferences' --position 2 --allhomes
The following finds any instance of iTunes in the specified home directory's dock:
dockutil --find iTunes /Users/jsmith
The following lists all dock items for all home directories at homeloc in the form: item(tab)path(tab)(section)tab(plist)
dockutil --list --homeloc /Volumes/RAID/Homes --allhomes
Notes:
When specifying a relative path like ~/Documents with the --allhomes option, ~/Documents must be quoted like '~/Documents' to get the item relative to each home
Bugs:
Names containing special characters like accent marks will fail
Contact:
Send bug reports and comments to kcrwfrd at gmail.
May 16, 2008 at 7:55 am
Awesome! This is an excellent idea.
May 21, 2008 at 3:27 pm
Thank you. I’ve never had any luck manipulating the Dock using shell scripts (terrible or otherwise) – this utility is fantastic!
June 3, 2008 at 4:33 am
[...] dockutil 1.0 released « Pattern Buffer: Awesome command line utility for manipulating the Dock in Mac OS X (tags: commandline coolsoftware tips) Post a Comment [...]
June 9, 2008 at 8:31 pm
Hello Kyle,
I would like to add some CIFS shares automatically to a bunch of hosts, but didn’t recognize how to add shares with dockutil. Any hint?
Regards
June 10, 2008 at 8:52 pm
This should work:
dockutil –add smb://host.domain.com/Share –label Share
June 10, 2008 at 10:59 pm
That way it did show up as a URL link. I think that somewhere the automount-configuration has to be modified to get it done correctly, as existing shares show up as /Volumes// with some kind of binary ID in the plist.
June 10, 2008 at 11:00 pm
Edit:
Should have been “/Volumes/server/share”
June 18, 2008 at 10:15 pm
This is awesome.
July 13, 2008 at 10:13 pm
So this a great little util, im wondering if someone might be able to help me on a little project, at the moment, i would like to change how it creates its property list, meaning how can i get the dock.app to create a com.apple.dock.plist with a diff name such as com.apple.dock2.plist? i dont want redirect what plist it uses, i want it to create a the plist with a diff name if it is unable to fine the default. Understand?
September 11, 2008 at 5:11 am
Awesome, can’t wait to give it a try!
Thanks
Lach
August 14, 2009 at 8:41 pm
Just wondering if this also altered the dock in any of the User Template folders?
August 15, 2009 at 2:19 am
dockutil 1.0 does not modify the User Template dock plist.
November 19, 2009 at 11:26 pm
Can it modify the User Template dock? I know that it doesn’t by default and I was messing around with homeloc for a little bit but couldn’t get it to work. Is there something I am missing?
November 26, 2009 at 4:55 am
No, sorry. There is a bug that prevents it from working on the User Template because there is a space in the path. I will fix in next version if someone else doesn’t fix it before me.