We know why it is moving: Why does my dock keep moving back to my other monitor?
Now, how can we stop it? Some terminal command or even paid software?
We know why it is moving: Why does my dock keep moving back to my other monitor?
Now, how can we stop it? Some terminal command or even paid software?
You cannot "just" stop it, unfortunately.
You have some options to keep it in the same place, but they have drawbacks:
A) Keep the dock on the left or right side of the desktop. That way it will stay in place.
or
B) In Preferences => Mission Control, uncheck "Displays have separate Spaces". Now the dock will stay in place, but monitors will switch spaces together rather than independently.
Although you can't stop it happening, you can reset its position by restarting the Dock process:
sudo killall Dock
Worked for me like @Allan or @Scott Reed suggested.
Old thread, but I spent some time looking for an answer to this. There used to be a plist preference to change this behavior, but Apple removed it.
I think the "extended display" behavior, when you uncheck "Displays have separate spaces," is even worse in various other ways, such as not remembering your window positions if the display sleeps momentarily. I even considered a few overkill third-party software solutions to manipulate the behavior of multiple displays on macOS, but it turns out the simplest thing to do is just set the "autohide" delay to an impossibly high number. Even if you have autohide turned off, macOS uses this setting to determine how long it takes for the Dock to move between displays.
So, defaults write com.apple.dock autohide-delay -float 9999999; killall Dock
& Bob's your uncle. In the unlikely event that you leave the cursor at the bottom of your secondary screen for too long and move the Dock to an unwanted position, you can just reduce the delay to fix it, and then extend it again.
This is a pretty old post and I've been trying to achieve this as well, but there doesn't seem to be an official way to achieve this in macOS Sonoma yet.
I use three monitors for work and was very annoyed by the Dock jumping between monitors when I just touch bottom! (Mac sometimes ruins my user experience in places like this...)
Fortunately, among the previously posted answers, the Shell Script written by aratuk worked very well for me. (Thanks aratuk!)
However, there are times when I want to use this function at home rather than at work, and entering this command every time is quite a hassle... So I wrote a small AppleScript that can solve this with a mouse click. I hope this helps others who have the same needs as me.
If click 'Disable Auto-hide', It will never jump between monitor. You can easily revert option to click 'Enable Auto-hide'.
Here is whole code :
-- Get the current delay value
set currentDelayValue to do shell script "defaults read com.apple.dock autohide-delay"
-- Determine if auto-hide is currently enabled or disabled
if currentDelayValue as number = 1 then
set currentStatus to "Enabled"
else
set currentStatus to "Disabled"
end if
-- Construct the description with a neater format
set description to "This setting can be particularly useful for users with multiple monitors to prevent the Dock from annoyingly jumping between screens.
(Current Dock auto-hide status is " & currentStatus & ")"
-- Display the dialog with options and current delay value
display dialog "Would you like to enable or disable Dock auto-hide delay?" & return & return & description buttons {"Cancel", "Enable Auto-hide", "Disable Auto-hide"} default button "Enable Auto-hide" cancel button "Cancel" with icon note
-- Get the button choice
set buttonChoice to button returned of the result
-- Handle the user's choice
if buttonChoice is "Enable Auto-hide" then
set delayValue to "1"
set successMessage to "Successfully enabled Dock auto-hide"
else if buttonChoice is "Disable Auto-hide" then
set delayValue to "9999999"
set successMessage to "Successfully disabled Dock auto-hide"
else
display notification "Operation aborted by user." with title "Script Aborted"
return
end if
-- Construct the command with the chosen delay value
set command to "defaults write com.apple.dock autohide-delay -float " & delayValue & "; killall Dock"
do shell script command
-- Check the exit status of the shell command
set exitStatus to the result
if exitStatus = "" then
display notification successMessage with title "Command Executed"
else
display notification "Command execution failed with error: " & exitStatus with title "Command Failed"
end if
My solution is to create a new shortcut with ICanHazShortcut with the terminal command "killall Dock". When you press the shortcut key you designate, it will move the dock back to the primary monitor.
This used to be one annoying issue I used to have. What I do these days is, if the doc accidentally switch to my secondary monitor, I right click on it > make position on screen to 'left'> then do the same to make the position on screen to 'middle'. This will switch it back to the main screen. Hope this helps :)
The dock no longer switches monitors as you'd want though, so that part is at least still working as expected.
– Scott Kingsley Clark Mar 28 '22 at 01:22