Multi monitors panel layouts and background switcher
At the moment (= Ubuntu MATE 19.04), If you use Ubuntu MATE with several monitors, you might have figured out it can be tricky sometimes.
- When turning on additional monitors, they will be panel-free. You can add/customize panels and docks to it but as soon as you turn an additional monitor off, those will go to the remaining monitor(s) and of course, you don't want that.
- Turning on more than one monitor during a session gives me corruption on the added monitor space (Windows leave a trail etc...). Reloading/changing the desktop background fixes immediately the issue for whatever reason.
This little script aims to provide a workaround for both problems by switching between panel layouts and desktop background(s) for each situation (monitor 1, monitor 1 + 2 etc...) using a keyboard shortcut.
1 - Preparing panel layouts.
A - For the first monitor.
Edit your panel for your single monitor usage.
Go to the panel section, click save as and name it solo.
B - For the second monitor.
Add your panels on monitor 2 and customize it. To do so, add a new panel on monitor 1 by right clicking on an existing panel, select add a new panel, then go to its properties, untick "extend" and drag it on monitor 2 while maintaining the left alt key and fill it with whatever applets you want.
Save your new dual monitor layout in
mate-tweak and name it dual.
C - For the third monitor.
Repeat step B on monitor 3 but name it triple this time.
D - The Plank dock (optional).
If you want your Plank dock on more than one monitor, do this:
In a terminal window:
cd ~/.config/plank & mkdir dock2
cp dock1/launchers dock2/
plank -n dock2
Dock2 should then launch on top of Dock1 with the same launchers icons.
With an additional monitor turned on, hold ctrl and right click on the dock, go to Preferences in order to select the monitor this second dock will be displayed on.
It should now display on the second monitor.
You can repeat this with as many docks you want. Just edit dock2 to dock3 for monitor 3 etc...
Layouts are stored in /usr/share/mate-panel/layouts. Customs layouts have "-tweak" added at the end of the filename given in
mate-tweak. solo layout will become solo-tweak for instance.
2 - The switching script
A - Creating the script
Copy this script, paste it in a text editor, edit the path to your background(s), save it and gave it a name. Make it executable (chmod +x filename in a terminal or tick the case in the permissions tab of the file properties) . It's currently written for 3 monitors as triple monitor setups seem to be quite popular.
########## MATE panel switcher ##########
bg='gsettings set org.mate.background picture-filename'
bgo='gsettings set org.mate.background picture-options'
n='notify-send -i mate -t 2000'
$n 'MATE panel switcher' 'Switching to one monitor layout'
$n 'MATE panel switcher' 'Switching to dual monitors layout'
$n 'MATE panel switcher' 'Switching to triple monitors layout'
if [ $(xrandr | grep -sw 'connected' | wc -l) == "1" ] ; then
elif [ $(xrandr | grep -sw 'connected' | wc -l) == "2" ] ; then
elif [ $(xrandr | grep -sw 'connected' | wc -l) == "3" ] ; then
B - Assigning a keyboard shortcut to the script
Add a new shortcut.
As a command, choose the /path/to/the/scriptname and apply.
Click on "disabled" in the shortcut column next to it and give it the key combination you want. One you will remember. I chose Alt+C.
C - Usage
- Just enter your keyboard shortcut every time you turn on or off an additional monitor.
- Code contributor vkareh provided an interesting solution in the forums for automating stuff when plugging several monitors: autorandr. As mentioned here you can use postswitch files in order to execute commands every time you plug/unplug a monitor. Sadly, it would only work when I switch from one to several monitors and not the other way around and seemed to open more and more panels/plank processes in the meantime. So I chose to stick with the manual workaround at the moment.
- Feel free to comment/remove Plank dock related lines if you don't use it.
- Add other similar functions if you use more than 3 monitors.
- The "spanned" picture option allows you to use background pictures designed for multi monitors with resolutions like 3840x1080 (2x 1080p monitors) or 5760x1080 (3x 1080p monitors) and stretch them all over the space. Use "zoom" instead if you want the same image repeated on all monitors.
pkill plankis there in order to kill docks so that docks from additional monitors don't sit on other docks when turning them off. I couldn't find a command to kill a specific dock so I killed them all. docks for the remaining monitors will automatically be reloaded one second later.
Default behavior with two monitors:
Expected behavior with two monitors (using script):
Back to one monitor (without script):
Back to one monitor (using script):